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;
}
}
}
}
}