RevitAPI之草图及草图平面

一、草图编辑

草图编辑在Revit中被广泛用于创建各种元素,包括绘制和修改模型的形状。

没有用于创建元素的绘制形状的绘画也属于草图编辑,例如,用鼠标移动的操作画一根曲线,在已经创建好的楼板上绘制褶皱来修改楼板的几何形状等。

草图编辑在用户界面上有专门的窗口区域,不同的元素提供不同的绘制草图的工具集,标准的工具集一•般有两种:

①、绘制形状的工具:直线,曲线,圆,多边形,椭圆,样条曲线。 
②、拾取已有几何图形来创建形状的工具——线,面拾取等。
 
草图编辑需要在一个表面上绘制形状,当这个表面为平面时称之为草图平面(SketchPlane)。草图平面也可以理解成以下几种情形:
•用户界面的工作平面或者详图元素的视图平面。
•标高或者其他的由草图编辑工具所决定的平面。
•元素约束条件所决定的表面。
•鼠标光标所在区域的一个几何面。

草图平面在API中被用于创建草图相关的元素,如模型线;或者用于创建拥有草图属性的元素,如构建的实体。草图平面可以从已存在的元素或者从几何面、平面创建。 

注意:
创建元素时传入的草图平面未必就是这个元素的实际草图平面,如果传入的草图平面已经被其他用途使用了,Revit就会寻找或者创建一个新的在几何上对等的草图平面。
一些草图平面只适合于用在创建详图元素上,比如那些从详图曲线获取到的草图平面,当被用在其他类型的元素上时,将会导致创建失败。

创建草图平面的方法在Autodesk.Revit.DB.SketchPlane类里,三个重载方法如表所示。

方法

描述

public static SketchPlane Create(Document document, ElementId datumId);

从网格、引用平面或者标高等元素创建一个草图平面

public static SketchPlane Create(Document document, Reference planarFaceReference);

从一个几何平面创建一个草图平面

public static SketchPlane Create(Document document, Plane plane);

从一个几何平面的引用创建一个草图平面


例子1:要从文档中找到名字为“Ref.Level”的标高,以此创建了一个新的草图平面,然后用几何点为(0, 0, 0)到点(10, 10, 0)的直线创建了一条模型曲线,可以使用以下代码:

 public void CreateModelCurve(Autodesk.Revit.DB.Document doc)
        {
            // 在族文档中找到名字为"Ref. Level"的标高 
            FilteredElementCollector collector = new FilteredElementCollector(doc);
            collector = collector.OfCategory(BuiltInCategory.OST_Levels);
            var levelElements = from element in collector
                                where element.Name == "Ref.Level"
                                select element;
            List levels = levelElements.ToList();
            if (levels.Count <= 0)
                return;

            Level refLevel = levels[0] as Level;

            // 创建一条几何直线,一个基于标高的草图平面,然后在这个草图平面上创建一条模型线.
            using (Transaction trans = new Transaction(doc, "Create model line."))
            {
                trans.Start();
                Line line = Line.CreateBound(XYZ.Zero, new XYZ(10, 10, 0));
                SketchPlane sketchPlane = SketchPlane.Create(doc, refLevel.Id);
                ModelCurve modelLine = doc.FamilyCreate.NewModelCurve(line, sketchPlane);
                trans.Commit();
            }
        }

例子2:创建一个原点为坐标原点(0, 0,0),法向量为(0, 0, 1)的几何平面,然后用这个几何平面创建了对应的草图平面,再在这个草图平面上创建了一个圆心为(0,0,0),半径为5的圆形的模型线。可以参考以下代码:
public void CreateSketchPlaneByPlane(Autodesk.Revit.ApplicationServices.Application app, Autodesk.Revit.DB.Document doc)
        {
            using (Transaction trans = new Transaction(doc, "Create model arc."))
            {
                trans.Start();
                Plane plane = app.Create.NewPlane(XYZ.BasisZ, XYZ.Zero);
                SketchPlane sketchPlane = SketchPlane.Create(doc, plane);

                Arc arc = Arc.Create(plane, 5, 0, Math.PI * 2);
                ModelCurve modelCircle = doc.FamilyCreate.NewModelCurve(arc, sketchPlane);
                trans.Commit();
            }
        }

从一个几何平面的引用来创建草图平面的方法和上面两个示例类似,需要在文档中找到一个几何平面,例如,一个几何实体的平面(PlanarFace. Reference),然后将该平面的引用传入即可。

二、草图
草图(Sketch)是个抽象的概念,由两个最基本的属性构成:草图平面(SketchPlane)和轮廓(Profile)。

在UI用户界面上,进人草图编辑的绘图区域后,草图平面就默认设置好了,用户只需要使用草图编辑工具绘制轮廊就可以;
API中则需要用户创建或者确定草图平面,再提供相应的轮廊。上面的两个示例中的端点为(0,0,0)和(10,10,0)的直线;圆心为(0,0,0)和半径为5的圆形(arc)就可以理解为对应的轮廓。

下图左边部分是族文档中的一个拉伸体(Extrusion),右边部分是这个拉伸体的轮廊,为四根首尾相连的直线构成的线组。
  RevitAPI之草图及草图平面_第1张图片

API从文档中取到拉伸体及其草图的示例参见以下代码:
public void GetSketchFromExtrusion(Document doc,ElementId extrusionId)
        {
            Extrusion extrusion = doc.GetElement(extrusionId) as Extrusion;
            SketchPlane sketchPlane = extrusion.Sketch.SketchPlane;
            CurveArrArray sketchProfile = extrusion.Sketch.Profile;
        }

Revit中的三维模型,如拉伸(Extrusion)、融合(Blend )、旋转(Revolution )、放样 (Sweep)、放样融合(SweepBlend),都使用到了草图。不但在创建好的模型中可以获取到它的草图(Sketch属性),而且在创建过程中(比如NewExtunsion等方法)也需要使用到草图平面和轮廊。


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

RevitAPI之草图及草图平面_第2张图片

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


你可能感兴趣的:(RevitAPI)