Revit API 开发 (6): 判断 element 的 geometry 是否相交?
2018-01-21 16:29
1171 查看
如何判断 Revit 中两个或者多个 element 的几何图形是否相交?
上面这个方法可以通过布尔操作来得到两个 Solid 和交集,并集或者差集。对于 Revit 中需要判断 element 是否几何相交的方法,则可以通过这个方法来实现:
1. 得到两个需要求交的 element 的几何图形,geom1 和 geom2。
2. 遍历找到 geom1 和 geom2 中的所有 solid,分别记作 solidList1 和 solidList2。
3. 求 solidList1 和 solidList2 中的任意两个 solid 是否相交,如何相交,则他们是相交的。
剩下的关键问题,如何得到 element 中所有的 solid?参考jeremytammik
有了这些信息,相信你已经知道如何判断 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 开发 (4): 如何判断一个构件,element,在某个视图中的可见性?
- Revit API判断点与线是否相交
- Revit如何判断两个Element是否相交
- Revit开发之判断参数是否为项目参数
- HDU 1086 You can Solve a Geometry Problem too 判断任意两线段是否相交
- Mac OS X开发中在程序运行时判断某个API是否存在
- Revit API 开发 (2): 显示选中的图元(element)
- You can Solve a Geometry Problem too(判断两线段是否相交)
- hdu1086 You can Solve a Geometry Problem too (判断两线段是否相交)
- HDU 1086 You can Solve a Geometry Problem too(判断两条直线是否相交)
- HDU 1086 You can Solve a Geometry Problem too(判断两线段是否相交)跨立实验
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- HDU 1086 You can Solve a Geometry Problem too(判断线段是否相交,非规范相交)
- You can Solve a Geometry Problem too----判断两线段是否相交
- Revit API判断直线相交关系移动风管
- MATLAB实现判断航迹(直线)是否相交的问题
- 判断线段与圆是否相交
- iOS开发笔记- 判断是否是数字
- [ios开发]判断网络连接是否正常
- 判断二维平面上两线段是否相交