/// <summary> /// The method is used to create extrusion using FamilyItemFactory.NewExtrusion() /// </summary> /// <param name="curveArrArray">the CurveArrArray parameter</param> /// <param name="workPlane">the reference plane is used to create SketchPlane</param> /// <param name="startOffset">the extrusion's StartOffset property</param> /// <param name="endOffset">the extrusion's EndOffset property</param> /// <returns>the new extrusion</returns> public Extrusion NewExtrusion(CurveArrArray curveArrArray, ReferencePlane workPlane, double startOffset, double endOffset) { Extrusion rectExtrusion = null; try { SubTransaction subTransaction = new SubTransaction(m_document); subTransaction.Start(); SketchPlane sketch = SketchPlane.Create(m_document, workPlane.GetPlane()); rectExtrusion = m_familyCreator.NewExtrusion(true, curveArrArray, sketch, Math.Abs(endOffset - startOffset)); rectExtrusion.StartOffset = startOffset; rectExtrusion.EndOffset = endOffset; subTransaction.Commit(); return(rectExtrusion); } catch { return(null); } }
/// <summary> /// Create an extrusion from a given thickness /// and list of XYZ points defined in millimetres /// in the given family document, which must /// contain a sketch plane named "Ref. Level". /// </summary> Extrusion CreateExtrusion( Document doc, List <XYZ> pts, double thickness) { Autodesk.Revit.Creation.FamilyItemFactory factory = doc.FamilyCreate; SketchPlane sketch = FindElement(doc, typeof(SketchPlane), "Ref. Level") as SketchPlane; CurveArrArray curveArrArray = new CurveArrArray(); curveArrArray.Append(CreateProfile(pts)); double extrusionHeight = MmToFoot(thickness); return(factory.NewExtrusion(true, curveArrArray, sketch, extrusionHeight)); }
/// <summary> /// Create one rectangular extrusion /// </summary> private void CreateExtrusion() { try { #region Create rectangle profile CurveArrArray curveArrArray = new CurveArrArray(); CurveArray curveArray1 = new CurveArray(); Autodesk.Revit.DB.XYZ normal = Autodesk.Revit.DB.XYZ.BasisZ; SketchPlane sketchPlane = CreateSketchPlane(normal, Autodesk.Revit.DB.XYZ.Zero); // create one rectangular extrusion Autodesk.Revit.DB.XYZ p0 = Autodesk.Revit.DB.XYZ.Zero; Autodesk.Revit.DB.XYZ p1 = new Autodesk.Revit.DB.XYZ(10, 0, 0); Autodesk.Revit.DB.XYZ p2 = new Autodesk.Revit.DB.XYZ(10, 10, 0); Autodesk.Revit.DB.XYZ p3 = new Autodesk.Revit.DB.XYZ(0, 10, 0); Line line1 = Line.CreateBound(p0, p1); Line line2 = Line.CreateBound(p1, p2); Line line3 = Line.CreateBound(p2, p3); Line line4 = Line.CreateBound(p3, p0); curveArray1.Append(line1); curveArray1.Append(line2); curveArray1.Append(line3); curveArray1.Append(line4); curveArrArray.Append(curveArray1); #endregion // here create rectangular extrusion Extrusion rectExtrusion = m_creationFamily.NewExtrusion(true, curveArrArray, sketchPlane, 10); // move to proper place Autodesk.Revit.DB.XYZ transPoint1 = new Autodesk.Revit.DB.XYZ(-16, 0, 0); ElementTransformUtils.MoveElement(m_familyDocument, rectExtrusion.Id, transPoint1); } catch (Exception e) { m_errCount++; m_errorInfo += "Unexpected exceptions occur in CreateExtrusion: " + e.ToString() + "\r\n"; } }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { Application app = commandData.Application.Application; string filename = Path.Combine(_folder, _template); Document familyDoc = app.NewFamilyDocument(filename); Family family = familyDoc.OwnerFamily; Autodesk.Revit.Creation.FamilyItemFactory factory = familyDoc.FamilyCreate; Extrusion extrusion = null; using (Transaction trans = new Transaction( familyDoc)) { trans.Start("Create Extrusion"); XYZ arcCenter = new XYZ(0.0, 3.0, -2.0); // Get the "left" view View view = GetView(ViewType.Elevation, XYZ.BasisY.Negate(), XYZ.BasisZ, familyDoc); // 2D offsets from view 'left' XYZ xOffset = new XYZ(0.0, 10.0, 0.0); XYZ yOffset = new XYZ(0.0, 0.0, -10.0); //################## Reference planes ################################ // Origin's reference planes ReferencePlane referencePlaneOriginX = factory.NewReferencePlane(XYZ.BasisX, XYZ.Zero, XYZ.BasisY, view); referencePlaneOriginX.Name = "ReferencePlane_OriginX"; referencePlaneOriginX.Pinned = true; ReferencePlane referencePlaneOriginY = factory.NewReferencePlane(XYZ.BasisZ, XYZ.Zero, -XYZ.BasisX, view); referencePlaneOriginY.Name = "ReferencePlane_OriginY"; referencePlaneOriginY.Pinned = true; // Reference planes the extruded arc should stick to ReferencePlane referencePlaneX = factory.NewReferencePlane( XYZ.BasisX + yOffset, XYZ.Zero + yOffset, XYZ.BasisY, view); referencePlaneX.Name = "ReferencePlane_X"; ReferencePlane referencePlaneY = factory.NewReferencePlane( XYZ.BasisZ + xOffset, XYZ.Zero + xOffset, -XYZ.BasisX, view); referencePlaneY.Name = "ReferencePlane_Y"; familyDoc.Regenerate(); //################## Create dimensions ############################### // Dimension x ReferenceArray refArrayX = new ReferenceArray(); refArrayX.Append(referencePlaneX.GetReference()); refArrayX.Append(referencePlaneOriginX.GetReference()); Line lineX = Line.CreateUnbound(arcCenter, XYZ.BasisZ); Dimension dimensionX = factory.NewDimension( view, lineX, refArrayX); // Dimension y ReferenceArray refArrayY = new ReferenceArray(); refArrayY.Append(referencePlaneY.GetReference()); refArrayY.Append(referencePlaneOriginY.GetReference()); Line lineY = Line.CreateUnbound(arcCenter, XYZ.BasisY); Dimension dimensionY = factory.NewDimension( view, lineY, refArrayY); familyDoc.Regenerate(); //################## Create arc ###################################### double arcRadius = 1.0; Arc arc = Arc.Create( XYZ.Zero + xOffset + yOffset, arcRadius, 0.0, 2 * Math.PI, XYZ.BasisZ, XYZ.BasisY.Negate()); CurveArray curves = new CurveArray(); curves.Append(arc); CurveArrArray profile = new CurveArrArray(); profile.Append(curves); Plane plane = new Plane(XYZ.BasisX.Negate(), arcCenter); SketchPlane sketchPlane = SketchPlane.Create( familyDoc, plane); Debug.WriteLine("Origin: " + sketchPlane.GetPlane().Origin); Debug.WriteLine("Normal: " + sketchPlane.GetPlane().Normal); Debug.WriteLine("XVec: " + sketchPlane.GetPlane().XVec); Debug.WriteLine("YVec: " + sketchPlane.GetPlane().YVec); extrusion = factory.NewExtrusion(true, profile, sketchPlane, 10); familyDoc.Regenerate(); //################## Add family parameters ########################### FamilyManager fmgr = familyDoc.FamilyManager; FamilyParameter paramX = fmgr.AddParameter("X", BuiltInParameterGroup.PG_GEOMETRY, ParameterType.Length, true); dimensionX.FamilyLabel = paramX; FamilyParameter paramY = fmgr.AddParameter("Y", BuiltInParameterGroup.PG_GEOMETRY, ParameterType.Length, true); dimensionY.FamilyLabel = paramY; // Set their values FamilyType familyType = fmgr.NewType( "Standard"); fmgr.Set(paramX, 10); fmgr.Set(paramY, 10); trans.Commit(); } // Save it to inspect SaveAsOptions opt = new SaveAsOptions(); opt.OverwriteExistingFile = true; filename = Path.Combine(Path.GetTempPath(), "test.rfa"); familyDoc.SaveAs(filename, opt); return(Result.Succeeded); }