OpenCascade拓扑对象之:有向边和共边


有向边和共边是拓扑结构中一对重要的关系。简单来说,两个或多个有向边共用一个共边对象。对manifold情形,通常两个有向边共用一个共边,两个有向边的方向通常是一正一反(一个有向边和共边同向,一个有向边和共边反向)。在Non-Manifold情形下,可能有多个有向边共用一个共边,每个有向边和共边有不同的方向。

有向边和共边的邻接关系,是拓扑结构中一个重要的关系,借助该关系,可以实现例如:遍历共边所邻接的所有Face这样的操作。这个也是拓扑结构中设计的一个关键点。

通常,共边记录如下信息:

  •    一个3D曲线,是有向边共同使用的曲线
  •    端点对应的Vertex对象
  •    共边的邻接关系,可能是记录一系列的有向边对象,也可能是记录一系列邻接的Face对象。

有向边通常记录如下信息:

  •    一个参数域曲线,对应的是空间3D曲线在对应曲面上投影得到的参数曲线
  •    一个参数范围,是3D曲线上的参数范围,通常Edge是曲线上的一段,特别对无限长的曲线(例如:直线),必须有一个参数域范围。
  •    一个共边的对象引用,共边指针或者其他形式

Parasolid来说,有向边使用Fin结构,共边使用Edge结构;对ACIS来说,有向边使用COEDGE类,共边使用EDGE类。

但对OpenCascade来说,拓扑对象只有一个类TopoDS_Edge类。没有明显的有向边和共边的区分。共边对应的数据,记录在TopoDS_TShape派生的BRep_TEdge类中。在BRep_TEdge类中,不仅记录了通常共边的信息,还记录了邻接信息、参数曲线信息、边的连续性信息等多种信息。这些信息是通过记录一系列的BRep_CurveRepresentation类派生类对应的对象来实现的。这其中主要类如下:

BRep_GCurve类:记录了3D曲线信息

BRep_CurveOnSurface类:记录了参数曲线的信息

BRep_CurveOn2Surfaces类:记录了边邻接两个Face的连续性信息,是G0连续,还是G1连续。

具体定义在BRep_TEdge中,如下:

  Standard_Real myTolerance;

       Standard_Integer myFlags;

       BRep_ListOfCurveRepresentation myCurves;

   通常,一条边对应一条3D曲线,多条参数曲线,多种连续性对象。由于OpenCascade是支持Non-manifold模型的,因此一个边可能邻接多个Face,每个Face对应一个参数曲线,每两个Face间可能有不同的连续性。