亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Topology and Geometry in OpenCascade-Face

系統 2396 0

Topology and Geometry in OpenCascade-Face

eryar@163.com

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

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

一、引言 Introduction

面(Face)由一個外環和若干個內環來表示,內環完全在外環之內。根據環(Wire)的定義,在面上沿環的方向前進,左側總在面內,右側總在面外。面有方向性,一般用其外法矢方向作為該面的正向。若一個面的法矢向外,稱為正向面;反之,稱為反向面。面的形狀(surface)由面的幾何信息來表示,可以是平面或曲面,平面可用平面方程來描述,曲面可以用控制多邊形或型值點來描述(NURBS曲面),也可用曲面方程(隱式、顯式或參數形式)來描述。對于參數曲面,通常在其二維參數域上定義環,這樣就可以由一些二維的有向邊來表示環,集合運算中對面的分割也可在二維參數域上進行。?

OpenCascade中的面結構如下圖所示:?

wps_clip_image-8400

Figure 1.1 OpenCascade Face?

根據其類圖可知,面除了其參數曲面mySurface外,還包含顯示曲面的剖分(由三角形組成)。當面在著色顯示模式下時會計算出面的三角形。可視化的算法是由BRepMesh::Mesh()來為每個面三角剖分后用來顯示。?

二、面 Face

面(Face)是用來描述三維實體邊界的拓樸實體。面是由底層的曲面及一個或多個環(Wire)來描述。例如,一個圓柱體包含三個面:底面、頂面和側面。每個面都是無限的(無界的)(Geom_Plane和Geom_CylindricalSurface),通過邊界來限定無限的面得到面。即用位于Geom_Circle上的邊形成的環,限定出底面和頂面。側面包含四條邊:其中兩條邊與頂面和底面其享,剩下的兩條邊是縫合邊(seam edge),參看之前的討論。限定側面的環包含縫合邊兩次,兩個縫合邊具有不同的朝向。?

2.1 曲面 Surface

讓我們簡要回顧一下什么是曲面(surface)。如果你在高中時學過數學分析(mathematical analysis),那么你可能對這個概念已經熟記于心。如果沒學過,那么可能需要讀些文章來自學。在wikipedia上有關于參數曲面的簡單例子。?

曲面將二維參數空間{u, v}映射到三維空間。如下圖所示:?

wps_clip_image-21610

Figure 2.1 Map parameter space{u, v} into 3D space?

參數區間可以有界,也可以是無界的,也可以只在一個方向上有界。如平面(Plane)的參數空間是無界的;NURBS是有界的;圓柱面(Cylindrical Surface)在U方向上有界(U∈[0,2π]),在V方向上是無界的。?

Geom_Surface::Value()返回一個對應于參數空間中的參數(U,V)的空間點(X,Y,Z)。例如:地球上的任意一點都由緯度(V)和經度(U)表示,但是在世界坐標系中可以看作三維點(假如地球的中心定義為原點)。這個函數是純虛函數,所有派生自Geom_Surface的類都有對這個函數的實現,使計算各種曲面上對應參數的空間點的方式統一。?

讓我們回想一下,邊必須具有三維曲線(3D Curve)和曲面空間中的參數曲線(pcurve)。而OpenCascade要求面的邊界(環wire)在三維和二維空間中必須是閉合的。因此,圓柱的側面是采用前面我們討論的那樣來描述的。?

2.2 朝向 Orientation

面的朝向表示面的法向與曲面法向之間的關系(Face orientation shows how face normal is aligned with its surface normal)。若面的朝向是TopAbs_FORWARD(向前),則面的法向與曲面的法向一致;若面的朝向是TopAbs_REVERSED(反向),則面的法向與曲面的法向相反。面的法向表示材質的位置,材料位于面的背面。在正確描述的實體中,所有面的法向都是向外的,如下圖所示:?

wps_clip_image-19816

Figure 2.2 In a correct solid body all face normals go outward?

面上的材料是由邊的朝向確定的。方向是由曲面不是面()的法向和邊的微分的叉積確定。若邊的朝向向前,則邊的導數等于它的三維曲線的導數;若邊的朝向反向,則邊的導數與它的三維曲線的導數相反。也許考慮邊的參數曲線會更易于理解:假如邊是向前的,材料在它的左側,假如是反向的,則材料在它的右側。這讓我想起了格林公式中對平面區域的邊界曲線正向的規定:對平面區域D的邊界曲線L,我們規定L的正向如下:當觀察者沿L的這個方向行走時,D內在他附近處的那一部分總在他的左邊。?

