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

            Posted on 2016-08-16 23:11 eryar 閱讀(3106) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCASCADE BRep Projection

            eryar@163.com

            一網(wǎng)友發(fā)郵件問(wèn)我下圖所示的效果如何在OpenCASCADE中實(shí)現(xiàn),我的想法是先構(gòu)造出螺旋線,再將螺旋線投影到面上。

            wps1373.tmp

            為了驗(yàn)證我的想法,結(jié)合原來(lái)螺旋線的造型算法,來(lái)測(cè)試下這種效果的實(shí)現(xiàn)。依然采用Tcl腳本在Draw Test Harness中試驗(yàn)。個(gè)人覺(jué)得高效使用OpenCASCADE的方法應(yīng)該也是先用Tcl腳本來(lái)驗(yàn)證一些想法后,再根據(jù)使用到的命令找到OpenCASCADE中DRAW的命令實(shí)現(xiàn),最后再可以根據(jù)DRAW中的實(shí)現(xiàn),翻譯成C++代碼了。

            使用下列Tcl腳本生成效果和上圖就很類似了,Tcl腳本代碼如下所示:

            #
            # wrap a curve to a surface.
            # Shing Liu(eryar@163.com)
            # 2016-08-16 22:50


            pload ALL

            cone aCone 18*pi 2
            trim aCone aCone 0 2*pi 0 2*pi

            line aLine2d 0 0 2 1
            trim aSegment aLine2d 0 2*pi

            mkedge aHelixEdge aSegment aCone 0 6*pi

            # there is no curve 3d in the pcurve edge.
            mkedgecurve aHelixEdge 0.001

            ttranslate aHelixEdge 10 20 10

            bsplinesurf aSurface \
            5 5 0 6 1 1 4 1 5 1 8 6 \
            5 5 0 6 2 1 3 1 6 1 7 6 \
            0  0  0  1   2  0  0  1   5  0 -1  1   10  0  5  1   12  0  1  1   15  0 -3  1   16  0 -3  1   19  0 -4 1   24  0  0  1 \
            0 10  2  1   3 10  0  1   8 10  5  1   10 10  3  1   12 10  2  1   15 10  0  1   20 10  5  1   21 10  3 1   24 10  0  1 \
            0 20 10  1   4 20  4  1   7 20  4  1   10 20 20  1   12 20 10  1   16 20  4  1   19 20  4  1   20 20 10 1   24 20  0  1 \
            0 30  0  1   2 30  0  1   8 30  0  1   10 30  0  1   12 30  0  1   14 30  0  1   20 30  0  1   22 30  0 1   24 30  0  1 \
            0 40 -1  1   4 40  5  1   9 40  1  1   10 40  5  1   12 40 -1  1   16 40  5  1   21 40  1  1   22 40  5 1   24 40  0  1 \
            0 50  5  1   4 50 10  1   6 50 10  1   10 50  5  1   12 50  5  1   16 50 10  1   18 50 10  1   20 50  5 1   24 50  0  1 \
            0 60  4  1   3 60 -3  1   7 60 -4  1   10 60  4  1   12 60  4  1   15 60 -3  1   19 60 -4  1   20 60  4 1   24 60  0  1 \
            0 70 -5  1   3 70  0  1   5 70  0  1   10 70 -3  1   12 70 -5  1   15 70  0  1   17 70  0  1   20 70 -3 1   24 70  0  1 \
            0 80  7  1   3 80  1  1   7 80  3  1   10 80  0  1   12 80  7  1   15 80  1  1   19 80  3  1   21 80  0 1   24 80  0  1

            mkface aFace aSurface

            # use BRepProj_Projection
            prj aResult aHelixEdge aFace 0 0 1

            vdisplay aHelixEdge aFace aResult_1

            wps13A2.tmp

            wps13B3.tmp

            上述代碼主要使用了Draw 命令prj,找到prj的實(shí)現(xiàn)代碼如下所示:

            static Standard_Integer prj(Draw_Interpretor& di, Standard_Integer n, const char** a)

              char newname[255];
              if (n < 7) return 1;
              TopoDS_Shape InpLine =  DBRep::Get(a[2]);
              TopoDS_Shape InpShape = DBRep::Get(a[3]);
              Standard_Real DX=Draw::Atof(a[4]),DY=Draw::Atof(a[5]),DZ=Draw::Atof(a[6]);
              gp_Dir TD(DX,DY,DZ);
              BRepProj_Projection Prj(InpLine,InpShape,TD);
              Standard_Integer i = 1;
              char* temp = newname;


              if (Prj.IsDone()) {
                while (Prj.More()) {
                  Sprintf(newname,"%s_%d",a[1],i);
                  DBRep::Set(temp,Prj.Current());
                  //cout<<newname<<" ";
                  di<<newname<<" ";
                  i++;
                  Prj.Next();
                } 
              }

              //cout<<endl;
              di<<"\n";
              return 0;
            }

            如上述代碼所示,主要使用了類BRepProj_Projection,此類的主要功能是將邊或環(huán)向其他模型上進(jìn)行圓錐和圓柱投影。

            通過(guò)將邊或環(huán)向其他模型投影的方式即可得到開(kāi)頭圖片所示的效果。

             

            久久涩综合| 久久亚洲欧美国产精品| 久久亚洲AV成人出白浆无码国产| 精品久久久久一区二区三区| 97久久国产亚洲精品超碰热 | 久久91亚洲人成电影网站| 国产精品美女久久福利网站| 久久久久亚洲AV综合波多野结衣 | 狠狠久久亚洲欧美专区| 久久精品国产亚洲AV无码偷窥| 亚洲欧美伊人久久综合一区二区| 久久亚洲AV成人无码| 久久精品国产AV一区二区三区| 无码久久精品国产亚洲Av影片 | 久久综合亚洲色HEZYO社区| 欧美久久一级内射wwwwww.| 人妻精品久久久久中文字幕| 日韩电影久久久被窝网| 久久久久亚洲av综合波多野结衣| 久久久久女人精品毛片| 伊人久久大香线焦综合四虎| 国产农村妇女毛片精品久久| 无码人妻久久一区二区三区蜜桃| 亚洲va久久久噜噜噜久久狠狠| 久久国产精品久久久| 久久免费视频6| 久久久噜噜噜www成人网| 久久综合综合久久狠狠狠97色88| 夜夜亚洲天天久久| 日本五月天婷久久网站| 久久精品国产亚洲AV无码偷窥| 久久久国产一区二区三区| 久久久久国产精品人妻| 亚洲国产天堂久久综合网站 | 欧美一级久久久久久久大| 欧美国产成人久久精品| 久久婷婷国产麻豆91天堂| 国内精品久久久久影院老司| 国产精品久久永久免费| 麻豆av久久av盛宴av| 99久久www免费人成精品|