OpenCascade拓扑对象之:裁剪环的理解

在CAD几何造型表示中,曲面通常采用的是参数化表示形式,形容S(u,v) = (x(u,v),y(u,v),z(u,v))形式,其中u、v是两个参数,每个uv参数对应一个3D空间点。因此,通常建立起一个从2D参数域到3D空间曲面的一个映射关系。u、v参数通常有一定的范围,例如:对球面来说,u通常位于[0,2PI]之间,v位于[-PI/2,PI/2]之间。因此,基于参数化表示的曲面通常是规则的曲面。对一些类型的曲面,例如:平面、圆柱面,可能在一个或两个方向上是无限大的,例如:对平面来说,通常是无限大的面,u、v参数的范围是无限大的;对圆柱面来说,通常轴向的参数范围是无限大的。OpenCascade中的平面和圆柱面就是如此。

而实际造型中,曲面往往是具有有限范围的,并且是不规则的,经过一次或多次裁剪的,每次裁剪的结果是曲面上的一片区域。该区域可能是整个参数域,当通常更可能是参数域的一部分。该区域中可能还有一个或多个孔或洞。Face通常代表的就是这样的一个区域。为了能够精确的表示这个区域,一个face需要记录如下信息:

一个曲面对象,这里可以是独立的曲面,或者是共享曲面的引用

一个方向,表明face是否和曲面的方向相同

一个或多个裁剪环,每个裁剪环都对应该区域中轮廓的一部分。其中,通常有一个外环,是区域最外边的轮廓,还有一个或多个内环,表明的是该区域内部的各个孔。

每个裁剪环由一系列的Edge组成,每个Edge记录一个3D曲线(或其中的一段),对OpenCascade来说,可能还需要记录为Edge邻接的每个曲面,生成一条对应的参数曲线。通常,Edge的顺序很关键,是按照曲面的顺序依次首尾链接的。大体上说,外环edge的方向绕曲面的法矢逆时针旋转,内环的方向绕曲面法矢顺时针旋转。这个在目前主流的三维造型软件中都是如此。

对OpenCascade来说,一个裁剪环由TopoDS_Wire对象表示,纪录了一系列的Edge对象。每个TopoDS_Face记录一系列的TopoDS_Wire对象,但这些Wire对象没有明确的区分外环和内环,因为TopoDS_Wire也可能是一个共享对象,可能对一个Face来说是外环,对另一个Face来说是内环(考虑:立方体上的一个孔的和上平面相交的Wire)。因此,需要调用相应的函数,判断一个wire是内环还是外环。

通常来说,一个Face只能有一个外环,但可以有多个内环。

   对OpenCascade来说,存在环的方向可能和Face方向不一致的情况,此时裁剪环中Edge的顺序是不正确的。考虑一个和曲面同向的Face,生成了正确的裁剪环。当Face反向时,裁剪环也相应的需要反向,此时OpenCascade仅仅改变了方向标识,没有调整裁剪环中Edge的顺序。这一点需要特别注意。因此,OpenCascade提供了一些类来对环的方向进行调整,在ShapeFix模块中,提供了一些相应的修复顺序的功能。在OpenCascade的自己代码中,对此也有大量特殊处理的代码,以保证获取正确方向的裁剪环进行处理,避免产生不必要的错误。

  

上一篇:UG二次开发选择面的类型


下一篇:【题解】Head Maker HDU 6809 2020杭电多校4 图论 随机化