OCC笔记:面、边的方向(TopAbs_Orientation)
1.面方向
在Open CASCADE中,面的方向(TopAbs_Orientation)本质是一个拓扑逻辑属性,用于描述面在三维空间中的“内外关系”。它与几何曲面本身的参数化方向(如UV坐标系)不同,而是更高层的拓扑语义。
TopAbs_FORWARD:面法线方向指向实体外部(默认方向,表示该面是实体外壳的正向边界)。
TopAbs_REVERSED:面法线方向指向实体内部(例如孔洞内壁、布尔运算中的切削面)。
TopAbs_INTERNAL/EXTERNAL:特殊场景使用,非流行3D模型中用,如中间过渡面或虚拟参考面。
比如一个occ构造的一个BRepPrimAPI_MakeBox theMakeBox(100, 200, 300);
Box的左下角点为(0,0,0),右上角点(100,200,300)
通过curFace.Orientation()输出面的方向
通过curEdge.Orientation()输出边的方向
通过以下代码输出面的法向
BRepAdaptor_Surface adaptorSurface(curFace);
const auto& anNormal = adaptorSurface.Plane().Axis().Direction();
得到结果如下图,
左侧面的法向为(1, 0, 0),指向实体的内部,所以左侧面的方向为TopAbs_REVERSED。
右侧面的法向为(1, 0, 0),指向实体的外部,所以右侧面的方向为TopAbs_FORWARD。
2.边的方向
边的方向(TopAbs_Orientation)是相对于其所属的父面而言的,并非绝对几何方向。
已知边所在面的正向方向,右手法则,大拇指指向面的正向方向,4指指向的方向为边的正向,即逆时针方向。
通过curEdge.Orientation()输出边的方向,参看上图输出可知,遍历左侧面的边可知
TopExp_Explorer anExp;
for( anExp.Init( tpFace, TopAbs_ShapeEnum::TopAbs_EDGE); anExp.More(); anExp.Next())
{
//const TopoDS_Edge& curEdge = TopoDS::Edge(anEdgeMap(i));
const TopoDS_Edge& curEdge = TopoDS::Edge(anExp.Current());
if (curEdge.IsNull()) continue;
//…
}
如下图画出左侧面示意图:
边1:A->B,正向
边2:B->C,正向
边3:D->C,反向
边4:A->D,反向