revit二次开发中怎样建nurbspline曲线形式的钢筋

24 篇文章 0 订阅
12 篇文章 1 订阅

revit二次开发中nurbspline曲线的表现形式实际上是一系列的直线组成的。


由于revit只支持直线或者圆曲线的钢筋变成钢筋。所以不能将nurbspline曲线转成钢筋,所以可以先将nurbspline模型线转连续的直线,然后再转成钢筋即可。


其中,nurbspline模型线线转成连续的直线的代码如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.ApplicationServices;


namespace nurb曲线转连续的直线
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
    [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document revitDoc = commandData.Application.ActiveUIDocument.Document;  //取得文档
            Application revitApp = commandData.Application.Application;             //取得应用程序
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;   //取得当前活动文档
            


            Selection sel = uiDoc.Selection;
            Reference ref1 = sel.PickObject(ObjectType.Element, "选择nurb模型线");
            Element elem = revitDoc.GetElement(ref1);
            ModelNurbSpline nurbSpline = elem as ModelNurbSpline;


            IList<XYZ> listPoint = new List<XYZ>();
            listPoint= nurbSpline.GeometryCurve.Tessellate();


            XYZ normal = new XYZ(0, 0, 1);
            
            using (Transaction transaction = new Transaction(revitDoc))
            {
                transaction.Start("主题");
                //在下面添加主要代码内容
                SketchPlane modelSketch = SketchPlane.Create(revitDoc, revitApp.Create.NewPlane(normal, XYZ.Zero));
                for (int i=0;i<listPoint.Count()-1;i++)
                {                    
                    ModelCurve modelcurve = revitDoc.Create.NewModelCurve(Line.CreateBound(listPoint[i], listPoint[i+1]), modelSketch);
                }
                revitDoc.Delete(nurbSpline.Id);




                transaction.Commit();


            }
            return Result.Succeeded;
        }
    }
}

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值