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

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

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

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

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