Open Cascade 获取面的内外环线
转载请注明原文链接:https://www.cnblogs.com/mechanicoder/p/16878903.html
1. 简介
在特定应用场景下,需要对于一个拓扑面(TopoDS_Face)其进行补洞或打洞操作,如下图所示。补洞或打洞过程中需要获取面的环线(TopoDS_Wire),本文即介绍如何获取拓扑面的环线及其基本原理。
2. 获取内外环方法
OCC提供直接获取外环线的方法:
但并未提供直接获取内环线的方法,当然可以根据已获得外环线简介得到所有的内环线。一个思路是:首先获取面上的所有环线的集合以及 “外环线”,然后从所有所有环线集合中去除 “外环线” 即可得到所有的内环线。获取拓扑面内环线方法参考代码如下:
其中用到拓扑模型遍历时常用的方法 TopExp::MapShapes,遍历拓扑模型中指定类型的子拓扑类型,并将其存储在关联容器 M 中,如下所示。
3. OCC获取外环线基本原理
3.1. 如何区分内外环
对于拓扑面而言,在计算几何以及OCC的拓扑表达中,定义面的内部、外部以及环线的方向是有一定准则的,即在面的参数域内,沿着环线正方向前进左侧为面内、右侧为面外。如下示意图所示:
逆时针方向的环线为外环线,顺时针方向的环线为内环线。
3.2. 算法流程
浏览OCC源码,探究获取模型外环的原理。
其中的 “计算多边形有向面积totcross” 以及判断 “totcross>0”,其原理是:基于向量叉乘算法可得,在平面上,逆时针方向的多边形面积为正、顺时针方向的多边形面积为负。可参考博文
对应的OCC算法调用步骤为:
以上主要针对一个合法有效的拓扑面模型而言,实际算法中还包括特殊异常处理,感兴趣可进一步深挖。
4. 参考资料
1. Open Cascade 7.7.0 Beta:
2. 多边形面积计算:
转载请注明原文链接:https://www.cnblogs.com/mechanicoder/p/16878903.html