OpenCascade拓撲對象之:Face的方向、參數域和曲面間的關係
- 2020 年 11 月 2 日
- 筆記
- OpenCascade, 拓撲結構
Face的方向標識的是Face的法失是否和曲面的法失同向,如果同向,則為TopAbs_FORWARD,反向則為TopAbs_REVERSED。該方向對Face的參數域和裁剪環的方向,都有影響。
默認情況下,Face的裁剪環方向是基於曲面的法失方向定義的,即:
For a surface limited by an edge the default region is on the left of the edge following its natural direction. More precisely it is the region pointed to by the vector product of the normal vector to the surface and the vector tangent to the curve.
注意:這裡是曲面的法失方向和Edge的切矢方向的叉乘指向的方向。
根據右手規則,外環的方向默認應當是繞曲面的法失逆時針方向旋轉,裁剪環中Edge也要滿足這種方向的要求。當生成裁剪環中Edge對應的參數曲線時,是基於曲面surface來生成的。
通常情況下,裁剪環是根據曲面生成的,因此和Face方向為TopAbs_FORWARD時是一致的。
當Face反向時,雖然僅僅改變了方向標記。但裁剪環理論上也應當隨之反向,裁剪環中的Edge也應當隨之反向。這些的處理,是在通過TopExp_Iterator或TopExp_Explorer類遍歷子對象時,自動組合上父對象的方向實現的。
例如:當初始Face和surface為同向時,裁剪環也符合曲面的方向,則Face和Wire的方向都是TopAbs_FORWARD。當Face反向後,方向變為TopAbs_REVERSED,Wire組合上了Face的方向,因此也變為了TopAbs_REVERSED的,因此也反向了。但這裡的反向,僅僅是Wire的方向屬性改變了,Wire內部的Edge的順序並沒有反向。
因此,Face的裁剪環Wire中,Edge的順序並不總是滿足拓撲方向的要求,也因此OCCT的內部提供了對此處理的函數,例如ShapeFix中的相應類。
當OCCT內部對裁剪環進行操作時,特別是基於曲面進行操作時,往往會進行如下處理,例如:
Tempface = face.Oriented(TopAbs_FORWARD)
獲取一個正向的臨時Face,基於該Face進行裁剪環的處理,因為此時face的法失和曲面的法失是一致的,因此裁剪環數據通常是和曲面保持一致的,基於曲面進行處理會非常方便。例如:判斷一個裁剪環是否是外環,通常是根據正向Face來判斷,如果Face反向了,則本來是外環的變為了內環,諸如此類。