Revit 几何实例(GeometryInstance)复习

606 阅读2分钟
  • Autodesk Revit 二次开发基础教程(虽然版本很老,很多代码都无法运行,但几何的理论部分还是深入研究一下的的)

几何实例常用属性和方法

GeometryInstance Class (revitapidocs.com)

  1. Transform属性:表示从类型的局部坐标系到实例的世界坐标系的坐标变换
  2. SymbolGeometry该族类型的几何元素
  3. GetInstanceGeometry():获取族实例的几何元素
  4. GetSymbolGeometry():获取族类型的几何元素

其中几何元素类型有三种:

  • Curve线
  • Solid实体
  • Instance几何实例

注意:

  • 使用SymbolGeometryGetSymbolGeometry()获取的几何元素需要坐标转换,否则会发生偏移

例子

public static void GetInstenceGeometry(ExternalCommandData commandData)
{
  #region 获取几何元素
    UIDocument uiDoc = commandData.Application.ActiveUIDocument;
  Document doc = uiDoc.Document;
  Reference reference = uiDoc.Selection.PickObject(ObjectType.Element, "请选择元素");
  Options options = new Options()
  {
    View = doc.ActiveView,
  };
  Instance instance = doc.GetElement(reference) as Instance;
  GeometryElement ge = instance.get_Geometry(options);
  #endregion

    foreach (GeometryObject geobj in ge)
    {
      GeometryInstance geometryInstance = geobj as GeometryInstance;
      if (geometryInstance != null)
      {
        foreach (GeometryObject ins in geometryInstance.SymbolGeometry)
        {
          Curve curve = ins as Curve;
          if (curve != null)
          {
            // 需要进行坐标转换
            curve = curve.CreateTransformed(geometryInstance.Transform);
            // 进一步操作 ...
          }
        }

        foreach (GeometryObject ins in geometryInstance.GetInstanceGeometry())
        {
          Curve curve = ins as Curve;
          if (curve != null)
          {
            // 不需要进行坐标转换,进一步操作 ...
          }
        }
      }
    }
}

其他

几何基元类

均由GeometryObject派生

graph LR
A[GeometryObject]
Profile-->A
B2[Face]-->A
B22[PlanarFace]-->B2
B23[RuledFace]-->B2
B24[ConicalFace]-->B2
Edge-->A
B4[Curve]-->A
B41[Line]-->B4
B42[Arc]-->B4
B43[Ellipse]-->B4
B44[HermiteSpline]-->B4
Point-->A
GeometryElement-->A
GeometryInstance-->A
Mesh-->A
Solid-->A
  • 轮廓(Profile):用来生成形状的线,可以用它来修改形状
  • 面(Face):三维空间的实体类
  • 边(Edge):三维空间中实体的边
  • 线(Curve):多段线和直线都是它的子类
  • 点(Point):点
  • 几何元素(GeometryElement):一个元素的几何表示,包含了所有的几何信息
  • 几何实例(GeometryInstance):一个类型图元的实例,
  • 网格(Mesh):三角网格
  • 实体(Solid):三维实体

注意:

  1. 开发过程用的比较多的应该就是面(Face)、边(Edge)、线(Curve)了。注意一下它们之间的转换关系,尤其要注意面和线的派生类(Line和平面)。
  2. GeometryInstance 几何实例是开发过程的重点;

几何辅助类

根据使用频率

  1. XYZ :三维空间的坐标,可以用来表示点或向量(Point没用了),需要注意一下它的常用方法 (求距离、标准化)
  2. Reference:几何对象的稳定引用,可用于配合选择元素等动作
  3. Transform:仿射空间的变换(3*4)矩阵变换
  4. Options:解析几何的参数选择,获取几何元素时必选参数
  5. UV:二维空间坐标(没用过)
  6. BoundingBoxXYZ:三维长方体(没用过)
  7. BoundingBoxUX:二维长方体(没用过)

Options属性:

  1. ComputeReferences:是否计算几何引用,获取几何引用时,需打开该选项,否则返回null
  2. DetailLevel:几何信息的详细程度
  3. View:获取视图相关的元素几何信息
  4. IncludeNonVisibleObjects:是否获取不可见元素的几何信息,默认为False

几何集合类

线