草图

要在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
2
3
4
5
6
7
8
9
10
11
12
13
private SketchPlane CreateSketchPlane(UIApplication application)
{
//try to create a new sketch plane
XYZ newNormal = new XYZ(1, 1, 0); // the normal vector
XYZ newOrigin = new XYZ(0, 0, 0); // the origin point
// create geometry plane
Plane geometryPlane = Plane.CreateByNormalAndOrigin(newNormal, newOrigin);

// create sketch plane
SketchPlane sketchPlane = SketchPlane.Create(application.ActiveUIDocument.Document,geometryPlane);

return sketchPlane;
}

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都可用。img
    图89:扫描轮廓草图

注意:轮廓草图垂直于路径。

分段放样对于创建机械风管弯头非常有用。通过设置两个放样参数并绘制带有圆弧的路径来创建分段放样。

图90:UI中的相应分段设置

注意:以下信息适用于分段放样:

  • 这些参数仅影响路径中的弧。
  • 放样的最小分段数为两个。
  • 通过清除“轨迹分段”(Trajectory Segmentation)复选框,将分段放样更改为非分段放样。EnableTrajSegmentation属性返回false。
  • 如果EnableTrajSegmentation属性为false,则MaxSegmentAngle的值为默认360°。img

图91:放样结果

模型线

ModelCurve表示项目中的模型线。它存在于三维空间中,在所有视图中可见。

以下图片说明了四个ModelCurve派生类:
img 图92:ModelLine和ModelArc
img 图93:ModelEllipse和ModelNurbSpline

创建模型线

创建模型曲线的关键是创建曲线所在的几何、曲线和草图平面。根据您输入的Geometry.Curve类型,返回的相应ModelCurve可以向下转换为正确的类型。

以下示例说明如何创建新的模型曲线(ModelLine和ModelArc):

代码区域17-2:创建新的模型曲线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// get handle to application from document
Autodesk.Revit.ApplicationServices.Application application = document.Application;

// Create a geometry line in Revit application
XYZ startPoint = new XYZ(0, 0, 0);
XYZ endPoint = new XYZ(10, 10, 0);
Line geomLine = Line.CreateBound(startPoint, endPoint);

// Create a geometry arc in Revit application
XYZ end0 = new XYZ(1, 0, 0);
XYZ end1 = new XYZ(10, 10, 10);
XYZ pointOnCurve = new XYZ(10, 0, 0);
Arc geomArc = Arc.Create(end0, end1, pointOnCurve);

// Create a geometry plane in Revit application
XYZ origin = new XYZ(0, 0, 0);
XYZ normal = new XYZ(1, 1, 0);
Plane geomPlane = Plane.CreateByNormalAndOrigin(normal, origin);

// Create a sketch plane in current document
SketchPlane sketch = SketchPlane.Create(document, geomPlane);

// Create a ModelLine element using the created geometry line and sketch plane
ModelLine line = document.Create.NewModelCurve(geomLine, sketch) as ModelLine;

// Create a ModelArc element using the created geometry arc and sketch plane
ModelArc arc = document.Create.NewModelCurve(geomArc, sketch) as ModelArc;

Members

GeometryCurve

GeometryCurve属性用于获取或设置模型曲线的几何曲线。除了ModelHermiteSpline,你可以从四个ModelCurves中得到不同的几何曲线;

  • Line
  • Arc
  • Ellipse
  • Nurbspline

下面的代码示例说明如何从ModelCurve获取特定Curve。

代码区域17-3:从ModelCurve获取特定曲线

1
2
3
4
5
6
7
//get the geometry modelCurve of the model modelCurve
Autodesk.Revit.DB.Curve geoCurve = modelCurve.GeometryCurve;

if (geoCurve is Autodesk.Revit.DB.Line)
{
Line geoLine = geoCurve as Line;
}

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。

注:翻译自Revit API Developers Guide