• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            eryar

            PipeCAD - Plant Piping Design Software.
            RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
            posts - 603, comments - 590, trackbacks - 0, articles - 0

            OpenCASCADE PCurve of Topological Face

            Posted on 2015-04-25 12:22 eryar 閱讀(4008) 評論(2)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCASCADE PCurve of Topological Face

            eryar@163.com

            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,其中包含了邊和頂點,而邊和頂點包含了幾何曲線及三維點。對邊和頂點的可視化很好理解:顯示頂點就是在場景中繪制一個三維點;顯示邊最簡單的算法可以將邊中的曲線在參數(shù)空間中等分采樣,再將參數(shù)對應(yīng)到曲線上的點連接起來就可以簡單顯示邊了;而面的可視化如何實現(xiàn)呢?

            幾何造型內(nèi)核中都有個參數(shù)曲線的概念,即PCurve(Parametric Curve),它是實現(xiàn)面可視化的一個很關(guān)鍵的數(shù)據(jù)。PCurve的定義是參數(shù)表示的曲面上的曲線在二維(u, v)參數(shù)空間中的二維樣條曲線,也就是曲面上的曲線(Curve on Surface)。

            在理解PCurve定義的基礎(chǔ)上才好對其做進一步的研究,好回答“從哪兒來到哪兒去的問題”,即如何產(chǎn)生PCurve,如何使用生成的PCurve數(shù)據(jù)。本文主要介紹如何將OpenCASCADE拓樸面中的PCurve可視化,從而方便對拓樸面的檢查,也可以看出PCurve在曲可視化方面的應(yīng)用。PCurve的產(chǎn)生及其他應(yīng)用有待進一步挖掘。若您對PCurve有何看法,歡迎不吝賜教。


            2.PCurve of a Face

            由OpenCASCADE中對拓樸形狀可視化的算法[2]可知,對面的網(wǎng)格化需要先對面中環(huán),環(huán)中的邊進行離散化,最后都統(tǒng)一到參數(shù)空間,即只需要一個二維網(wǎng)格化算法來對二維的參數(shù)空間進行網(wǎng)格化,最后將參數(shù)空間網(wǎng)格化的點映射回面中的幾何曲面上,即得到曲面的空間網(wǎng)格剖分。

            wps_clip_image-29946

            Figure 2.1 Mesh UV domain of a Surface

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

            wps_clip_image-30572

            Figure 2.2 A Smiley Face Meshed by Triangle

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

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

            2.1 Plane PCurve

            OpenCASCADE中的平面的參數(shù)方程為:

            wps_clip_image-8180

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

            # 1. view the pcurves of a plane face
            plane p

            # trim the plane to (u,v)->[-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

            生成結(jié)果如下圖所示:

            wps_clip_image-22514

            Figure 2.3 Color for PCurves

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

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

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

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

            v orange: INTERNAL 橙黃色表示向內(nèi);

            根據(jù)上述的顏色規(guī)則來看圖2.4,可以看出平面邊界的pcurves是逆時針閉合的。

            wps_clip_image-6057

            Figure 2.4 Plane PCurves

            wps_clip_image-27675

            Figure 2.5 Plane Face in 3D Viewer

            2.2 Cylinder PCurve

            OpenCASCADE中圓柱面的參數(shù)方程為:

            wps_clip_image-5104

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

            # 2. view the pcurves of a cylinder face
            cylinder c 1

            # trim the cylinder to (u,v)->[0, 2pi][0, 1]
            trim c c 0 2*pi 0 1

            # make the topo face
            mkface c c 

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

            # display pcurves in 2d viewer
            av2d
            2dfit
            fit

            # display face in 3d viewer
            vdisplay c

            生成結(jié)果如下圖所示:

            wps_clip_image-19747

            Figure 2.6 Cylinder PCurves

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

            wps_clip_image-28392

            Figure 2.7 Cylinder Face in 3d Viewer

            3.3 Cone PCurve

            OpenCASCADE中圓錐面的參數(shù)方程為:

            wps_clip_image-17202

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

            # 3. view the pcurves of a cone face
            cone co 30 0

            # trim the cone to (u,v)->[0, 2pi][0, 1]
            trim co co 0 2*pi 0 1

            # make the topo face
            mkface co co

            # extract pcurves
            pcurve co

            # display pcurves in 2d viewer
            av2d
            2dfit
            fit

            # display face in 3d viewer
            vdisplay co

            生成結(jié)果如下圖所示:

            wps_clip_image-29814

            Figure 2.8 Cone PCurves

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

            wps_clip_image-1397

            Figure 2.9 Cone Face in 3D viewer

            3.4 Sphere PCurve

            OpenCASCADE中球面的參數(shù)方程為:

            wps_clip_image-5770

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

            # 4. view the pcurves of a sphere face
            sphere s 1

            # make the topo face
            mkface s s 

            # extract pcurves
            pcurve s

            # display pcurves in 2d viewer
            av2d
            2dfit
            fit

            # display sphere face in 3d viewer
            vdisplay s

            生成結(jié)果如下圖所示:

            wps_clip_image-16324

            Figure 2.10 Sphere PCurves

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

            wps_clip_image-29852

            Figure 2.11 Sphere in 3d viewer

            3.5 Torus PCurve

            OpenCASCADE中圓環(huán)面的參數(shù)方程為:

            wps_clip_image-12978

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


            # 5. view the pcurves of a torus face
            torus t 20 5

            # make the topo face
            mkface t t

            # extract pcurves
            pcurve t

            # display pcurves in 2d viewer
            av2d
            2dfit
            fit
            # display torus in 3d viewer
            vdisplay t

            生成結(jié)果如下圖所示:

            wps_clip_image-22530

            Figuer 2.12 Torus PCurves

            由上圖根據(jù)pcurve的著色規(guī)則可知,圓環(huán)面的pcurves也是按逆時針順序閉合的。其在三維中的顯示結(jié)果如下圖所示:

            wps_clip_image-10501

            Figure 2.13 Torus in 3d viewer

            3.PCurve of a Face With Holes

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

            wps_clip_image-29949

            Figure 3.1 Parametric Trimming Curves

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

            # test face with one hole
            plane p
            trim p p 
            -10 10 -10 10
            mkface p p
            pcylinder c 
            1 2

            bop p c
            bopcut s

            vdisplay s

            explode s F
            pcurve s_1

            av2d
            2dfit
            fit

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

            wps_clip_image-8553

            Figure 3.2 Face with a Hole

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

            wps_clip_image-26044

            Figure 3.3 PCurve of a Face with one hole

            由上圖3.3可知,pcurve的規(guī)則與OpenGL中的裁剪曲線一致??椎膒curve為藍色,即為逆時針的反向:順時針。當(dāng)一個面上生成多個孔時,是否仍然滿足上述規(guī)則呢?下面使用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
            bopcut s

            bop s c2
            bopcut s

            explode s F
            pcurve s_1

            av2d
            2dfit
            fit

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

            wps_clip_image-13810

            Figure 3.4 A sphere face with 4 holes

            遍歷boolean operation生成孔后的形狀的面,可看到只生成了一個面。將這個面的pcurve顯示出來如下圖所示:

            wps_clip_image-16372

            Figure 3.5 PCurves for a sphere with 4 holes

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

            plane p
            trim p p 
            -10 10 -10 10
            mkface p p

            ptorus t 
            5 1

            bop p t
            bopcut s

            vdisplay s

            explode s F
            pcurve s_1
            pcurve s_2

            av2d
            2dfit
            fit

            生成結(jié)果如下圖所示:

            wps_clip_image-31602

            Figure 3.6 A Plane cut a Torus

            wps_clip_image-8216

            Figure 3.7 PCurves for the faces

            由上圖可知,當(dāng)一個平面去掉一個圓環(huán)面后,生成了兩個面,與有些幾何內(nèi)核的用鏈表來將結(jié)果表示成一個面不同,OpenCASCADE中將結(jié)果生成了兩個面。其pcurves的朝向也與OpenGL中的裁剪曲線的朝向一致。

            4.Conclusion

            綜上所述,曲面上的曲線pcurve的概念是一個非常重要的概念,理解pcurve對造型及可視化有著重要意義。本文結(jié)合OpenGL中裁剪曲線的規(guī)則及OpenCASCADE的Draw Test Harness中顯示拓樸面pcurve的命令,來對基本曲面及裁剪曲面的pcurve的朝向進行檢驗。掌握了這些規(guī)則,可方便對自己構(gòu)造拓樸面的正確性進行檢驗。

            5. Acknowledge

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

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

            6. References

            1. Shing Liu. PCurve - Curve on Surface. 

            http://www.cnblogs.com/opencascade/p/3601859.html

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

            http://www.cnblogs.com/opencascade/p/3604052.html

            3. Topology and Geometry in OpenCASCADE-Face.

            http://www.cnblogs.com/opencascade/p/3605729.html

            4. Shing Liu. Mesh Algorithm in OpenCASCADE.  http://www.cnblogs.com/opencascade/p/3648532.html

            5. Shing Liu. Delaunay Triangulation in OpenCASCADE. 

            http://m.shnenglu.com/eryar/archive/2013/05/26/200605.aspx

            6. Shing Liu. Triangle-Delaunay Triangulator. 

            http://www.cnblogs.com/opencascade/p/3632705.html

            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

            Feedback

            # re: OpenCASCADE PCurve of Topological Face  回復(fù)  更多評論   

            2015-11-08 23:13 by 佚名
            博主您好!
            一直喜歡讀您的博文,受益匪淺,現(xiàn)在碰到個問題想請教,就是兩個面的共享邊問題,面是通過edge生成的,比如三條edge邊a、b、c生成一個面,a、d、e生成另外一個面,應(yīng)該說它們有共享邊a,可是實際上explore兩個面發(fā)現(xiàn)它們沒有共享邊,在它們交界處是重合的兩條邊,這兩條邊既不isequal也不issame,不知道是何原因,怎么才能保障共邊,請指教,謝謝。

            # re: OpenCASCADE PCurve of Topological Face  回復(fù)  更多評論   

            2015-11-09 19:04 by eryar
            @佚名
            可以把代碼貼上來看看不?
            青青草国产精品久久| 狠狠综合久久AV一区二区三区| 婷婷久久综合九色综合98| 国产成人精品综合久久久| 天天综合久久一二三区| 亚洲午夜久久久久久噜噜噜| 久久国产精品成人片免费| 精品国产热久久久福利| 2020久久精品亚洲热综合一本| 国产精品禁18久久久夂久| 亚洲国产成人精品无码久久久久久综合| 亚洲乱码中文字幕久久孕妇黑人 | 日韩AV毛片精品久久久| 久久久久亚洲AV无码网站| 久久婷婷五月综合97色直播| 久久久久久人妻无码| 欧美性大战久久久久久| 国产精品久久影院| 色偷偷偷久久伊人大杳蕉| 开心久久婷婷综合中文字幕| 国产精品久久久久久福利69堂| 久久精品国产男包| 无码乱码观看精品久久| 中文精品久久久久国产网址| 人妻无码αv中文字幕久久| 久久se这里只有精品| 久久久精品午夜免费不卡| 精品综合久久久久久888蜜芽| 久久亚洲AV成人无码软件| 亚洲国产精品无码久久久久久曰| 日本精品久久久中文字幕| 潮喷大喷水系列无码久久精品| 无码人妻久久一区二区三区蜜桃| 日韩精品久久久久久久电影| 久久精品成人| 久久一区二区三区免费| 久久精品免费网站网| 久久久久一本毛久久久| 久久精品国产WWW456C0M| 99久久精品九九亚洲精品| 99久久精品免费观看国产|