BRep边界表示法通过对几何曲面加上边界Wire限定得到有界的曲面片后,如何将曲面片连接起来生成一个闭合的Shell,进而得到一个Solid实体?以前写过如何将无序的Edge连接起来生成Wire的方法,今天介绍一下OpenCASCADE中如何将Face连接起来生成Shell。这也是我们要手工通过Vertex, Edge, Face来构造BRep的Solid必须思考和解决的问题。
OpenCASCADE-Glue Faces to Shell
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。
为了方便大家在移动端也能看到我的博文和讨论交流,现已注册微信公众号,欢迎大家扫描下方二维码关注。