天天看點

OpenCASCADE PCurve of Topological Face

<a href="mailto:[email protected]">[email protected]</a>

Abstract. OpenCASCADE provides a class BRepBuilderAPI_MakeFace to build topological faces. A face maybe built from a surface, elementary surface from gp package, surface from Geom, from a wire and find the surface automatically if possible, etc. If a face is built, how to check it for visualization? What does PCurve means? The paper will answer those question.

Key Words. OpenCASCADE, Topological Face, PCurve, Holes

1. Introduction

OpenCASCADE中邊界表示法BRep的拓樸面Topological Face包含了完整的幾何資訊,即給定一個TopoDS_Face,其中包含了邊和頂點,而邊和頂點包含了幾何曲線及三維點。對邊和頂點的可視化很好了解:顯示頂點就是在場景中繪制一個三維點;顯示邊最簡單的算法可以将邊中的曲線在參數空間中等分采樣,再将參數對應到曲線上的點連接配接起來就可以簡單顯示邊了;而面的可視化如何實作呢?

幾何造型核心中都有個參數曲線的概念,即PCurve(Parametric Curve),它是實作面可視化的一個很關鍵的資料。PCurve的定義是參數表示的曲面上的曲線在二維(u, v)參數空間中的二維樣條曲線,也就是曲面上的曲線(Curve on Surface)。

在了解PCurve定義的基礎上才好對其做進一步的研究,好回答“從哪兒來到哪兒去的問題”,即如何産生PCurve,如何使用生成的PCurve資料。本文主要介紹如何将OpenCASCADE拓樸面中的PCurve可視化,進而友善對拓樸面的檢查,也可以看出PCurve在曲可視化方面的應用。PCurve的産生及其他應用有待進一步挖掘。若您對PCurve有何看法,歡迎不吝賜教。

2.PCurve of a Face

由OpenCASCADE中對拓樸形狀可視化的算法[2]可知,對面的網格化需要先對面中環,環中的邊進行離散化,最後都統一到參數空間,即隻需要一個二維網格化算法來對二維的參數空間進行網格化,最後将參數空間網格化的點映射回面中的幾何曲面上,即得到曲面的空間網格剖分。

OpenCASCADE PCurve of Topological Face

Figure 2.1 Mesh UV domain of a Surface

如上圖2.1所示,UV參數空間中的邊界線就是拓樸面的環中的邊的PCurve,即拓樸面中的環對應了參數空間中的邊界,而這些邊界的表示就是使用了PCurve。對參數空間進行網格化最常見的算法就是Delaunay三角剖分算法[3],早期OpenCASCADE的版本中使用了一個開源Delaunay庫Triangle[4]。通過将曲面在參數空間的結果映射回曲面的三維空間即可将曲面可視化了。如何控制曲面離散精度還有待進一步學習。

OpenCASCADE PCurve of Topological Face

Figure 2.2 A Smiley Face Meshed by Triangle

上圖2.2所示為二維三角剖分庫Triangle對一個笑臉進行剖分的結果。

在Draw Test Harness中,OpenCASCADE提供了對面的PCurve可視化的指令pcurve。使用pcurve指令可以将一個面中所有的pcurve根據朝向orientation以不同的顔色進行顯示。這個指令對檢查面中邊的朝向的正确性非常有用。下面使用Tcl指令在Draw Test Harness中對基本曲面的PCurve進行顯示。

2.1 Plane PCurve

OpenCASCADE中的平面的參數方程為:

OpenCASCADE PCurve of Topological Face

由上述參數表示的平面方程可知,平面的定義域是無窮的,是以為了生成一個有環的拓樸面,需要對平面設定邊界來對無限的平面進行裁剪。相應的Tcl腳本如下所示:

# 1. view the pcurves of a plane face

plane p

# trim the plane to (u,v)-&gt;[-1, 1][-1, 1]

trim p p -1 1 -1 1

# make the topo face

mkface p p

# extract the 2d curve of an edge on a face

pcurve p

# display pcurve in 2d viewer

av2d

fit

2dfit

# display face in 3d viewer

vdisplay p

生成結果如下圖所示:

OpenCASCADE PCurve of Topological Face

Figure 2.3 Color for PCurves

由圖2.3可知,pcurve有四種顔色:

v rouge: FORWARD 胭脂紅表示正向;

v bleu: REVERSED 藍色表示反向;(不知道是法語寫法還是個錯别字,藍色英語應該為blue)

v rose: EXTERNAL 玫瑰紅表示向外;

v orange: INTERNAL 橙黃色表示向内;

根據上述的顔色規則來看圖2.4,可以看出平面邊界的pcurves是逆時針閉合的。

OpenCASCADE PCurve of Topological Face

