• <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 Primitives BRep - Box

            Posted on 2014-03-19 19:00 eryar 閱讀(3592) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCascade Primitives BRep - Box

            eryar@163.com

            Abstract. BRep is short for Boundary Representation. Boundary Representation gives a complete description of an object by associating topological and geometric information for solid modeling. In this case, objects are described by their boundaries. There are two types of information in BRep: Topological information and Geometric information. This paper is concerned with the Box BRep in OpenCascade, and also show how to use Tcl script to dump box BRep info.

            Key words. OpenCascade, BRep, Boundary Representation, Box, Winged-Edge Structure

            1. Introduction

            邊界表示法(BRep: Boundary Representation)通過拓樸(Topology)和幾何(Geometry)給出了一個物體完整的描述,即用邊界來表示物體。

            在OpenCascade中的拓樸實體有以下幾種:

            l Vertex: a zero-dimensional shape corresponding to a point in geometry;

            l Edge: a shape corresponding to a curve, and bound by a vertex at each extremity;

            l Wire: a sequence of edges connected by their vertices;

            l Face: part of a plane(in 2D geometry) or a surface(in 3D geometry) bounded by a closed wire;

            l Shell: a collection of faces connected by some of the edges their wire boundaries;

            l Solid: part of 3D space bound by a shell;

            l Compound solid: a collection of solids.

            wps_clip_image-29668

            Figure 1.1 Topological Entities in OpenCascade

            OpenCascade中的拓樸實體如上圖所示,其中Compound可以包含很多Solid;Solid由Shell包圍而成;Shell由相連的Face組成;Wire由相連的Edge組成;Edge對應一條曲線,且曲線的端點處由Vertex組成;Vertex對應空間中一個點。OpenCascade的拓樸結構的類層次關系如下圖所示:

            wps_clip_image-26079

            Figure 1.2 Topological Shape Hierarchy of OpenCascade

            OpenCascade的BRep表示中幾何曲線曲面是參數化表示的,即曲線上的點與一個參數u有關,曲面上的點與兩個參數u,v來有關。因為是參數化表示的,所以曲線曲面是有向的(naturally orientated)。方向(Orientation)是重要的,對面而言方向是面上每個點處的法向。

            wps_clip_image-21272

            Figure 1.3 Orientation of Faces

            使用參數表示的曲線曲面還需要注意曲線曲面的有界性Bounded,奇異性Singularity(曲面上的奇點Singular Point),曲面上的曲線(PCurve: Curve on Surface)等概念。

            本文通過使用Tcl腳本將OpenCascade中的基本形狀長方體Box的邊界表示BRep數據導出到文件,繼而方便分析Box在OpenCascade中的邊界表示。

            2. Dump Box BRep Info by Tcl

            為了得到長方體的邊界表示數據,先要用類BRepPrimAPI_MakeBox來生成一個TopoDS_Shape,再使用BRepTools::Dump()可以將這個TopoDS_Shape的信息以便于理解的方式輸出。如果用C++來編程,只有這兩句,但是為了編譯鏈接成功,需要包含相關的頭文件及引用相關的庫,需要編譯工具來編譯鏈接,還是比較麻煩的。本文使用Tcl腳本來輸出,體驗一下在OpenCascade中使用Tcl腳本編程的便利。

            在Draw Test Harness中輸入以下三行Tcl命令,即可以將Box的BRep信息輸出到屏幕:

            wps_clip_image-17115

            Figure 2.1 Dump Box BRep info in Draw Test Harness

            考慮到輸出內容過多,在命令窗口查看不便,有些信息被覆蓋,于是將這些信息導出到文件,Tcl代碼如下所示:

             

            #
            #    Copyright (c) 
            2014 eryar All Rights Reserved.
            #
            #           File : box.tcl
            #         Author : eryar@
            163.com
            #           Date : 
            2014-03-17 19:00
            #        Version : 
            1.0v
            #
            #    Description : Dump OpenCascade primitive box topology info to file.
            #
            #      Key Words : OpenCascade, BRep, Tcl, Box
            #                  
            #

            # Load Modeling algorithms.
            pload MODELING

            # Make the box.
            box theBox 
            1.0 2.0 3.0
            set boxInfo [dump theBox]

            # Save box BRep info to file.
            if [catch {open d:/box.txt w+} theFile] {
                puts 
            "Cannot open d:/box.txt for writing: $theFile"
            else {
                puts $theFile $boxInfo
                flush $theFile
                close $theFile
            }

            puts 
            "Dump Info Finished!"

            將上述內容保存到文件box.tcl,并在Draw Test Harness中輸入如下命令:

            wps_clip_image-2683

            Figure 2.2 Run a Tcl File in Draw Test Harness

            執行成功后會在D盤中生成一個box.txt的文件,文件部分內容如下所示:

            wps_clip_image-30549

            Figure 2.3 Box BRep Info Generated by Tcl Script

            為了方便讀者測試及本文中分析的Box數據的準確性,box.tcl和box.txt都可通過文章后面的鏈接下載。

            3. Box BRep in OpenCascade

            翼邊結構(Winged-Edge Structure)及其邊的表格方式(Edge Table)可以清晰地表達出形狀的拓樸關系,表中內容有:

            l 邊的名稱,即邊的編號Edge Name;

            l 邊的起止頂點Start vertex and end vertex;

            l 相連的兩個面 Left face and right face;

            l 遍歷左面時訪問邊的順序The predecessor and successor edges when traversing its left face;

            l 遍歷右面時訪問邊的順序The predecessor and successor edges when traversing its right face;

            如下圖所示為Edge Table表示的翼邊結構:

            wps_clip_image-3145

            Figure 3.1 Edge Table of Winged-Edge Structure

            從上圖可知,給出一個邊a后,從表中可以清晰看出與邊a相連的頂點及面的信息。

            如下圖所示為一個Edge Table的示例:

            wps_clip_image-1751

            Figure 3.2 Complete Edge Table for Pyramid

            由上可知,給出翼邊結構表示中的一個邊,可以很方便得到與之相連的頂點和面的信息。

            但是OpenCascade中沒有使用翼邊結構來表示形狀,可以從圖1.2所示的類結構得出。因為每個形狀只包含子形狀的數據,不包含其父形狀的數據,所以在OpenCascade中不能反向訪問其父形狀(In OpenCascade, there is no back pointer from sub-shapes to ancestor shapes.),所以若想得到與給定頂點或邊相連的面或環等信息,必須使用這個工具:

            TopExp::MapShapesAndAncestors()

            如下圖所示使用上述工具得到與指定邊相連的所有面的信息:

            wps_clip_image-18209

            Figure 3.3 Get Ancestor Shapes in OpenCascade

            根據前面使用Tcl腳本生成的Box,尺寸分別為1.0,2.0,3.0:

            wps_clip_image-8661

            Figure 3.4 The Box generated by Tcl Script

            為了正確顯示出Box,每個面的法向必須與上圖中的箭頭方向一致。下面通過box.txt中的拓樸信息的編號,從vertex開始來組裝成一個Solid的形狀。對應頂點的編號及其在空間中的坐標如下圖所示:

            wps_clip_image-31918

            Figure 3.5 Vertex of the Box BRep

            wps_clip_image-12851

            Figure 3.6 Edges of the Box BRep

            上圖中根據邊中的頂點的方向,標示出邊的方向:從標號為+正的頂點到標號為-負的頂點。

            wps_clip_image-27297

            wps_clip_image-29905

            Figure 3.7 Wire #4 of Box BRep

            由圖可知,由于Wire #4是由邊E30,E9,E20,E13組成,由于30和9號邊前有負號,所以需要反向,方向反向的邊用紅色箭頭標示。其它Wire的處理與此類似。通過上面左右兩幅圖的對比,可以清楚知道哪些Edge在組成Wire時反向了。

            wps_clip_image-16517

            Figure 3.8 Faces and Shells of Box BRep

            由上圖可知,每個Face由一個Wire組成。注意到由Face組成Shell時,Face前面有方向性。如Face 5#前面有負號,意思是面的法向與Wire的方向相反,其他類似。

            最后的Solid由Shell組成。這樣Box的拓樸數據就形成了。其中Face, Edge, Vertex中包含了幾何數據。Face的參數表示的幾何數據位于surfaces部分,如下圖所示:

            wps_clip_image-20622

            Figure 3.9 Parametric Surfaces of the Box

            Edge中包含了多種曲線數據,在Box的Edge中就包含兩種曲線數據,一種是三維曲線;一種是曲面上的曲線。如下圖所示:

            wps_clip_image-28981

            Figure 3.10 Curve info of the Edge in Box 

            其中Curve3D對應的就是參數化的三維曲線,這個很好理解。PCurve為曲面上的曲線。下面以Edge#9為例,來說明邊中的幾何數據。三維曲線#12是原點為(0,2,3)方向為X方向的直線,在參數區間[0,1]的端點處,直線對應的兩個點為(0,2,3)和(1,2,3),分別對應#31Vertex和#21Vertex。所以Vertex前面的-負號表示Edge中曲線終點,+正號表示Edge中曲線的起點。

            PCurve為#4號平面上的#23號參數曲線,由下圖可知#4號曲面對應的Face為#7,對應的Wire為#8:

            wps_clip_image-24170

            Figure 3.11 Surface of Face

            wps_clip_image-9467

            根據#23號二維參數曲線計算得出曲面上的U,V分別為(3, 0)和(3, 1),將得到U,V代入#4曲面中得出對應的曲面上的點,計算過程如下所示:

            wps_clip_image-29612

            從中可以看出,PCurve表示的曲線與三維曲線#12相同,不過其中還保存了曲面的信息。

            4. Conclusion

            本文通過使用Tcl在OpenCascade中生成Box的邊界表示信息,通過對數據的分析,得出Box在OpenCascade中的邊界表示方式。并通過與翼邊結構的對比,說明OpenCascade中的拓樸結構不是翼邊結構。通過分析邊界表示中的幾何數據,來理解邊界表示中幾何數據的應用。

            若對文中內容有任何意見、建議都可以與我取得聯系,郵箱:eryar@163.com,歡迎討論、交流、指導。

            5. References

            1. OpenCascade, Test Harness User’s Guide 2013

            2. OpenCascade, BRep Format Description White Paper, 2013

            3. John K. Ousterhout, Tcl and Tk Toolkit, 1993

            PDF Version and Tcl Script: OpenCascade Primitives BRep-Box

            久久99精品久久久久久hb无码| 漂亮人妻被中出中文字幕久久| 久久久久久精品免费看SSS| 亚洲嫩草影院久久精品| 99精品国产99久久久久久97| 午夜精品久久久久久影视777| 麻豆精品久久久一区二区| 久久久久亚洲av无码专区 | 精品一二三区久久aaa片| 久久久久九国产精品| 久久精品国产精品亚洲艾草网美妙| 嫩草影院久久国产精品| 久久99热狠狠色精品一区| 国产韩国精品一区二区三区久久| 91精品国产综合久久婷婷| 国产人久久人人人人爽| 国产产无码乱码精品久久鸭| 久久精品国产亚洲av麻豆小说 | 久久久青草久久久青草| 国产综合久久久久| 国产一级做a爰片久久毛片| 久久精品一区二区国产| 2020最新久久久视精品爱| 久久免费观看视频| 久久久久久伊人高潮影院| 久久综合给久久狠狠97色 | 97精品伊人久久久大香线蕉| 精品久久久久久国产牛牛app| 久久男人AV资源网站| 久久久久久曰本AV免费免费| 久久精品中文字幕无码绿巨人| 国产美女久久久| 久久久WWW成人免费精品| 亚洲国产视频久久| 国内精品久久久久久99蜜桃| 国产精品狼人久久久久影院| 四虎影视久久久免费观看| 亚洲色婷婷综合久久| 91久久福利国产成人精品| 色青青草原桃花久久综合| 国内精品伊人久久久久av一坑|