一、草图编辑
草图编辑在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<Autodesk.Revit.DB.Element> levels = levelElements.ToList<Autodesk.Revit.DB.Element>();
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),右边部分是这个拉伸体的轮廊,为四根首尾相连的直线构成的线组。
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等方法)也需要使用到草图平面和轮廊。
=========【更多高级应用请关注公众号】========
==================================