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的形状划分为若干个子形状
构建好分割边后,后续的布尔运算就可以基于这些分割后的子形状进行计算,得到最终的结果形状。