OCCT的拓朴结构

  OCCT 的拓朴表示采用 BREP 形式,可以支持 non-manifold 实体。

       OCCT 的拓朴表示分为两层:拓朴对象层和 BREP 表示层。

       先看拓朴对象层,如下是类继承关系:

       TopoDS_Shape

       ―― TopoDS_Solid

       ―― TopoDS_Shell

       ―― TopoDS_Face

       ―― TopoDS_Edge

       ―― TopoDS_CompSolid 

       ―― TopoDS_Compound 

       ―― TopoDS_Vertex      

       ―― TopoDS_Wire

       这里, shape 对象是一个对下层拓朴对象的引用( reference ),并记录对象的位置和方向属性。这里可以针对不同位置或方向的同一个底层对象,实现共享。属性三个:

       Handle_TopoDS_TShape myTShape;// 底层对象

TopLoc_Location myLocation;// 位置信息

TopAbs_Orientation myOrient;// 方向。

上述这些对象,都是一些引用,结构和简单。具体的拓朴信息和几何信息在 Tshape 中。下面看 TopoDS_Tshape 的继承关系:

TopoDS_TShape     

―― TopoDS_TWire

―― TopoDS_TVertex    

―――― BRep_TVertex   

―― TopoDS_TSolid      

―― TopoDS_TShell      

―― TopoDS_TFace      

―――― BRep_TFace     

―― TopoDS_TEdge      

―――― BRep_TEdge     

―― TopoDS_TCompSolid      

―― TopoDS_TCompound      

       这里 TopoDS 开始的类是拓朴层的类, Brep 开始的类是具体的 BREP 表示层的类。 Tshape 具有如下主要的属性:

       TopoDS_ListOfShape myShapes;

Standard_Integer myFlags;

即每个 Tshape 有一系列的 TopoDS_Shape (引用)组成,每个引用记录的相应的几何信息和拓朴信息。例如:一个 Twire 可能由多个 Edge 组成等。如下是类的一些简单说明:

Tvertex: A  Vertex is a topological  point in  two or three dimensions 。
Tedge : A topological part  of a  curve  in 2D or 3D,  the boundary is a set of oriented    Vertices 。
Twire : A set of edges connected by their vertices 。
Tface: A  topological part  of a surface   or  of the  2D space.The  boundary  is  a   set of  wires   and vertices.
Tshell : A set of faces connected by their edges.
Tsolid: A Topological part of 3D space, bounded by shells, edges and vertices.
TCompSolid; A set of solids connected by their faces.
TCompound; A TCompound is an all-purpose set of Shapes.
 

总之, TcompSolid 由一系列的 Solid 组成,每个 TSolid 由一系列的 Shell 组成,每个 TShell 由一系列的 Face 组成,每个 TWire 由一系列的 Edge 组成,每个 Tedge 由一系列的 Vertex 组成。当然,不是随便就可以组成的,还是有要求的,比如: Face 组成 Tshell 要求 Face 的边境相连等。

上述的声明和实现主要在 TopoDS package 中。

上述 TopoDS_T* 类,主要是上面显示的两种属性。具体的几何数据和拓朴数据由 BREP 层实现。

BREP 层描述了一个 Boundary  Representation Data   Structure ,并通过继承 TopoDS 层的类,添加了几何信息。从上可以看出,有三个主要的实现类:

Brep_Tvertex 、 Brep_Tedge 、 Brep_Tface 类。

先从简单的 Brep_Tvertex 类说起。 Tvertex 表示一个节点拓朴对象,包含了一个 3D 点信息和一个 Tolerance 信息,如下:

gp_Pnt myPnt;

Standard_Real myTolerance;

BRep_ListOfPointRepresentation myPoints;

第三个属性目前似乎没有使用。

再看 Brep_Tedge 类,改类比较复杂,看 OCCT 的文档说明:

The TEdge from BRep is  inherited from  the  Tedge from TopoDS. It contains the geometric data ,The TEdge contains :

       * A tolerance.
       * A same parameter flag.
       * A same range flag.
       * A Degenerated flag.
       *  A  list   of curve representation.
 

