using Autodesk.Revit.DB; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DotNet.Revit { public static class GeometryObjectHelper { /// /// 获取元素的所有GeomObjects /// /// The elem. /// The options. /// public static List GetGeometryObjects(this Element elem, Options options = default(Options)) { var result = new List(); options = options ?? new Options(); GeometryObjectHelper.RecursionObject(elem.get_Geometry(options), ref result); return result; } /// /// 递归遍历所有GeometryObject. /// /// 初始GeometryElement. /// 递归结果. private static void RecursionObject(this GeometryElement geometryElement, ref List geometryObjects) { if (geometryElement == null) { return; } var eum = geometryElement.GetEnumerator(); while (eum.MoveNext()) { var current = eum.Current; switch (current) { case GeometryInstance instance: instance.SymbolGeometry.RecursionObject(ref geometryObjects); break; case GeometryElement elemlemt: elemlemt.RecursionObject(ref geometryObjects); break; case Solid solid: if (solid.Edges.Size == 0 || solid.Faces.Size == 0) { continue; } geometryObjects.Add(current); break; default: geometryObjects.Add(current); break; } } } } }