在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 所以以下介紹中,類名或者方...