revit二次开发创建拉伸体量

internal class Class5 : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
    {

        Document revitDoc = commandData.Application.ActiveUIDocument.Document;
        ReferenceArrayArray raa = new ReferenceArrayArray();
        ReferenceArray ra = new ReferenceArray();

        int y = 100;
        int x = 50;
        XYZ ptA = new XYZ(-x, y, 0);
        XYZ ptB = new XYZ(x, y, 0);
        XYZ ptC = new XYZ(0, y + 10, 10);

        using (Transaction tr = new Transaction(revitDoc, "tl"))
        {
            tr.Start();
            ModelCurve modelCurve = FormUtils.MakeArc(revitDoc, ptA, ptB, ptC);
            ra.Append(modelCurve.GeometryCurve.Reference);
            raa.Append(ra);

            ra = new ReferenceArray();
            y = 40;
            ptA = new XYZ(-x, y, 5);
            ptB = new XYZ(x, y, 5);
            ptC = new XYZ(0, y, 25);
            modelCurve = FormUtils.MakeArc(revitDoc, ptA, ptB, ptC);
            ra.Append(modelCurve.GeometryCurve.Reference);
            raa.Append(ra);

            ra = new ReferenceArray();
            y = -20;
            ptA = new XYZ(-x, y, 0);
            ptB = new XYZ(x, y, 0);
            ptC = new XYZ(0, y, 15);
            modelCurve = FormUtils.MakeArc(revitDoc, ptA, ptB, ptC);
            ra.Append(modelCurve.GeometryCurve.Reference);
            raa.Append(ra);

            ra = new ReferenceArray();
            y = -60;
            ptA = new XYZ(-x, y, 0);
            ptB = new XYZ(x, y, 0);
            ptC = new XYZ(0, y+10, 20);
            modelCurve = FormUtils.MakeArc(revitDoc, ptA, ptB, ptC);
            ra.Append(modelCurve.GeometryCurve.Reference);
            raa.Append(ra);

            ra = new ReferenceArray();
            raa.Append(ra);

            Form form = revitDoc.FamilyCreate.NewLoftForm(true, raa);

            tr.Commit();
        }

        return Result.Succeeded;
    }
}

class FormUtils
{
    public static ModelCurve MakeArc(Document document, XYZ ptA, XYZ ptB, XYZ ptC)
    {
        Arc arc = Arc.Create(ptA, ptB, ptC);
        Line line1 = Line.CreateBound(ptA, ptB);
        Line line2 = Line.CreateBound(ptB, ptC);
        Line line3 = Line.CreateBound(ptC, ptA);
        CurveLoop loop = new CurveLoop();
        loop.Append(line1);
        loop.Append(line2);
        loop.Append(line3);
        Plane plane = loop.GetPlane();
        SketchPlane sketchPlane = SketchPlane.Create(document,plane);
        ModelCurve modelCurve = document.FamilyCreate.NewModelCurve(arc, sketchPlane);
        return modelCurve;
    }
    public static ModelCurve MakeLine(Document document, XYZ ptA, XYZ ptB)
    {
        Line line = Line.CreateBound(ptA, ptB);
        XYZ norm = ptA.CrossProduct(ptB);
        if (norm.GetLength() == 0) norm = XYZ.BasisZ;
        Plane plane = Plane.CreateByNormalAndOrigin(norm, ptB);
        SketchPlane skplane = SketchPlane.Create(document, plane);
        ModelCurve modelcurve = document.FamilyCreate.NewModelCurve(line, skplane);
        return modelcurve;
    }
    public static ModelCurve MakeLine(Document document, XYZ ptA, XYZ ptB, XYZ norm)
    {
        Line line = Line.CreateBound(ptA, ptB);
        Plane plane = Plane.CreateByNormalAndOrigin(norm, ptB);
        SketchPlane skplane = SketchPlane.Create(document, plane);
        ModelCurve modelcurve = document.FamilyCreate.NewModelCurve(line, skplane);
        return modelcurve;
    }
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值