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间可能有不同的连续性。