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
  • TedgeA topological part  of a  curve  in 2D or 3D,  the boundary is a set of oriented    Vertices
  • TwireA 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.
  • TshellA 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 dataThe 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 ,除包含上述信息外,还会包含一系列的 Wireshape ,这些 wire 构成了 Tface 的多个裁剪环,其中一个为外环, 0 个或多个内环。

拓朴的基本表示先总结到此,后续再逐步随学习深入之。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值