revit 二次开发 之创建放样体
话不多说直接上代码
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class Class1 : IExternalCommand
{
private UIApplication _App;
private UIDocument _uiDoc;
private Document _doc;
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
_App = commandData.Application;
_uiDoc = _App.ActiveUIDocument;
_doc = _uiDoc.Document;
create();
return Result.Succeeded;
}
private void create()
{
using (Transaction transaction = new Transaction(_doc, "curve"))
{
transaction.Start();
// 创建截面
Line line1 = Line.CreateBound(new XYZ(0, 0, 0), new XYZ(400 / 304.8, 0, 0));
Line line2 = Line.CreateBound(new XYZ(400 / 304.8, 0, 0), new XYZ(400 / 304.8, 600 / 304.8, 0));
Line line3 = Line.CreateBound(new XYZ(400 / 304.8, 6 / 304.8, 0), new XYZ(0, 600 / 304.8, 0));
Line line4 = Line.CreateBound(new XYZ(0, 600 / 304.8, 0), new XYZ(0, 0, 0));
CurveArray curveArray = new CurveArray();
curveArray.Append(line1);
curveArray.Append(line2);
curveArray.Append(line3);
curveArray.Append(line4);
CurveArrArray curveArrArray = new CurveArrArray();
curveArrArray.Append(curveArray);
SweepProfile profile = _doc.Application.Create.NewCurveLoopsProfile(curveArrArray);
// 曲线路径
XYZ pnt4 = new XYZ(0, 20, 0);
XYZ pnt5 = new XYZ(0, 10, 0);
Curve curve = Line.CreateBound(pnt4, pnt5);
CurveArray curves = new CurveArray();
curves.Append(curve);
SketchPlane sketch = SketchPlane.Create(_doc, Plane.CreateByNormalAndOrigin(new XYZ(0, 0, 1), XYZ.Zero));
Sweep sweep = _doc.FamilyCreate.NewSweep(true,curves, sketch, profile,0, ProfilePlaneLocation.Start);
_doc.FamilyManager.NewType("自定义族类型");
transaction.Commit();
}
}
}
效果图