Figure 2.4 Plane PCurves

OpenCASCADE PCurve of Topological Face

Figure 2.5 Plane Face in 3D Viewer

2.2 Cylinder PCurve

OpenCASCADE中圓柱面的參數方程為:

OpenCASCADE PCurve of Topological Face

由上述參數方程可知,u的取值範圍是有界的[2, 2pi),v的取值是無限的。是以為了得到有界的拓樸面,至少需要對其v方向進行裁剪。相應的Tcl腳本如下所示:

# 2. view the pcurves of a cylinder face

cylinder c 1

# trim the cylinder to (u,v)-&gt;[0, 2pi][0, 1]

trim c c 0 2*pi 0 1

mkface c c 

pcurve c

# display pcurves in 2d viewer

vdisplay c

OpenCASCADE PCurve of Topological Face

Figure 2.6 Cylinder PCurves

由上圖根據pcurve的着色規則可知,圓柱面的pcurves也是按逆時針順序閉合的。其在三維中的顯示結果如下圖所示:

OpenCASCADE PCurve of Topological Face

Figure 2.7 Cylinder Face in 3d Viewer

3.3 Cone PCurve

OpenCASCADE中圓錐面的參數方程為:

OpenCASCADE PCurve of Topological Face

可知圓錐曲面與圓柱曲面一樣,都是在u方向有界,在v方向無界。對其進行裁剪生成拓樸面并顯示pcurve的Tcl腳本如下所示:

# 3. view the pcurves of a cone face

cone co 30 0

# trim the cone to (u,v)-&gt;[0, 2pi][0, 1]

trim co co 0 2*pi 0 1

mkface co co

# extract pcurves

pcurve co

vdisplay co

OpenCASCADE PCurve of Topological Face

Figure 2.8 Cone PCurves

由上圖根據pcurve的着色規則可知,圓錐面的pcurves也是按逆時針順序閉合的。其在三維中的顯示結果如下圖所示:

OpenCASCADE PCurve of Topological Face

Figure 2.9 Cone Face in 3D viewer

3.4 Sphere PCurve

OpenCASCADE中球面的參數方程為:

OpenCASCADE PCurve of Topological Face

由上述參數方程可知,球面在u和v方向均為有界的,是以可不用對其進行裁剪就可生成拓樸面,當然也可對其裁剪得到球面的部分。顯示球面pcurves的Tcl腳本如下所示:

# 4. view the pcurves of a sphere face

sphere s 1

mkface s s 

pcurve s

# display sphere face in 3d viewer

vdisplay s

OpenCASCADE PCurve of Topological Face

Figure 2.10 Sphere PCurves

由上圖根據pcurve的着色規則可知,球面的pcurves也是按逆時針順序閉合的。其在三維中的顯示結果如下圖所示:

OpenCASCADE PCurve of Topological Face

Figure 2.11 Sphere in 3d viewer

3.5 Torus PCurve

OpenCASCADE中圓環面的參數方程為:

OpenCASCADE PCurve of Topological Face

由圓環面的參數方程可知,在參數區間上u和v都是有界的,是以可不用對其進行裁剪就可生成拓樸面,當然也可對其裁剪得到圓環面的部分。顯示圓環面pcurves的Tcl腳本如下所示:

# 5. view the pcurves of a torus face

torus t 20 5

mkface t t

pcurve t

# display torus in 3d viewer

vdisplay t

OpenCASCADE PCurve of Topological Face

Figuer 2.12 Torus PCurves

由上圖根據pcurve的着色規則可知,圓環面的pcurves也是按逆時針順序閉合的。其在三維中的顯示結果如下圖所示:

OpenCASCADE PCurve of Topological Face

Figure 2.13 Torus in 3d viewer

3.PCurve of a Face With Holes

由OpenGL程式設計指南[10]可知,要對一個NURBS曲面進行裁剪,可以建立gluPwlCurve和gluNurbsCurve來在參數空間形成閉合區域。其中gluPwlCurve建立是多段直線,而gluNurbsCurve生成的是在機關參數空間的NURBS曲線。建立裁剪曲線時需要考慮曲線的朝向(orientation),即曲線是順時針的還是逆時針的。曲線裁剪曲面的方式很簡單,想像你沿着曲線走,左手邊的将會被保留,右手邊的将會被去除。

OpenCASCADE PCurve of Topological Face

Figure 3.1 Parametric Trimming Curves

裁剪曲線還必須閉合且不能自交(Trimming curves must be closed and nonintersecting)。這裡的裁剪曲線與OpenCASCADE中的參數曲線pcurve的概念相同。OpenCASCADE中的面也是采用的相同的規則。下面通過Tcl腳本來測試OpenCASCADE中帶有開孔的面的pcuve是否滿足OpenGL中裁剪曲面的規則。

