您的位置:首页 > 其它

Revit API 开发 (6): 判断 element 的 geometry 是否相交?

2018-01-21 16:29 1171 查看
如何判断 Revit 中两个或者多个 element 的几何图形是否相交?

// BooleanOperationsUtils::ExecuteBooleanOperation Method
public static Solid ExecuteBooleanOperation(Solid solid0, Solid solid1, BooleanOperationsType booleanType);


上面这个方法可以通过布尔操作来得到两个 Solid 和交集,并集或者差集。对于 Revit 中需要判断 element 是否几何相交的方法,则可以通过这个方法来实现:

1. 得到两个需要求交的 element 的几何图形,geom1 和 geom2。

2. 遍历找到 geom1 和 geom2 中的所有 solid,分别记作 solidList1 和 solidList2。

3. 求 solidList1 和 solidList2 中的任意两个 solid 是否相交,如何相交,则他们是相交的。

剩下的关键问题,如何得到 element 中所有的 solid?参考jeremytammik

private static IEnumerable<Solid> GetSolids(
Element element )
{
var geometry = element
.get_Geometry( new Options
{
ComputeReferences = true,
IncludeNonVisibleObjects = true
} );

if( geometry == null )
return Enumerable.Empty<Solid>();

return GetSolids( geometry )
.Where( x => x.Volume > 0 );
}

private static IEnumerable<Solid> GetSolids(
IEnumerable<GeometryObject> geometryElement )
{
foreach( var geometry in geometryElement )
{
var solid = geometry as Solid;
if( solid != null )
yield return solid;

var instance = geometry as GeometryInstance;
if( instance != null )
foreach( var instanceSolid in GetSolids(
instance.GetInstanceGeometry() ) )
yield return instanceSolid;

var element = geometry as GeometryElement;
if( element != null )
foreach( var elementSolid in GetSolids( element ) )
yield return elementSolid;
}
}


有了这些信息,相信你已经知道如何判断 Revit 中两个或者多个 element 的几何图形是否相交了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Revit API
相关文章推荐