OpenCascade拓撲物件之 裁剪環的理解

2022-08-02 05:42:09 字數 1780 閱讀 6963

在cad幾何造型表示中,曲面通常採用的是引數化表示形式,形容

s(u,v) = (x(u,v),y(u,v),z(u,v))

形式,其中u、

v是兩個引數,每個

uv引數對應乙個

3d空間點。因此,通常建立起乙個從

2d引數域到

3d空間曲面的乙個對映關係。u、

v引數通常有一定的範圍,例如:對球面來說,

u通常位於

[0,2pi]

之間,v

位於[-pi/2,pi/2]

之間。因此,基於引數化表示的曲面通常是規則的曲面。對一些型別的曲面,例如:平面、圓柱面,可能在乙個或兩個方向上是無限大的,例如:對平面來說,通常是無限大的面,u、v引數的範圍是無限大的;對圓柱面來說,通常軸向的引數範圍是無限大的。opencascade中的平面和圓柱面就是如此。

而實際造型中,曲面往往是具有有限範圍的,並且是不規則的,經過一次或多次裁剪的,每次裁剪的結果是曲面上的一片區域。該區域可能是整個引數域,當通常更可能是引數域的一部分。該區域中可能還有乙個或多個孔或洞。face通常代表的就是這樣的乙個區域。為了能夠精確的表示這個區域,乙個

face

需要記錄如下資訊:

乙個曲面物件,這裡可以是獨立的曲面,或者是共享曲面的引用

乙個方向,表明face是否和曲面的方向相同

乙個或多個裁剪環,每個裁剪環都對應該區域中輪廓的一部分。其中,通常有乙個外環,是區域最外邊的輪廓,還有乙個或多個內環,表明的是該區域內部的各個孔。

每個裁剪環由一系列的edge組成,每個

edge

記錄乙個

3d曲線(或其中的一段),對

opencascade

來說,可能還需要記錄為

edge

鄰接的每個曲面,生成一條對應的引數曲線。通常,

edge

的順序很關鍵,是按照曲面的順序依次首尾鏈結的。大體上說,外環

edge

的方向繞曲面的法矢逆時針旋轉,內環的方向繞曲面法矢順時針旋轉。這個在目前主流的三維造型軟體中都是如此。

對opencascade來說,乙個裁剪環由topods_wire物件表示,紀錄了一系列的edge物件。每個

topods_face

記錄一系列的

topods_wire

物件,但這些

wire

物件沒有明確的區分外環和內環,因為

topods_wire

也可能是乙個共享物件,可能對乙個

face

來說是外環,對另乙個

face

來說是內環(考慮:立方體上的乙個孔的和上平面相交的

wire

)。因此,需要呼叫相應的函式,判斷乙個

wire

是內環還是外環。

通常來說,乙個face只能有乙個外環,但可以有多個內環。

對opencascade來說,存在環的方向可能和face方向不一致的情況,此時裁剪環中edge的順序是不正確的。考慮乙個和曲面同向的

face

,生成了正確的裁剪環。當

face

反向時,裁剪環也相應的需要反向,此時

opencascade

僅僅改變了方向標識,沒有調整裁剪環中

edge

的順序。這一點需要特別注意。因此,

opencascade

提供了一些類來對環的方向進行調整,在

shapefix

模組中,提供了一些相應的修復順序的功能。在opencascade的自己**中,對此也有大量特殊處理的**,以保證獲取正確方向的裁剪環進行處理,避免產生不必要的錯誤。

Open CASCADE 基礎類簡介

很久沒寫關於occ的介紹了。今天有時間,繼續寫,如果我一直在做這方面的話,我想我會把它的文件看完並寫完。occ的基礎型別包括了以下6個方面的內容 1 原始型別,字串和各種數值型別的定義 將一些int,float等重新定義為內部型別 2 堆記憶體的自動管理 主要是handle的模式 3 異常處理 4 ...

OpenCasCade網格的顯示

首先看一張圖 上圖中間的網格區域,是occ提供的,可以給我們提供參考作用,那麼這個網格如何顯示出來,並設定屬性呢,其實在 v3d viewer這個類中有提供此類方法 下面兩種方法,實現了網格的顯示與隱藏,其他具體引數可以看occ 結構,有詳細介紹。activates the grid in all ...

OpenCasCade 造型引擎學習

今年參加乙個三維建模的專案開發,對opencascade三維部分的功能進行了學習研究,現發布出來,與大家一起分享交流。因為我們是用c 進行專案開發的,所以在opencascade原生c 的基礎上包裝了一層c 的託管 narocad中的包裝器 進行自動封裝,生成託管的dll 所以以下介紹中,類名或者方...