2027 Method
Changes 0
M

FamilyItemFactory.NewRevolveForms

Description:
Create new Form elements by revolve operation, and add them into the Autodesk Revit family document.
Remarks:
Typically this operation produces only a single form, but some combinations of arguments will create multiple forms from a single profile.
public FormArray NewRevolveForms(
	bool isSolid,
	ReferenceArray profile,
	Reference axis,
	double startAngle,
	double endAngle
)
  • Boolean
    isSolid
    Indicates if the Form is Solid or Void.
  • profile
    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
    The axis of revolution. The axis is a line that must lie in the same plane as the curves in the profile.
  • Double
    startAngle
    The start angle of Revolution in radians.
  • Double
    endAngle
    The end angle of Revolution in radians.
Return Value FormArray If creation was successful new forms are returned.
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;
}