当前位置: 代码迷 >> 综合 >> Revit API 开发 (8): DirectShape 创建Revit可以识别的几何图形
  详细解决方案

Revit API 开发 (8): DirectShape 创建Revit可以识别的几何图形

热度:4   发布时间:2024-01-25 22:48:18.0

前言

Revit 有多种可以导入几何图形的方法,但是DirectShape绝对是其中特殊的一种。用它生成的几何图形,就像是Revit原生的一样。当然,为了达到“原生”的目的,在编程上你不可避免地也需要按照它给你定义的规则来进行编写。
下面,我会讲解几个例子。

用DirectShap创建一个长方体

创建流程:

  • 创建底面的正方形
    • 4个顶点,然后通过顶点创建4条线
  • 拉伸出来一个长方体
    • GeometryCreationUtilities.CreateExtrusionGeometry
      注意事项:
  1. 顶点顺序要注意,要创建一个curveloop
  2. DirectShape 是一个类,可以设定不同的Category
  3. Transaction 一定要用,任何改变文档的操作都需要使用 Transaction

另外如果想创建更加复杂的图形,并且希望自己去控制各个细节,那这个例子肯定是不够的。需要使用 BRepBuilder

public void CreateCubicDirectShape(Document doc)
{List<Curve> profile = new List<Curve>();double edgeLength = 2.0;    XYZ p1 = new XYZ(edgeLength, 0, 0);XYZ p2 = new XYZ(edgeLength, edgeLength, 0);XYZ p3 = new XYZ(0, edgeLength, 0);XYZ p4 = new XYZ(0, 0, 0);profile.Add(Line.CreateBound(p1, p2));profile.Add(Line.CreateBound(p2, p3));profile.Add(Line.CreateBound(p3, p4));profile.Add(Line.CreateBound(p4, p1));CurveLoop curveLoop = CurveLoop.Create(profile);SolidOptions options = new SolidOptions(ElementId.InvalidElementId, ElementId.InvalidElementId);Solid cubic = GeometryCreationUtilities.CreateExtrusionGeometry(new CurveLoop[] { curveLoop }, XYZ.BasisZ, 10);using (Transaction t = new Transaction(doc, "Create sphere direct shape")){t.Start();// create direct shape and assign the sphere shapeDirectShape ds = DirectShape.CreateElement(doc, new ElementId(BuiltInCategory.OST_GenericModel));ds.ApplicationId = "Application id";ds.ApplicationDataId = "Geometry object id";ds.SetShape(new GeometryObject[] { cubic });t.Commit();}
}

效果图:
在这里插入图片描述