wps_clip_image-4220

Figure 2.3 Orientation of the edge?

當用積分區域的概念來理解邊的朝向時好像要容易些。把參數空間看作積分區域D,其中藍色的邊表示材料在參數曲線的右側;紅色的邊表示材料在邊的左側。?

2.3 容差 Tolerance

面的容差的幾何意義是包圍面的一個具有厚度的板。如下圖所示:?

wps_clip_image-16586

Figure 2.4 Face Tolerance?

與邊和頂點的容差相比,建模算法中用到面的容差的情況相對要少。通常都使用默認值Precision::Confusion()。通常情況下,OpenCascade要求注意以下條件:?

當邊位于面上,頂點位于邊上時,面的容差<=邊的容差<=頂點的容差。?

2.4 三角剖分 Triangulation

除了面的參數表示,為了面的顯示,需要對面進行三角剖分,剖分得到的三角形也保存在面的數據結構中。當在著色渲染模式下時,可視化算法內部調用了BRepMesh::Mesh()來對每個面進行三角剖分,并將三角剖分得到的三角形加到面的數據結構中。?

2.5 附加位置 Additional location

與邊和頂點不同,面有附加位置信息(TopLoc_Location),它是面(BRep_TFace)的成員變量。所以,在使用底層曲面或三角剖分得到的三角形時,不要忘了將其考慮進去。?

三、示例程序 Example Code

3.1 底層創建面并訪問其數據 Creating a face bottom-up and accessing the data?

與創建邊和頂點一樣,需要類BRep_Builder和Brep_Tool來從底層創建面和訪問面中的數據。代碼如下所示:??

      
        BRep_Builder aBuilder;

TopoDS_Face aFace;

aBuilder.MakeFace (aFace, aSurface, Precision::Confusion());

...

TopLoc_Location aLocation;

Handle(Geom_Surface) aSurf 
      
      =
      
         BRep_Tool::Surface (aFace, aLocation);

gp_Pnt aPnt 
      
      = aSurf->
      
        Value (aU, aV).Transformed (aLocation.Transformation());


      
      
        //
      
      
        or to transform a surface at once


      
      
        //
      
      
        Handle(Geom_Surface) aSurf = BRep_Tool::Surface (aFace);


      
      
        //
      
      
        gp_Pnt aPnt = aSurf->Value (aU, aV);
      
      

Handle(Poly_Triangulation) aTri =
      
         BRep_Tool::Triangulation (aFace, aLocation);

aPnt 
      
      = aTri->Nodes.Value (i).Transformed (aLocation.Transformation());
    

一定要考慮面的附加位置信息。?

四、結論 Conclusion

面是邊界表示法BRep中有幾何數據的最后一個拓樸結構。為了面的顯示,需要對其進行三角剖分,三角剖分后的數據也是保存在面的數據結構中。面還有附加位置數據需要考慮,若不考慮附加位置,剖分后的三角形都是相對于原點的。?

從底層創建面和訪問面的屬性數據,與頂點和邊一樣,使用類BRep_Builder和類BRep_Tool來實現。?

五、參考資料?

1. Roman Lygin, OpenCascade notes, opencascade.blogspot.com?

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

3. OpenCascade source code.?

?

Topology and Geometry in OpenCascade-Face


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧洲免费无线码二区5 | 国产一区二区免费福利片 | 欧美日日操 | 亚洲乱码中文字幕久久 | 精品国产午夜久久久久九九 | www.九九热| 久久久伊香蕉网站 | 成人免费观看视频久爱网 | 日本中文字幕网站 | 成人婷婷 | 韩国日本一级毛片免费视频 | 一二三四社区在线播放 | 欧美freesex10一|3 | 一级一级18女人毛片 | 国产成人精品日本亚洲语言 | 亚洲综合五月天 | 午夜一级片 | 久久综合国产 | 久久99精品一级毛片 | 九九99久久精品午夜剧场免费 | 国产1区| 免费看黄色的视频 | 亚洲精品视频免费观看 | 国产精品免费一区二区三区四区 | 97国产| 九九精品视频在线免费观看 | 日韩精品123 | 国产精品久久久久无码av | 色费女人18毛片a级视频在线 | 一区二区三区四区免费视频 | 久久天天躁综合夜夜黑人鲁色 | 国产精品一区二 | 日本一区毛片免费观看 | 春暖花开亚洲 | 女bbbbxxx | 日本不卡高清免费 | 色中文在线| 91探花在线 | 亚洲精品mm1313久久 | 日韩社区 | 五月天色婷婷在线 |