revit二次开发 内建模型之放样

本文介绍如何使用Revit API进行放样建模,通过创建路径和轮廓,实现特定几何形状的三维建模,如球体。文章详细展示了创建放样参数、轮廓线和路径的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


        /// <summary>
        /// 内建模型(放样)
        /// </summary>
        private static void CreateSphereDirectShape(double MaxHeight, double MinHeight, double Width, 
            CurveLoop cl)
        {
            var doc = RvtExternalData.Current.Doc;

            var cv = cl.GetByIndexT<Curve>(0);
            if (cv == null)
                return;

            XYZ vec;
            if (cv is Arc)
            {
                Arc ac = cv as Arc;
                vec = ac.StartPoint().Subtract(ac.Center).Normalize();
            }
            else
            {
                vec = cv.UnitVector().VectorRotate(-Math.PI / 2);
            }

            //创建放样时用到得参数pathAttachmentParam
            double param = cv.GetEndParameter(0);
            //轮廓线
            CurveArray curveArray = new CurveArray();
            XYZ xYZ = cv.StartPoint();
            XYZ xYZ2 = xYZ.OffsetPoint(vec, Width);
            XYZ xYZ3 = xYZ2.OffsetPoint(XYZ.BasisZ, MaxHeight);
            XYZ xYZ4 = xYZ.OffsetPoint(XYZ.BasisZ, MinHeight);
            curveArray.Append(Line.CreateBound(xYZ, xYZ2));
            curveArray.Append(Line.CreateBound(xYZ2, xYZ3));
            curveArray.Append(Line.CreateBound(xYZ3, xYZ4));
            curveArray.Append(Line.CreateBound(xYZ4, xYZ));
            List<CurveLoop> profileloops = new List<CurveLoop>();
            profileloops.Add(curveArray.ToCurveLoop());

            Transaction tran = wrapper.NewTransaction;
            tran.Start();
            try
            {
                Solid solid = GeometryCreationUtilities.CreateSweptGeometry(cl, 0, param, profileloops/*, option*/);
                DirectShape ds = DirectShape.CreateElement(doc, new ElementId(BuiltInCategory.OST_GenericModel));
                if (ds != null)
                {
                    ds.AppendShape(new List<GeometryObject>() { solid });
                }
                tran.Commit();
            }
            catch (Autodesk.Revit.Exceptions.ArgumentException ex)
            {
                string msg = ex.Message;
                tran.RollBack();
            }
            catch (Exception ex)
            {
                string msg = ex.Message;
                tran.RollBack();
            }
        }

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值