Posted on 2022-11-27 22:04
eryar 閱讀(1645)
評論(0) 編輯 收藏 引用 所屬分類:
2.OpenCASCADE
OpenCASCADE-Glue Faces to Shell
eryar@163.com
1 Introduction
BRep邊界表示法通過對幾何曲面加上邊界Wire限定得到有界的曲面片后,如何將曲面片連接起來生成一個閉合的Shell,進而得到一個Solid實體?以前寫過如何將無序的Edge連接起來生成Wire的方法,今天介紹一下OpenCASCADE中如何將Face連接起來生成Shell。這也是我們要手工通過Vertex, Edge, Face來構造BRep的Solid必須思考和解決的問題。
2 BRepTools_Quilt

從類BRepTools_Quilt的注釋可以看出,如果面有共用的Edge,可以使用此類來生成Shell。如何來理解共用的Edge(common edges),下面我們通過使用Draw Test Harness的Tcl腳本來進行說明。

如上圖所示的右邊為Draw的Tcl腳本。先生成一個圓柱面aCylinderFace;再通過命令explode得到這個圓柱面的邊Edge,分別為頂部邊aCylinderFace_3和底部的邊aCylinderFace_2;再分別生成頂面和底面。最后使用quilt生成了Shell,使用命令ssolid生成了Solid體。為了驗證生成的BRep體是不是正確的,通過一個和一個box布爾運算來檢驗,結果顯示正常。從這個腳本可以看出,使用類BRepTools_Quilt連接的面Face必須有共用邊,上面的例子中頂面和底面的邊是和圓柱面的邊共用的。
3 BRepBuilderAPI_Sewing
有的情況下想要縫合成Shell的面Face并沒有共用邊,這時可以使用類BRepBuilderAPI_Sewing。這個類的注釋中有華天軟件的梅博士的名字:

這個類也可以用來縫合面,大家可以在源碼中搜索一下這個類名看看哪里有用到。目前看主要用到了對導入的STL文件中的三角形面進行縫合。這也是導入STL文件生成TopoDS_Shape時默認的操作,所以有很多人反應導入大一點的STL文件有點慢。目前OpenCASCADE最新版本中對于導入的STL模型也只能是顯示,所以可以使用選項只生成網格模型,而不是每個三角形生成一個TopoDS_Face后再調用縫合,這樣性能上要好很多。

這段Tcl腳本代碼演示的就是沒有公用邊的面FACE如何生成Shell。如果這時使用quilt是得不到一個閉合的Shell的,只能使用sewing命令來縫合這三個面來生成Shell。
4 Conclusion
當我們手工從邊EDGE,面FACE來構造一個BRep體時,需要考慮如何將無序的邊EDGE生成WIRE,如何將無序的FACE縫合成SHELL。
在OpenCASCADE中提供了兩種方式縫合面FACE生成SEHLL:如果這些面FACE有共用邊EDGE,可以使用類BRepTools_Quilt;如果這些FACE沒有共用邊EDGE,只能使用類BRepBuilderAPI_Sewing。