• <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

            BRep Shapes Based on Tessellated Geometry

            eryar@163.com

            Key Words. BRep Shape, Tessellated Geometry, Mesh, STL

            1. Introduction

            OCCTTopoDS允許定義只包含顯示數(shù)據(jù)的BRep體,如只包含邊的顯示數(shù)據(jù):多段線;面的顯示數(shù)據(jù):網(wǎng)格,而不包含幾何曲線和曲面。只包含顯示數(shù)據(jù)的BRep體有時(shí)候很有用,如只需要顯示一下而不對(duì)其做任何修改。但是OCC7.3.0版本之前是不支持這些顯示數(shù)據(jù)的。這里說的不支持的意思是不支持顯示數(shù)據(jù)的功能,如不能顯示只包含顯示數(shù)據(jù)的BRep體等等。

            OCC7.3.0版本之后陸續(xù)想添加對(duì)只包含顯示數(shù)據(jù)的BRep的支持,包括如下功能:

            計(jì)算包圍盒;

            計(jì)算網(wǎng)格面積;

            計(jì)算兩個(gè)BRep之間的距離;

            計(jì)算HLR(隱藏線消除);

            相關(guān)的內(nèi)容在其官網(wǎng)上,網(wǎng)址: https://tracker.dev.opencascade.org/view.php?id=28125

             

            2. Display Mesh

            OCC中支持的網(wǎng)格文件只有STL文件,在Draw Test Harness中提供了讀取STL文件的命令readstl,命令參數(shù)如下圖所示:

             

            Figure 1. Draw readstl command

            第一個(gè)參數(shù)shape是讀取STL生成的BRep名稱;

            第二個(gè)參數(shù)fileSTL文件名;

            第三個(gè)參數(shù)triangulation是可選參數(shù),如果輸入triangulation,則采用新的方式即直接生成網(wǎng)格;否則采用原來的方式,即將網(wǎng)格的每個(gè)三角形生成一個(gè)TopoDS_Face

             

            下面將這些命令寫在一個(gè)Tcl腳本文件中,把OCC數(shù)據(jù)data文件夾中的STL文件進(jìn)行顯示, 

            pload ALL
            readstl s [pwd]/data/stl/bearing.stl triangulation
            vdisplay s

            下面對(duì)上述腳本進(jìn)行解釋。

            第一行pload ALL是加載OCC所有的腳本命令;

            第二行使用readstl命令,且設(shè)置成triangulation讀取模式;

            第三行是在三維視圖窗口中顯示讀取的STL模型;

             

            直接在Draw Test Harness中輸入上述命令也可以,反正只有幾行。或者把這幾行命令保存成一個(gè)文件,再使用source命令來加載也可以。下面是在3D Viewer中顯示讀取的STL模型:

             

            Figure 2. Shaded STL model in 3D Viewer

            使用快捷鍵S/W來切換顯示模式,S表示Shaded,是著色渲染模式;W表示Wireframe,是線框顯示模式。下圖為切換到線框顯示模式的效果:

             

            Figure 3. Wireframe STL model in 3D Viewer

            從上圖可知,采用直接顯示網(wǎng)格的方式顯示的STL模型在線框模式的時(shí)候,效果不是很理想。一般的三維軟件對(duì)于這種網(wǎng)格的線框模式就是直接顯示每個(gè)三角形。如下圖所示:

             

            Figure 4. Wireframe of the STL model

            所以,如果有需要在OCC中顯示STL模型的線框,則需要自己再作處理,可以選擇一些邊加到BRep體中,不一定像上圖所示那樣顯示每一個(gè)網(wǎng)格三角形。

            3. Source Code

            根據(jù)原來介紹的通過Draw的命令查找其源實(shí)現(xiàn)的方法,找到readstl命令的源碼在文件XSDRAWSTLVRML.cxx中,源碼如下所示:

            //=============================================================================
            //function : readstl
            //purpose  : Reads stl file
            //=============================================================================
            static Standard_Integer readstl(Draw_Interpretor& theDI,
                                            Standard_Integer theArgc,
                                            const char** theArgv)
            {
              if (theArgc < 3)
              {
                theDI << "wrong number of parameters" << "\n";
                return 1;
              }
              else
              {
                if (theArgc == 4 &&
                    strcmp("triangulation", theArgv[3]) == 0)
                {
                  // Read STL file to the triangulation.
                  Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (theDI, 1);
                  Handle(Poly_Triangulation) aTriangulation = RWStl::ReadFile (theArgv[2], aProgress);
                  TopoDS_Face aFace;
                  BRep_Builder aB;
                  aB.MakeFace(aFace);
                  aB.UpdateFace(aFace, aTriangulation);
                  DBRep::Set(theArgv[1], aFace);
                }
                else
                {
                  TopoDS_Shape aShape;
                  Standard_DISABLE_DEPRECATION_WARNINGS
                  StlAPI::Read(aShape, theArgv[2]);
                  Standard_ENABLE_DEPRECATION_WARNINGS
                  DBRep::Set(theArgv[1], aShape);
                }
              }
              return 0;
            }

            當(dāng)使用選項(xiàng)triangulation時(shí),采用新的讀取STL函數(shù)得到網(wǎng)格數(shù)據(jù),再用BRep體的底層函數(shù)生成一個(gè)TopoDS_Face,直接將網(wǎng)格數(shù)據(jù)aTriangulation設(shè)置在Face中。

            當(dāng)不使用選項(xiàng)triangulation時(shí),還是采用老的方式來讀取STL模型。老的方式讀取速度慢,且將網(wǎng)格中每個(gè)三角形生成一個(gè)TopoDS_Face,占用大量內(nèi)存,是效率不高的方式,所以標(biāo)記為作廢狀態(tài)。開發(fā)者應(yīng)盡量采用新的方式。

              

            4. Conclusion

            OCC7.3版本開始支持只包含顯示數(shù)據(jù)的BRep體,這樣只包含顯示數(shù)據(jù)的BRep體可以直接顯示,與原來的將網(wǎng)格數(shù)據(jù)中的每個(gè)三角形都生成TopoDS_Face的方式相比,將會(huì)大大提高顯示效率。

            因?yàn)榫W(wǎng)格數(shù)據(jù)中沒有包含線框的信息,所以直接顯示的網(wǎng)格模型切換到線框模式的效果不好,有時(shí)甚至不顯示線框。

             

            Figure 5 Propeller STL model

            上圖所示的STL螺旋槳模型切換到線線框模式后,就沒有了。這時(shí)OCC的選擇功能也不能使用,即選不中這個(gè)模型了。

            如果要顯示網(wǎng)格模型的線框,需要自己根據(jù)實(shí)際情況添加一些Edge以達(dá)到理想效果。

             

             

            5. References

            1. https://tracker.dev.opencascade.org/view.php?id=28125

              


            為了方便大家在移動(dòng)端也能看到我的博文和討論交流,現(xiàn)已注冊(cè)微信公眾號(hào),歡迎大家掃描下方二維碼關(guān)注。
            Shing Liu(eryar@163.com)

             


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲欧美国产日韩综合久久| 99久久精品影院老鸭窝| 一本久久免费视频| 欧美日韩中文字幕久久久不卡 | 久久久久久夜精品精品免费啦 | 久久午夜无码鲁丝片秋霞| 亚洲人成精品久久久久| 国产成人精品久久一区二区三区 | 狼狼综合久久久久综合网| 996久久国产精品线观看| 欧洲国产伦久久久久久久| 国产偷久久久精品专区| 国产精品美女久久久久av爽| 久久精品国产男包| 国产成人无码精品久久久久免费 | 久久久九九有精品国产| 国产亚洲精久久久久久无码77777| 久久国产精品久久| 成人久久免费网站| 亚洲精品无码久久不卡| 国产99久久九九精品无码| 亚洲中文字幕无码久久精品1| 久久高清一级毛片| 99久久精品无码一区二区毛片| 色妞色综合久久夜夜| 久久精品三级视频| 国产农村妇女毛片精品久久| 97久久精品午夜一区二区| 久久精品水蜜桃av综合天堂| 亚洲AV乱码久久精品蜜桃| 久久WWW免费人成一看片| 欧美国产精品久久高清| 久久99精品久久久久久野外| 久久国产成人| 久久久久久国产a免费观看黄色大片| 亚洲午夜久久影院| 国产精品久久久久久久午夜片| 成人免费网站久久久| 老司机国内精品久久久久| 91精品国产高清久久久久久91| 99久久精品费精品国产 |