# test face with one hole

trim p p -10 10 -10 10

pcylinder c 1 2

bop p c

bopcut s

explode s F

pcurve s_1

上述Tcl腳本為将一個平面用圓柱去挖一個孔,如下圖所示:

OpenCASCADE PCurve of Topological Face

Figure 3.2 Face with a Hole

周遊被挖孔(boolean operation)得到的形狀的面,得到一個面,顯示這個面的pcurve如下圖所示:

OpenCASCADE PCurve of Topological Face

Figure 3.3 PCurve of a Face with one hole

由上圖3.3可知,pcurve的規則與OpenGL中的裁剪曲線一緻。孔的pcurve為藍色,即為逆時針的反向:順時針。當一個面上生成多個孔時,是否仍然滿足上述規則呢?下面使用Tcl來對驗證一下:

# test pcurve of a face with multi-holes

sphere s 10

mkface s s

pcylinder c1 1 30

pcylinder c2 1 30

ttranslate c1 -5 -5 -15

ttranslate c2 5 5 -15

bop s c1

bop s c2

用腳本在一個球面上生成四個孔,如下圖所示:

OpenCASCADE PCurve of Topological Face

Figure 3.4 A sphere face with 4 holes

周遊boolean operation生成孔後的形狀的面,可看到隻生成了一個面。将這個面的pcurve顯示出來如下圖所示:

OpenCASCADE PCurve of Topological Face

Figure 3.5 PCurves for a sphere with 4 holes

由上圖3.5可知,pcurve的朝向也與OpenGL中裁剪曲線的朝向一緻。當一個面生成的開孔如圖3.1中的D和E時,在OpenCASCADE中是如何表示的呢?下面也有Tcl腳本測試測試:

ptorus t 5 1

bop p t

pcurve s_2

OpenCASCADE PCurve of Topological Face

Figure 3.6 A Plane cut a Torus

OpenCASCADE PCurve of Topological Face

Figure 3.7 PCurves for the faces

由上圖可知,當一個平面去掉一個圓環面後,生成了兩個面,與有些幾何核心的用連結清單來将結果表示成一個面不同,OpenCASCADE中将結果生成了兩個面。其pcurves的朝向也與OpenGL中的裁剪曲線的朝向一緻。

4.Conclusion

綜上所述,曲面上的曲線pcurve的概念是一個非常重要的概念,了解pcurve對造型及可視化有着重要意義。本文結合OpenGL中裁剪曲線的規則及OpenCASCADE的Draw Test Harness中顯示拓樸面pcurve的指令,來對基本曲面及裁剪曲面的pcurve的朝向進行檢驗。掌握了這些規則,可友善對自己構造拓樸面的正确性進行檢驗。

5. Acknowledge

時光荏苒,從畢業到現在不經意間就到了而立之年。滄海桑田,歲月蹉跎,經曆春夏秋冬的四季,品嘗酸甜苦辣的人生。感謝一路走來,親人、朋友、同僚等對給予我的支援,信任和鼓勵,讓我可以做自己喜歡的事情,找到人生的方向。

寄蜉蝣與天地,渺滄海之一粟。準備回到離家近的武漢工作,切換到生活模式,多些時間陪伴父母親人,以報養育之恩。

6. References

1. Shing Liu. PCurve - Curve on Surface. 

<a href="http://www.cnblogs.com/opencascade/p/3601859.html">http://www.cnblogs.com/opencascade/p/3601859.html</a>

2. Shing Liu. Topology and Geometry in OpenCASCADE-Edge.

<a href="http://www.cnblogs.com/opencascade/p/3604052.html">http://www.cnblogs.com/opencascade/p/3604052.html</a>

3. Topology and Geometry in OpenCASCADE-Face.

<a href="http://www.cnblogs.com/opencascade/p/3605729.html">http://www.cnblogs.com/opencascade/p/3605729.html</a>

5. Shing Liu. Delaunay Triangulation in OpenCASCADE. 

<a href="http://www.cppblog.com/eryar/archive/2013/05/26/200605.aspx">http://www.cppblog.com/eryar/archive/2013/05/26/200605.aspx</a>

6. Shing Liu. Triangle-Delaunay Triangulator. 

<a href="http://www.cnblogs.com/opencascade/p/3632705.html">http://www.cnblogs.com/opencascade/p/3632705.html</a>

7. OpenCASCADE, Draw Test Harness User Guide.

8. OpenCASCADE, BRep Format White Paper.

9. Richard S. Wright Jr., Benjamin Lipchak. OpenGL SuperBible. Sams Publishing. 2004

10. Dave Shreiner. OpenGL Programming Guide. Addison-Wesley. 2009

繼續閱讀