OCC boolean operations
个人理解:由于OCCT
采用BRep(边界表示)
表示方式,在做boolean
操作时,计算出诸如edge/edge
,face/face
的交界面/点等,并存储供后面使用。
1. 干涉检测
计算出Objects
与Tools
的各种干涉类型:如vertex
与vertex
/edge
/face
/solid
之间的干涉数据,edge
与edge
/face
/solid
之间的干涉数据,face
与face
/solid
之间的干涉数据。主要是edge
与edge
之间的干涉检查。
存储的干涉数据以P_curves
,Pave
形式存储。P_Curves
是指比如一条边与一个面相交,需要在面上构建一条曲线来表示这条相交边。P_Curves
存储边与面的相交信息(如交点、切线)。
Pave
是表示边界点的数据结构,出了位置外,还包含了曲率、方向等信息。在boolean
过程中,需要用Pave
存储相交信息。Pave
是构建P_Curves
(以及其他数据)的基础。
2. General Fuse Algorithm (GFA)
步骤如下:
init -> calc vertex/vertex interferences -> calc vertex/edge interferences -> update Pave block -> calc edge/edge interferences -> calc vertex/face interferences -> calc edge/face interferences -> build split edges(构建分割边)-> calc face/face interferences -> build Section Edges(构建截面边)-> build P_Curves ->Process Degenerated Edges(处理退花边)。
2.1 分割边
其中,构建分割边,是指:
- 识别形状之间的交线
- 根据交线在
Objects
的形状上构建新的边 - 将这些新构建的边作为分割边
- 根据分割边,将
Objects
的形状划分为若干个子形状
构建好分割边后,后续的布尔运算就可以基于这些分割后的子形状进行计算,得到最终的结果形状。