天天看點

Topology and Geometry in OpenCascade-Vertex

摘要Abstract:本文簡要介紹了幾何造型中的邊界表示法(BRep),并結合程式說明OpenCascade中的邊界表示的具體實作,即拓樸與幾何的聯系。對具有幾何資訊的拓樸結構頂點(vertex)、邊(edge)、面(face)進行了詳細說明。本文隻對頂點資料進行說明。   關鍵字Key Words:OpenCascade、BRep、Topology、Geometry

Topology and Geometry in OpenCascade-Vertex

[email protected]

摘要Abstract:本文簡要介紹了幾何造型中的邊界表示法(BRep),并結合程式說明OpenCascade中的邊界表示的具體實作,即拓樸與幾何的聯系。對具有幾何資訊的拓樸結構頂點(vertex)、邊(edge)、面(face)進行了詳細說明。本文隻對頂點資料進行說明。 

關鍵字Key Words:OpenCascade、BRep、Topology、Geometry 

邊界表示(Boundary Representation)也稱為BRep表示,它是幾何造型中最成熟、無二義的表示法。實體的邊界通常是由面的并集來表示,而每個面又由它所在的曲面的定義加上其邊界來表示,面的邊界是邊的并集,而邊又是由點來表示的。 

邊界表示的一個重要特征是描述形體的資訊包括幾何資訊(Geometry)和拓樸資訊(Topology)兩個方面。拓樸資訊描述形體上的頂點、邊、面的連接配接關系,它形成物體邊界表示的“骨架”。形體的幾何資訊猶如附着在“骨架”上的肌肉。例如,形體的某個面位于某一個曲面上,定義這一曲面方程的資料就是幾何資訊。此外,邊的形狀、頂點在三維空間中的位置(點的坐标)等都是幾何資訊,一般來說,幾何資訊描述形體的大小、尺寸、位置和形狀等。 

在邊界表示法中,邊界表示就按照體-面-環-邊-點的層次,詳細記錄構成形體的所有幾何元素的幾何資訊及其互相連接配接的拓樸關系。這樣,在進行各種運算和操作中,就可以直接取得這些資訊。 

下圖所示為由一條邊連接配接的兩個面組成的殼(shell): 

Topology and Geometry in OpenCascade-Vertex

Figure 1.1 Structure of a shell formed from two faces 

上圖所示的形狀表示為TS, 面TF1和TF2,有七條邊TE1~TE7和六個頂點TV1~TV6。 

環TW1引用邊TE1~TE4;環TW2引用TE4~TE7 。邊引用的頂點如下:TE1(TV1,TV4),TE2(TV1,TV2),TE3(TV2,TV3),TE4(TV3,TV4),TE5(TV4,TV5),TE6(TV5,TV6),TE7(TV3,TV6)。 

Topology and Geometry in OpenCascade-Vertex

Figure 1.2 Data structure of the shell formed from two faces connected at an edge 

注:OpenCascade中的這個資料結構中不包含“回溯引用(back references)”,即所有的引用隻從複雜形狀到簡單形狀。(Note that this data structure does not contain any “back references”. All references go from more comples underlying shapes to less complex ones.)有點有向圖的意思。 

OpenCascade中的拓樸(topology)是根據STEP标準ISO-10303-42設計的。也許讀一下這個标準中的有關概念還是很有幫助的。STEP ISO-10303-42的相關資源: 

http://www.steptools.com/support/stdev_docs/express/step_irs/index.html

Topology and Geometry in OpenCascade-Vertex

Figure 2.1 Topology data structure in OpenCascade 

Topology and Geometry in OpenCascade-Vertex

TopoDS_Shape由值控制,包含三個成員變量:myLocation、myOrient、myTShape。 

Topology and Geometry in OpenCascade-Vertex

Figure 2.2 TopoDS_Shape member fields 

現在我們來考慮一下拓樸結構與幾何的關系。通過繼承TopoDS包中的抽象的拓樸類實作了邊界表示模型。如下圖所示: 

Topology and Geometry in OpenCascade-Vertex

Figure 2.3 Topology data structure in OpenCascade 

從上面的類圖可以看出隻有三種拓樸對象有幾何表示資料:頂點(vertex)、邊(edge)、面(face),分别為BRep_TVertex、BRep_TEdge、BRep_TFace。 

Topology and Geometry in OpenCascade-Vertex

Figure 2.4 TopoDS_TShape class diagram 

