19草图
草图
要在Revit中创建图元或编辑其轮廓,必须先创建草图对象。需要绘制草图的图元示例包括:
- Roofs 屋顶
- Floors 地板
- Stairs 楼梯
- Railings 栏杆
还需要草图来定义其他类型的几何图形,例如:
- Extrusions 拉伸
- Openings 开口
- Regions 区域
在Revit Platform API中,草图函数由二维和三维草图类表示,如下所示:
- 二维Sketch:
- SketchPlane 草图平面
- Sketch 草图
- ModelCurve 模型线
- and more
- 三维Sketch:
- GenericForm 通用形状
- Path3D 3D路径
除了草图元素外,本章还介绍了ModelCurve。有关元素分类的详细信息,请参阅元素部分中的元素分类。
本节中的页面
- 2DSketch类
- 3DSketch
- 模型线
2D Sketch类
Sketch类表示用于创建3D模型的平面中的封闭曲线。关键功能由SketchPlane和CurveLoop属性表示。
编辑Revit文件时,无法通过迭代Document.Elements枚举来检索Sketch对象,因为所有Sketch对象都是瞬态Elements。访问族的三维建模信息时,草图对象对于形成几何图形非常重要。有关更多详细信息,请参见3D草图。
SketchPlane是所有2D草图类(如ModelCurve和Sketch)的基础。SketchPlane也是DetailCurve等2D注释元素的基础。ModelCurve和DetailCurve都具有SketchPlane属性,并且在相应的创建方法中需要SketchPlane。SketchPlane在Revit UI中始终不可见。
每个ModelCurve必须位于一个SketchPlane中。换句话说,无论您在UI中还是通过使用API绘制ModelCurve,都必须存在SketchPlane。因此,在绘制ModelCurve的二维视图中至少存在一个SketchPlane。
二维视图包含CeilingPlan、FloorPlan和Elevation ViewTypes。默认情况下,会自动为所有这些视图创建“草绘平面”(SketchPlane)。与二维视图相关的SketchPlane Name返回视图名称,例如Level 1或North。
图77:拾取平面以标识新的工作平面
指定新工作平面时,可以选择“拾取平面”,如上图所示。拾取平面后,选择特定图元(如墙)上的平面,如下图所示。在这种情况下,SketchPlane.Name属性返回与该元素相关的字符串。例如,在下图中,SketchPlane.Name属性返回与Wall.Name属性相同的“Generic - 8”。
图78:在墙上拾取一个平面作为工作平面
注意:“草绘平面”与工作平面不同,因为工作平面是可见的并且可以选择。它在当前API中没有特定的类,但由Element类表示。必须基于特定的SketchPlane定义工作平面。工作平面和SketchPlane Category属性都返回null。尽管“草绘平面”始终不可见,但始终存在与工作平面对应的“草绘平面”。工作平面用于在文本和图片中表达SketchPlane。
以下信息适用于SketchPlane成员:
- ID、UniqueId、Name和Plane属性返回值;
- 参数属性为空
- Location属性返回Location对象
- 其他属性返回null。
Plane包含SketchPlane几何信息。SketchPlane使用Plane设置平面坐标系,如下图所示:
图79:SketchPlane和Plane坐标系
以下代码示例说明如何创建新的SketchPlane:
代码区域17-1:创建新的草绘平面
1 | private SketchPlane CreateSketchPlane(UIApplication application) |
3D Sketch
三维草图用于编辑族或创建三维对象。在Revit Platform API中,可以使用以下类完成三维草图。
- Extrusion
- Revolution
- Blend
- Sweep
换句话说,有四个操作可以将2D模型转换为3D模型。有关在2D中绘制草图的详细信息,请参见2D草图类。
Extrusion
Revit使用拉伸定义族的三维几何图形。通过在平面上定义二维草图来创建拉伸;然后Revit在起点和终点之间拉伸草图。
查询“拉伸形状”对象,以查找要在族建模和体量中使用的常规形状。Extrusion类具有以下属性:
表40:拉伸属性
**Property ** | **Description ** |
---|---|
ExtrusionStart | 返回拉伸起点。这是一个双类型。 |
ExtrusionEnd | 返回拉伸终点。这是一个双类型。 |
Sketch | 返回拉伸草图。它包含一个草图平面和一些曲线。 |
图81:拉伸结果
Revolution
“旋转”命令可创建绕轴旋转的几何图形。可以使用“旋转”命令在家具、圆屋顶或柱上创建门把手或其他把手。
查询“旋转形式”对象,以获得要在族建模和体量中使用的常规形式。Revolution类具有以下属性:
表41:Revolution属性
**Property ** | **Description ** |
---|---|
Axis | 返回轴。它是一个ModelLine对象。 |
EndAngle | 返回结束角度。这是一个double类型。 |
Sketch | 返回拉伸草图。它包含一个SketchPlane和一些曲线。 |
EndAngle与Revit UI中的相同参数一致。下图说明了Revolution对应参数、草图和结果。
图82:对应参数
图83:旋转草图
图84:旋转结果
Note: 注意事项:
- 无法使用Revit Platform API访问“起始角度”。
- 如果“结束角度”为正,则“旋转”方向为顺时针。如果为负,则旋转方向为逆时针
Blend
“融合”命令将两个轮廓融合在一起。例如,如果绘制了一个大矩形,并在其上绘制了一个小矩形,则Revit会将这两个形状融合在一起。
查询“融合形式”对象以获得要在族建模和体量中使用的常规形式。Blend类具有以下属性:
表42:Blend属性
**Property ** | **Description ** |
---|---|
BottomSketch | 返回底部草图。它是一个Sketch对象。 |
TopSketch | 返回顶部草图融合。它是一个Sketch对象。 |
FirstEnd | 返回第一个端点。这是一个double类型。 |
SecondEnd | 返回第二个终点。这是一个double类型。 |
FirstEnd和SecondEnd属性值与Revit UI中的相同参数一致。下图说明了“融合”对应的参数、草图和结果。
图85:UI中的融合参数
图86:融合顶部草图和底部草图
图87:融合结果
Sweep
“放样”命令可沿创建的二维路径或选定的三维路径沿着放样一个轮廓。路径可以是开环或闭环,但必须穿过轮廓平面。
查询“放样形状”对象,以获得用于族建模和体量的常规形状。Sweep类具有以下属性:
表43:Sweep 属性
Property | **Description ** |
---|---|
Path3d | 返回三维路径草图。它是一个Path3D对象。 |
PathSketch | 返回平面路径草图。它是一个Sketch对象。 |
ProfileSketch | 返回轮廓草图。它是一个Sketch对象。 |
EnableTrajSegmentation | 返回轨迹分段状态。它是一个布尔值。 |
MaxSegmentAngle | 返回最大线段角度。这是一个double类型。 |
创建2D路径与其他形状类似。通过拾取创建的3D曲线来获取3D路径。
图88:选择Sweep 3D路径
注意:以下信息适用于放样:
- 仅当使用“拾取路径”获取3D路径时,Path3d特性才可用。
- 无论路径是三维还是二维,PathSketch都可用。
图89:扫描轮廓草图
注意:轮廓草图垂直于路径。
分段放样对于创建机械风管弯头非常有用。通过设置两个放样参数并绘制带有圆弧的路径来创建分段放样。
图90:UI中的相应分段设置
注意:以下信息适用于分段放样:
- 这些参数仅影响路径中的弧。
- 放样的最小分段数为两个。
- 通过清除“轨迹分段”(Trajectory Segmentation)复选框,将分段放样更改为非分段放样。EnableTrajSegmentation属性返回false。
- 如果EnableTrajSegmentation属性为false,则MaxSegmentAngle的值为默认360°。
图91:放样结果
模型线
ModelCurve表示项目中的模型线。它存在于三维空间中,在所有视图中可见。
以下图片说明了四个ModelCurve派生类: 图92:ModelLine和ModelArc
图93:ModelEllipse和ModelNurbSpline
创建模型线
创建模型曲线的关键是创建曲线所在的几何、曲线和草图平面。根据您输入的Geometry.Curve类型,返回的相应ModelCurve可以向下转换为正确的类型。
以下示例说明如何创建新的模型曲线(ModelLine和ModelArc):
代码区域17-2:创建新的模型曲线
1 | // get handle to application from document |
Members
GeometryCurve
GeometryCurve属性用于获取或设置模型曲线的几何曲线。除了ModelHermiteSpline,你可以从四个ModelCurves中得到不同的几何曲线;
- Line
- Arc
- Ellipse
- Nurbspline
下面的代码示例说明如何从ModelCurve获取特定Curve。
代码区域17-3:从ModelCurve获取特定曲线
1 | //get the geometry modelCurve of the model modelCurve |
GeometryCurve属性返回值是一个常规的Geometry.Curve对象,因此,必须使用As运算符来转换对象类型。
注意:以下信息适用于GeometryCurve:
- 在Revit中,无法创建Hermite曲线,但可以从其他软件(如AutoCAD)导入该曲线。Curve是唯一表示Hermite曲线的几何类。
- SetPlaneAndCurve()方法以及Curve和SketchPlane属性设置器用于不同的情况。
- 当新曲线位于同一个SketchPlane中,或者新SketchPlane与旧SketchPlane位于同一个平面上时,请使用Curve或SketchPlane属性设置器。
- 如果新的Curve不在同一个SketchPlane中,或者新的SketchPlane与旧的SketchPlane不在同一个平面上,则必须使用SetPlaneAndCurve()同时更改Curve值和SketchPlane值,以避免内部数据不一致。
线样式
线型由GraphicsStyle类表示。ModelCurve的所有线条样式都可以从GetLineStyleIds()方法中获得,该方法返回一组GraphicsStyle元素的ElementIds。