NewRevolveForms Method


Create new Form elements by revolve operation, and add them into the Autodesk Revit family document.

Namespace: Autodesk.Revit.Creation
Assembly: RevitAPI (in RevitAPI.dll) Version: 17.0.0.0 (17.0.484.0)

Syntax

C#
public FormArray NewRevolveForms(
	bool isSolid,
	ReferenceArray profile,
	Reference axis,
	double startAngle,
	double endAngle
)
Visual Basic
Public Function NewRevolveForms ( _
	isSolid As Boolean, _
	profile As ReferenceArray, _
	axis As Reference, _
	startAngle As Double, _
	endAngle As Double _
) As FormArray
Visual C++
public:
FormArray^ NewRevolveForms(
	bool isSolid, 
	ReferenceArray^ profile, 
	Reference^ axis, 
	double startAngle, 
	double endAngle
)

Parameters

isSolid
Type: System Boolean
Indicates if the Form is Solid or Void.
profile
Type: Autodesk.Revit.DB ReferenceArray
The profile of the newly created revolution. It should consist of only one curve loop. The profile must be in the same plane as the axis.
axis
Type: Autodesk.Revit.DB Reference
The axis of revolution. The axis is a line that must lie in the same plane as the curves in the profile.
startAngle
Type: System Double
The start angle of Revolution in radians.
endAngle
Type: System Double
The end angle of Revolution in radians.

Return Value

If creation was successful new forms are returned.

Remarks

Typically this operation produces only a single form, but some combinations of arguments will create multiple forms from a single profile.

Examples

Copy C#
private FormArray CreateRevolveForm(Document document)
{
    FormArray revolveForms = null;

    // Create one profile
    ReferenceArray ref_ar = new ReferenceArray();

    XYZ ptA = new XYZ(0, 0, 10);
    XYZ ptB = new XYZ(100, 0, 10);
    Line line = Line.CreateBound(ptA, ptB);
    ModelCurve modelcurve = MakeLine(document, ptA, ptB);
    ref_ar.Append(modelcurve.GeometryCurve.Reference);

    ptA = new XYZ(100, 0, 10);
    ptB = new XYZ(100, 100, 10);
    modelcurve = MakeLine(document, ptA, ptB);
    ref_ar.Append(modelcurve.GeometryCurve.Reference);

    ptA = new XYZ(100, 100, 10);
    ptB = new XYZ(0, 0, 10);
    modelcurve = MakeLine(document, ptA, ptB);
    ref_ar.Append(modelcurve.GeometryCurve.Reference);

    // Create axis for revolve form
    ptA = new XYZ(-5, 0, 10);
    ptB = new XYZ(-5, 10, 10);
    ModelCurve axis = MakeLine(document, ptA, ptB);

    // make axis a Reference Line
    axis.ChangeToReferenceLine();

    // Typically this operation produces only a single form, 
    // but some combinations of arguments will create multiple froms from a single profile.
    revolveForms = document.FamilyCreate.NewRevolveForms(true, ref_ar, axis.GeometryCurve.Reference, 0, Math.PI / 4);

    return revolveForms;
}

public ModelCurve MakeLine(Document doc, XYZ ptA, XYZ ptB)
{
    Autodesk.Revit.ApplicationServices.Application app = doc.Application;
    // Create plane by the points
    Line line = Line.CreateBound(ptA, ptB);
    XYZ norm = ptA.CrossProduct(ptB);
    if (norm.IsZeroLength()) norm = XYZ.BasisZ;
    Plane plane = Plane.CreateByNormalAndOrigin(norm, ptB);
    SketchPlane skplane = SketchPlane.Create(doc, plane);
    // Create line here
    ModelCurve modelcurve = doc.FamilyCreate.NewModelCurve(line, skplane);
    return modelcurve;
}
Copy VB.NET
Private Function CreateRevolveForm(document As Document) As FormArray
    Dim revolveForms As FormArray = Nothing

    ' Create one profile
    Dim ref_ar As New ReferenceArray()

    Dim ptA As New XYZ(0, 0, 10)
    Dim ptB As New XYZ(100, 0, 10)
    Dim line__1 As Line = Line.CreateBound(ptA, ptB)
    Dim modelcurve As ModelCurve = MakeLine(document, ptA, ptB)
    ref_ar.Append(modelcurve.GeometryCurve.Reference)

    ptA = New XYZ(100, 0, 10)
    ptB = New XYZ(100, 100, 10)
    modelcurve = MakeLine(document, ptA, ptB)
    ref_ar.Append(modelcurve.GeometryCurve.Reference)

    ptA = New XYZ(100, 100, 10)
    ptB = New XYZ(0, 0, 10)
    modelcurve = MakeLine(document, ptA, ptB)
    ref_ar.Append(modelcurve.GeometryCurve.Reference)

    ' Create axis for revolve form
    ptA = New XYZ(-5, 0, 10)
    ptB = New XYZ(-5, 10, 10)
    Dim axis As ModelCurve = MakeLine(document, ptA, ptB)

    ' make axis a Reference Line
    axis.ChangeToReferenceLine()

    ' Typically this operation produces only a single form, 
    ' but some combinations of arguments will create multiple froms from a single profile.
    revolveForms = document.FamilyCreate.NewRevolveForms(True, ref_ar, axis.GeometryCurve.Reference, 0, Math.PI / 4)

    Return revolveForms
End Function

Public Function MakeLine(doc As Document, ptA As XYZ, ptB As XYZ) As ModelCurve
    Dim app As Autodesk.Revit.ApplicationServices.Application = doc.Application
    ' Create plane by the points
    Dim line__1 As Line = Line.CreateBound(ptA, ptB)
    Dim norm As XYZ = ptA.CrossProduct(ptB)
    If norm.IsZeroLength() Then
        norm = XYZ.BasisZ
    End If
 Dim plane As Plane = plane.CreateByNormalAndOrigin(norm, ptB)
    Dim skplane As SketchPlane = SketchPlane.Create(doc, plane)
    ' Create line here
    Dim modelcurve As ModelCurve = doc.FamilyCreate.NewModelCurve(line__1, skplane)
    Return modelcurve
End Function

See Also