頂點(vertex)的位置用幾何點(gp_Pnt)來表示。點是幾何造型中的最基本元素,自由曲線、曲面或其他形體均可用有序的點集表示。用計算機存儲、管理、輸出形體的實質就是對點集及其連接配接關系的處理。在正則形體定義中,不允許孤立點存在。 

頂點的另一個重要屬性是容差(Tolerance),用來表示位置精度。頂點容差T的幾何意義為以頂點為圓心半徑為T的球。這個球必須包含所有與這個頂點相連的邊的曲線的端點。 

Topology and Geometry in OpenCascade-Vertex

Figure 3.1 Vertex Tolerance 

與其他幾何庫有全局精度(global precision)不同,OpenCascade把容差作為局部屬性(local properties)。由圖2.4可知,容差是頂點、邊、面的屬性。這種方法有助于用更一般的方式來描述高精度的模型。如下圖所示: 

Topology and Geometry in OpenCascade-Vertex

Figure 3.2 Vertex with different tolerance 

如果從底層來建立形狀,最好的方法就是指定最小的允許誤差。預設值Precision::Confusion()為1e-07。 

下面讨論頂點的朝向(orientation)屬性。它沒有直接的幾何意義,但是根據約定,若頂點的朝向屬性值為TopAbs_FORWARD,它就必須與表示邊的曲線的參數值小的端部比對。相應地,TopAbs_REVERSED的頂點與參數值大的端部比對。例如,有條邊位于圓弧上,圓弧半徑為1且在Z=0的平面上,起點為(1,0,0),向-Z軸向,曲線為逆時針方向。是以頂點(1,0,0)的朝向為TopAbs_FORWARD,頂點(0,1,0)的朝向為TopAbs_REVERSED。如下圖所示: 

Topology and Geometry in OpenCascade-Vertex

Figure 3.3 Vertex Orientation attribute 

實作上圖所示的程式代碼如下所示: 

程式運作結果如下圖所示: 

Topology and Geometry in OpenCascade-Vertex

Figure 3.4 Code example result 

BRep_Builder是從底層建立拓樸結構的類。如下代碼所示為從底層建立頂點的示例:

有一個友善的類也可用來建立頂點BRepBuilderAPI_MakeVertex,其内部也是使用了類BRep_Builder。是以,若想從底層建立拓樸結構,必須要熟悉BRep_Builder。 

BRep_Tool是用來通路拓樸結構中幾何資訊的工具,他的大部分的函數是靜态的。如下代碼所示為擷取頂點的容差和幾何點的方法:

結合《BRep Format Description White Paper》中對<vertex data>的描述,及程式代碼中對頂點資料的讀取,分析OpenCascade的BRep表示中的頂點。 

Topology and Geometry in OpenCascade-Vertex

Figure 4.1 NBF-like definition of Vertex 

詳細說明: 

<vertex data representation u parameter>u的使用方法說明如下: 

<vertex data representation data 1> 和參數u定義了三維曲線C上的點V的位置。參數u是曲線C上點V對應的參數:C(u)=V。 

<vertex data representation data 2>和參數u定義了曲面上的二維曲線C上點V的位置。參數u是曲線C上點V對應的參數:C(u)=V。 

<vertex data representation data 3>和參數u及<vertex data representation v parameter>v定義了曲面S上的點V:S(u,v)=V。 

<vertex data tolerance>t定義如下所示: 

Topology and Geometry in OpenCascade-Vertex

讀取Vertex部分的程式代碼摘抄如下:

從BRep檔案中可知,大部分的Vertex隻有如下資料:

即隻使用了BRep_Builder.MakeVertex()建立建立頂點(vertex),還可記錄頂點的類型: 

1. 若頂點在三維空間中的曲線上Geom_Curve,則記錄三維曲線的索引号及參數u; 

2. 若頂點在二維空間中的曲線上Geom2d_Curve,則記錄二維曲線的索引号及參數u; 

3. 若頂點在曲面上Geom_Surface,則記錄曲面的索引号及參數(u,v); 

結合部落格“OpenCascade notes”及《BRep format Description white paper》對OpenCascade的拓樸結構中的頂點(vertex)的屬性資料進行說明。結合程式說明了頂點的容差及朝向的意義及從底層建立頂點的方法。通過BRep_Tool的靜态函數可以擷取頂點的幾何資料及其他屬性。 

發現在BRep檔案中還對頂點進行了分類:三維曲線上的點、二維曲線上的點和曲面上的點。 

1. OpenCascade notes: opencascade.blogspot.com 

2. 孫家廣等. 計算機圖形學. 清華大學出版社 

PDF Version: Topology and Geometry in OpenCascade-Vertex