属性如下:

Standard_Real myTolerance;

Standard_Integer myFlags;

BRep_ListOfCurveRepresentation myCurves;

其中,比较复杂的是 listofcurve 属性。每个 Edge 包含了一系列各类的 curve ,看一些 OCCT 的文档说明:

An Edge is  defined by a list  of curve representations  which are either :

    --  Geometric representations :

    * A 3d curve (at most one)  3D 曲线。
    * A curve on surface, curve in parametric space. 参数曲线
    * A curve on closed surface, two curves in parametric space. 例如圆柱的边。
 

    --  Polygonal representations : 剖分后的数据。

    * A 3d polygon (at most one).
    * A Polygon on triangulation (array of node indices)
    * A Polygon on closed triangulation (2 arrays of node indices)
    * A polygon on surface (array of 2d points in parametric space)
 

   

    --  Curve on 2 surfaces :

    * This is used for storing shape continuity.

  足够的复杂了。下面看一些 list 中可能有那些类:

BRep_CurveRepresentation      

―― BRep_PolygonOnTriangulation

―――― BRep_PolygonOnClosedTriangulation      

―― BRep_PolygonOnSurface

―――― BRep_PolygonOnClosedSurface      

―― BRep_Polygon3D    

―― BRep_GCurve

―――― BRep_Curve3D      

―――― BRep_CurveOnSurface    

―――――― BRep_CurveOnClosedSurface

―― BRep_CurveOn2Surfaces 

这些类很多,后面再详细补充,主要关注如下类:

Gcurve 类:表示是几何曲线类,可能是 3D 曲线( Curve3D ),也可能是参数曲线( CurveOnSurface 类),而参数曲线可能是闭合曲线的参数曲线( CurveOnClosedSurface 类)。

裁剪曲面中,裁剪环中的裁剪曲线,就是使用 CurveOnSurface 表示的。

通常,如果一条曲线是单独的 3D 曲线,则 listofcurve 中通常只包含 Curve3d 。如果一个曲线是一个裁剪曲线,则通常包括一条 3d 曲线和一个参数曲线。当所在曲面进行了剖分后,则还会有对于的 polygon 数据。这也是为什么使用 list 记录这些信息的原因。

先到这里,下面看 Tface 。

先看 OCCT 文档说明:

The TFace contains :

       * A suface, a tolerance and a Location.
       * A NaturalRestriction flag,   when this  flag  is True the  boundary of the  face is known to be the parametric space (Umin, UMax, VMin, VMax).
       *  An    optional Triangulation.   If  there  is a triangulation the surface can be absent.
       *  The  Location is  used   for the Surface.
       *   The triangulation  is in the same reference system   than the TFace.     A point on mySurface must   be transformed with myLocation,  but  not a point  on the triangulation.
       *   The Surface may  be shared by different TFaces but not the  Triangulation, because the  Triangulation may be modified by  the edges.
 

 

Tface 包括如下属性:

Handle_Geom_Surface mySurface; 关联的 geom 层的曲面信息,这个曲面可能是无界曲面,例如: Plane 。
Handle_Poly_Triangulation myTriangulation; Face 网格剖分后生成的网格数据。主要用于显示时使用。
TopLoc_Location myLocation; 曲面的位置信息,为了便于同一个曲面在不同位置显示时的数据共享。
Standard_Real myTolerance; 曲面的误差。
Standard_Boolean myNaturalRestriction; 是否自然参数限制的曲面,当是自然限制时,曲面被矩形参数区域[U1,U2] × [V1,V2] 限制,否则,为裁剪曲线限制,参数裁剪区域通常不是规则的矩形区域。
 

通常,一个裁剪曲面 Tface ,除包含上述信息外,还会包含一系列的 Wire 子 shape ,这些 wire 构成了 Tface 的多个裁剪环,其中一个为外环, 0 个或多个内环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉逍遥_祥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值