Revit二次开发之创建双坡式屋顶及在屋顶开洞口【比目鱼原创】

来源:互联网 发布:形势与政策论文 网络 编辑:程序博客网 时间:2024/05/01 12:52

=========【更多高级应用请关注公众号】========


===================================


创建拉升屋顶的两个方法:


① ExtrusionRoof  NewExtrusionRoof (CurveArray profile, ReferencePlane refPlane, Level level, RoofType roofType, double extrusionStart, double extrusionEnd);

参数说明:

参数

含义

profile

屋顶的_面形状,注竞适非封闭曲线

rcfPlane

参照平面

level

屋顶的标商

roofType

屋顶类型

extrusionStart

拉升起点,相对于屋顶侧面的位移,负值代表反向拉升

exirusionEnd

拉升终点,相对于屋顶侧面的位移,负值代表反向拉升


创建双坡式屋顶示例代码:

void CreatRoof(Document RevitDoc)        {            using (Transaction transaction = new Transaction(RevitDoc))            {                View view = RevitDoc.ActiveView;                //先创建一个参照平面                 XYZ bubbleEnd = new XYZ(0, 0, 0);                XYZ freeEnd = new XYZ(0, 100, 0);                XYZ thirdPnt = new XYZ(0, 0, 100);                transaction.Start("Create reference plane");                ReferencePlane plane = RevitDoc.Create.NewReferencePlane2(bubbleEnd, freeEnd, thirdPnt, view);                transaction.Commit();                //创建屋顶前准备参数                 Level level = RevitDoc.GetElement(new ElementId(311)) as Level;                RoofType roofType = RevitDoc.GetElement(new ElementId(335)) as RoofType;                CurveArray curveArray = new CurveArray();                curveArray.Append(Line.CreateBound(new XYZ(0, 0, 50), new XYZ(0, 50, 100)));                curveArray.Append(Line.CreateBound(new XYZ(0, 50, 100), new XYZ(0, 100, 50)));                //创建屋顶                 transaction.Start("Create roof");                RevitDoc.Create.NewExtrusionRoof(curveArray, plane, level, roofType, 10, 200);                transaction.Commit();            }        }
 结果:


创建带洞口屋顶示例代码:

void CreatRoofOpening(Document RevitDoc)        {            using (Transaction transaction = new Transaction(RevitDoc))            {                //创建屋顶前准备参数                 Level level = RevitDoc.GetElement(new ElementId(311)) as Level;                RoofType roofType = RevitDoc.GetElement(new ElementId(335)) as RoofType;                CurveArray curveArray = new CurveArray();                //屋顶外边框                 curveArray.Append(Line.CreateBound(new XYZ(0, 0, 0), new XYZ(30, 0, 0)));                curveArray.Append(Line.CreateBound(new XYZ(30, 0, 0), new XYZ(30, 30, 0)));                curveArray.Append(Line.CreateBound(new XYZ(30, 30, 0), new XYZ(0, 30, 0)));                curveArray.Append(Line.CreateBound(new XYZ(0, 30, 0), new XYZ(0, 0, 0)));                //在中间添加洞口                 curveArray.Append(Line.CreateBound(new XYZ(5, 5, 0), new XYZ(5, 15, 0)));                curveArray.Append(Line.CreateBound(new XYZ(5, 15, 0), new XYZ(15, 5, 0)));                curveArray.Append(Line.CreateBound(new XYZ(15, 5, 0), new XYZ(5, 5, 0)));                //创建屋顶                 transaction.Start("Create roof");                ModelCurveArray modelCurveArray = new ModelCurveArray();                FootPrintRoof roof =                   RevitDoc.Create.NewFootPrintRoof(curveArray, level, roofType, out modelCurveArray);                //设置屋顶坡度                 ModelCurve curve1 = modelCurveArray.get_Item(0);                ModelCurve curve3 = modelCurveArray.get_Item(2);                roof.set_DefinesSlope(curve1, true);                roof.set_SlopeAngle(curve1, 0.5);                roof.set_DefinesSlope(curve3, true);                roof.set_SlopeAngle(curve3, 1.6);                transaction.Commit();            }        }

结果:

· 获取屋顶数据
拉升屋顶一个重要的方法是 GetProfile()返回 ModelCurveArray 的对象,用来获取屋顶的侧面形状,与创建拉升屋顶时传人的CurveArray的对象一 一对应。
对于迹线屋顶,可以使用最后一个out 参数footPrintToModelCurvesMapping 获取的ModelCurve来判断屋顶是否有坡度,以及坡度大小。


· 创建天花板
目前尚没有API支持创建天花板。

阅读全文
0 0
原创粉丝点击