Revit二次开发用API创建拉伸体

一、Revit拉伸介绍

拉伸是最容易创建的形状。可以在工作平而上绘制形状的二维轮廓,然后拉伸该轮廓使其与绘制它的平面垂直。根据描述,拉伸操作需要三个输入:

①工作平面;

②工作平面上的二维轮廊(必须闭合);

③拉伸的长度。

在界面上,如要拉伸墙到弧形屋顶,操作的大体步骤如下图。

①:选择工作平面 

Revit二次开发用API创建拉伸体_第1张图片

②:选择一个绘制屋顶的视图

Revit二次开发用API创建拉伸体_第2张图片

③:切换至北立面,确定绘制标高为“标高2”,无偏移。

Revit二次开发用API创建拉伸体_第3张图片

④:用“起点-终点-半径弧”工具创建拉伸屋顶的轮廓,最后“完成编辑模式”。

Revit二次开发用API创建拉伸体_第4张图片


二、使用Revit API创建拉伸体
在Revit API需要这三个输人来创建拉伸图元。创建拉伸图元的函数如下:

Autodesk.Revit.Creation.FamilyltemFactory 类:Extrusion NewExtrusion( bool isSolid,CurveArrArray profile,SketchPlanesketchPlane,double end)。
参数说明:
isSolid:说明该拉伸是实体还是剪切体
profile: —个平面上的二维轮廓(必须闭合)
sketchPlane:工作平面
end:拉伸长度 

注意:
拉伸的方向由工作平面的法向量确定。
API中,并不要求二维轮廊一定要在sketchPlane工作平面上(大多数情况下,二维轮廓是在工作平面上的),它们之间必须满足的是二维轮廓所在在平面和工作平面一定要平行。

代码:创建拉伸体。

	private Autodesk.Revit.ApplicationServices.Application m_revit; 
        private Document m_familyDocument;    // 已获得族文档的实例 
                                              // 创建工作平面的函数,输入为平面的原点和法向量 
        internal SketchPlane CreateSketchPlane(Autodesk.Revit.DB.XYZ normal, Autodesk.Revit.DB.XYZ origin)
        {
            // 首先创建几何平面 
            Plane geometryPlane = m_revit.Create.NewPlane(normal, origin);
            if (null == geometryPlane)
            {
                return null;
            }
            // 根绝几何平面创建工作平面 
            SketchPlane plane = SketchPlane.Create(m_familyDocument, geometryPlane);
            if (null == plane)
            {
                return null;
            }
            return plane;
        }

        // 创建用于拉伸的轮廓线 
        private CurveArrArray CreateExtrusionProfile()
        {
            // 轮廓线可以包括一个或者多个闭合的轮廓,所以最后返回是CurveArrArray 
            CurveArrArray curveArrArray = new CurveArrArray();
            CurveArray curveArray1 = new CurveArray();

            // 创建一个正方体的轮廓线,先创建点,再创建线,最后组合成轮廓。 
            Autodesk.Revit.DB.XYZ p0 = Autodesk.Revit.DB.XYZ.Zero;
            Autodesk.Revit.DB.XYZ p1 = new Autodesk.Revit.DB.XYZ(10, 0, 0);
            Autodesk.Revit.DB.XYZ p2 = new Autodesk.Revit.DB.XYZ(10, 10, 0);
            Autodesk.Revit.DB.XYZ p3 = new Autodesk.Revit.DB.XYZ(0, 10, 0);
            Line line1 = Line.CreateBound(p0, p1);
            Line line2 = Line.CreateBound(p1, p2);
            Line line3 = Line.CreateBound(p2, p3);
            Line line4 = Line.CreateBound(p3, p0);
            curveArray1.Append(line1);
            curveArray1.Append(line2);
            curveArray1.Append(line3);
            curveArray1.Append(line4);
            curveArrArray.Append(curveArray1);
            return curveArrArray;
        }

        private void CreateExtrusion(Autodesk.Revit.Creation.FamilyItemFactory familyCreator)
        {
            // 调用函数创建拉伸的轮廓线和工作平面 
            CurveArrArray curveArrArray = CreateExtrusionProfile();
            SketchPlane sketchPlane = CreateSketchPlane(XYZ.BasisZ, XYZ.Zero);

            // 调用API创建拉伸(实心正方体) 
            Extrusion rectExtrusion = familyCreator.NewExtrusion(true, curveArrArray, sketchPlane, 10);
            // 可能我们会希望把拉伸体移动到希望的位置上 
            XYZ transPoint1 = new XYZ(-16, 0, 0);
            ElementTransformUtils.MoveElement(m_familyDocument, rectExtrusion.Id, transPoint1);
        }

1) 拉伸属性 ① IsSolid属性:该拉伸是实体还是剪切体。
Sketch属性:拉伸的草图,包括拉伸的二维轮廓线和工作平面。
StartOffset和EndOffset:拉伸相对于工作平面的起始和终止偏移。

2) 草图(Sketch 类)
在Revit中,有一些图元是使用草图模式创建的,例如,工程文件中的楼板、天花板和族文件中的拉伸等。而草图模式是指Revit中的一种环境,使用该环境可绘制其尺寸或形状不能自动确定的图元。Sketch类就是用来访问它创建的草图,包括草图模式中绘制形状和工作平面。

Sketch类属性(只读):
Profile:用来获取草图中的轮廊线。

SketchPlane••用来获取草图中的工作平面。


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


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


你可能感兴趣的:(RevitAPI,RevitAPI,几何数据)