OpenCASCADE 布爾運算簡介


OpenCASCADE 布爾運算簡介

eryar@163.com

布爾運算(Boolean Operations)是根據兩組模型的組合創建出新的模型的造型方法。兩組模型Objects/Tools之間有三種布爾算子:

  • 布爾並:FUSE,將兩組模型合並成一個;
  • 布爾減:CUT,從Objects中減去Tools模型;
  • 布爾交:COMMON,即兩組模型的共有部分;

布爾運算的輸入是兩組模型,分別叫Objects和Tools。因為兩個參數的前后順序容易混淆,借用機械加工類比來加深記憶:Objects類比為待加工的工件,Tools類比為機床刀具。當執行布爾減運算時,相當於工件Object被刀具Tool切割。

在OpenCASCADE中布爾運算第一個參數Objects也叫Arguments,第二個參數也是Tools。對應源碼如下:

布爾運算的大概流程是先對兩個模型進行求交計算,求交結果主要是Edge邊。然后再根據求交計算新得到的Edge邊進行定位分類Classification處理,排除不需要的Edge邊,面等。最后根據邊重構出新的BREP模型。

布爾運算的健壯性及效率依賴一些底層算法,如求交算法Intersection Algorithm,投影算法Projection Algorithm,擬合算法Approximation Algorithm及定位算法Classification Algorithm等。求交算法主要有面面求交、面邊求交、邊邊求交等。投影和擬合算法主要用於計算邊在面中的P-Curves。定位算法主要用於重構階段,通過定位排除不需要的邊、面等。

關於重構模型OpenCASCADE提供了一些算法,如通過使用函數BOPAlgo_Tools::EdgesToWires 和 BOPAlgo_Tools::WiresToFaces從線框模型生成面。

關於定位算法,提供BOPTools_AlgoTools::ComputeState計算點、邊、面相對於其他模型的位置狀態。提供BOPTools_AlgoTools::IsHole來判斷面FACE上的環WIRE是不是孔。

通過查看源碼,可以看到其實現原理:即根據環WIRE中的邊EDGE的PCurve是順時針還是逆時針來判斷。通過對PCurve采樣點得到一個多邊形,通過計算多邊形面積的正負來判斷。

OpenCASCADE中關於布爾運算有詳細的文檔Boolean Operations Specification,若對布爾運算感興趣,可以結合源碼來看這些文檔。開源的好處是可以了解算法背后的實現原理,如果有更好的方法,還可以參與貢獻,讓其變得更好。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM