青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

OpenCASCADE Make Face With Holes

Posted on 2018-10-14 15:40 eryar 閱讀(2191) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

OpenCASCADE Make Face With Holes

eryar@163.com

OpenCASCADE提供了構造Face的類BRepBuilderAPI_MakeFace,使用這個類可以構造出帶孔的面。如下圖所示:

wps_clip_image-21779

當然,要得到上圖所示的結果,還可以使用Boolean操作,用一個面去Cut幾個圓柱。當使用布爾操作就會涉及到一些復雜算法,如求交,重構Topo體等,比較耗時。既然可以直接在生成面的時候挖孔,這個不涉及復雜算法,速度、穩定性都比使用布爾操作要好。本文主要來介紹如何使用BRepBuilderAPI_MakeFace來生成帶孔的面,及其注意事項。直接上代碼:

#include <gp_Circ.hxx>
#include <gp_Pln.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepTools.hxx>
#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")
#pragma comment(lib, "TKG2d.lib")
#pragma comment(lib, "TKG3d.lib")
#pragma comment(lib, "TKGeomBase.lib")
#pragma comment(lib, "TKGeomAlgo.lib")
#pragma comment(lib, "TKBRep.lib")
#pragma comment(lib, "TKTopAlgo.lib")
void makeFaceTest()
{
    gp_Pln aPlane;
    gp_Circ aCircle1(gp::XOY(), 1.0);
    gp_Circ aCircle2(gp::XOY(), 1.0);
    gp_Circ aCircle3(gp::XOY(), 1.0);
    aCircle1.SetLocation(gp_Pnt(3.0, 3.0, 0.0));
    aCircle2.SetLocation(gp_Pnt(7.0, 3.0, 0.0));
    aCircle3.SetLocation(gp_Pnt(3.0, 7.0, 0.0));
    BRepBuilderAPI_MakeEdge anEdgeMaker1(aCircle1);
    BRepBuilderAPI_MakeEdge anEdgeMaker2(aCircle2);
    BRepBuilderAPI_MakeEdge anEdgeMaker3(aCircle3);
    BRepBuilderAPI_MakeWire aWireMaker1(anEdgeMaker1.Edge());
    BRepBuilderAPI_MakeWire aWireMaker2(anEdgeMaker2.Edge());
    BRepBuilderAPI_MakeWire aWireMaker3(anEdgeMaker3.Edge());
    BRepBuilderAPI_MakeFace aFaceMaker(aPlane, 0.0, 10.0, 0.0, 10.0);
    if (aWireMaker1.IsDone())
    {
        aFaceMaker.Add(aWireMaker1.Wire());
    }
    if (aWireMaker2.IsDone())
    {
        aFaceMaker.Add(aWireMaker2.Wire());
    }
    if (aWireMaker3.IsDone())
    {
        aFaceMaker.Add(aWireMaker3.Wire());
    }
    if (aFaceMaker.IsDone())
    {
        BRepTools::Write(aFaceMaker.Shape(), "d:/face.brep");
    }
}
int main(int argc, char* argv[])
{
    makeFaceTest();
    return 0;
}

上面代碼就是在一個平面上開三個孔,最后在D盤生成face.brep文件。在Draw Test Harness中加載并顯示這個文件得到:

wps_clip_image-4565

當切換到線框顯示模式時,和預期效果一致。但是當切換到著色顯示模式時,發現生成的面和預期的效果剛好相反。這是什么原因呢?

在Draw Test Harness中輸入命令pcruve來檢查,如下圖所示:

wps_clip_image-8080

根據pcurve命令的提示得知,藍色的方向應該反向,紅色的為外環。所以得知,內環孔的方向反了。修改代碼,直接將Wire的方向Reverse。修改后的代碼如下:

#include <gp_Circ.hxx>
#include <gp_Pln.hxx>
#include <TopoDS_Wire.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepTools.hxx>
#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")
#pragma comment(lib, "TKG2d.lib")
#pragma comment(lib, "TKG3d.lib")
#pragma comment(lib, "TKGeomBase.lib")
#pragma comment(lib, "TKGeomAlgo.lib")
#pragma comment(lib, "TKBRep.lib")
#pragma comment(lib, "TKTopAlgo.lib")
void makeFaceTest()
{
    gp_Pln aPlane;
    gp_Circ aCircle1(gp::XOY(), 1.0);
    gp_Circ aCircle2(gp::XOY(), 1.0);
    gp_Circ aCircle3(gp::XOY(), 1.0);
    aCircle1.SetLocation(gp_Pnt(3.0, 3.0, 0.0));
    aCircle2.SetLocation(gp_Pnt(7.0, 3.0, 0.0));
    aCircle3.SetLocation(gp_Pnt(3.0, 7.0, 0.0));
    BRepBuilderAPI_MakeEdge anEdgeMaker1(aCircle1);
    BRepBuilderAPI_MakeEdge anEdgeMaker2(aCircle2);
    BRepBuilderAPI_MakeEdge anEdgeMaker3(aCircle3);
    BRepBuilderAPI_MakeWire aWireMaker1(anEdgeMaker1.Edge());
    BRepBuilderAPI_MakeWire aWireMaker2(anEdgeMaker2.Edge());
    BRepBuilderAPI_MakeWire aWireMaker3(anEdgeMaker3.Edge());
    BRepBuilderAPI_MakeFace aFaceMaker(aPlane, 0.0, 10.0, 0.0, 10.0);
    if (aWireMaker1.IsDone())
    {
        TopoDS_Wire aWire1 = aWireMaker1.Wire();
        aWire1.Reverse();
        aFaceMaker.Add(aWire1);
    }
    if (aWireMaker2.IsDone())
    {
        TopoDS_Wire aWire2 = aWireMaker2.Wire();
        aWire2.Reverse();
        aFaceMaker.Add(aWire2);
    }
    if (aWireMaker3.IsDone())
    {
        TopoDS_Wire aWire3 = aWireMaker3.Wire();
        aWire3.Reverse();
        aFaceMaker.Add(aWire3);
    }
    if (aFaceMaker.IsDone())
    {
        BRepTools::Write(aFaceMaker.Shape(), "d:/face.brep");
    }
}
int main(int argc, char* argv[])
{
    makeFaceTest();
    return 0;
}

重新加載新生成的face.brep并使用pcurve查看,得到如下圖所示的效果:

wps_clip_image-12231

從上圖可知,這時得到的為預期的效果。綜上所述,如果要直接使用BRepBuilderAPI_MakeFace來生成帶有孔的面,需要自己為外環和內環的方向負責,opencascade對此不作檢查。當面顯示不正確時,可以使用Draw Test Harness的pcurve命令來檢查。一個帶孔的面的pcurve的規則為:外環為逆時針方向;內環孔的方向為順時針方向。

基于直接生成的帶孔的面,還可以進一步使用放樣算法來造型,如拉伸,旋轉等,如下圖所示。這樣就可以避免使用布爾操作,提高造型算法的性能和穩定性。

wps_clip_image-665

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩一区二区免费高清| 欧美精品首页| 欧美mv日韩mv国产网站| 久久免费精品视频| 久久久久久久久一区二区| 欧美亚洲一级片| 久久精品首页| 欧美国产日韩视频| 亚洲激情中文1区| 亚洲精品在线视频观看| 一区二区欧美国产| 香蕉av777xxx色综合一区| 欧美在线视频免费观看| 久久午夜羞羞影院免费观看| 欧美mv日韩mv国产网站| 欧美日韩免费观看一区二区三区 | 亚洲一区二区三区视频播放| 亚洲一区二区三区四区在线观看| 亚洲欧美国产77777| 久久久精品2019中文字幕神马| 乱码第一页成人| 久久久av水蜜桃| 亚洲国产精品久久| 亚洲欧美日韩国产综合精品二区| 久久九九有精品国产23| 欧美日本在线| 国产真实久久| 亚洲摸下面视频| 蜜桃av综合| 中文欧美在线视频| 久久天天狠狠| 国产精品美女www爽爽爽| 国外视频精品毛片| 香蕉久久夜色精品国产| 亚洲观看高清完整版在线观看| 亚洲免费视频在线观看| 欧美一区二区三区在线视频| 乱人伦精品视频在线观看| 一个色综合导航| 久久中文在线| 国产日韩在线一区| 亚洲自拍偷拍视频| 亚洲国产第一页| 久久久久久亚洲精品中文字幕| 国产精品久久二区| 这里是久久伊人| 免费在线观看一区二区| 亚洲一区国产一区| 欧美日韩国产va另类| 国产一区二区高清| 午夜久久99| 中文在线不卡| 欧美久久精品午夜青青大伊人| 揄拍成人国产精品视频| 久久se精品一区二区| 亚洲婷婷国产精品电影人久久| 欧美日韩成人一区| 欧美成人国产| 久久躁狠狠躁夜夜爽| 激情成人亚洲| 久久五月婷婷丁香社区| 久久国产婷婷国产香蕉| 国产欧美一区二区三区在线看蜜臀 | 欧美一级成年大片在线观看| 一级日韩一区在线观看| 国产精品男女猛烈高潮激情| 亚洲欧美日韩视频二区| 亚洲午夜视频在线观看| 国产精品入口| 久久久久综合一区二区三区| 久久黄色网页| 亚洲高清免费在线| 欧美国产极速在线| 欧美人与性动交cc0o| 中文在线资源观看网站视频免费不卡| 91久久国产综合久久蜜月精品 | 在线观看成人一级片| 久久偷看各类wc女厕嘘嘘偷窃| 久久国产一二区| 亚洲国产精品t66y| 91久久线看在观草草青青| 欧美精品aa| 在线亚洲一区二区| 亚洲综合第一页| 亚洲成人在线观看视频| 亚洲成人在线视频网站| 欧美日韩成人在线观看| 欧美一区二区三区另类| 久久国产免费看| 亚洲精品日韩在线| 亚洲午夜av在线| 久久久久久**毛片大全| 在线成人av.com| 亚洲第一黄色| 99国产精品久久久久久久久久| 国产精品久久久久久久第一福利| 久久黄色小说| 欧美高清视频在线| 欧美在线亚洲综合一区| 欧美黑人在线播放| 欧美制服丝袜第一页| 欧美成人午夜| 久久精品99国产精品日本| 欧美成人精品一区二区| 午夜在线精品偷拍| 欧美黄色一级视频| 久久视频一区二区| 欧美黄色成人网| 久久久伊人欧美| 国产精品第十页| 欧美福利视频在线观看| 国产区二精品视| 亚洲毛片在线免费观看| 黄色亚洲在线| 一区二区三区免费在线观看| 亚洲国产欧美日韩另类综合| 午夜在线一区二区| 亚洲自拍三区| 欧美激情综合色综合啪啪| 久久免费视频网| 欧美国产先锋| 狠狠色狠狠色综合日日五| 亚洲无吗在线| 一区二区日韩精品| 欧美激情亚洲自拍| 欧美国产激情| 亚洲高清自拍| 久久久久久黄| 久久久精品国产免大香伊| 国产精品久久久久久久久久久久 | 亚洲欧美精品suv| 亚洲一品av免费观看| 欧美日韩国产在线观看| 亚洲国产精品成人综合| 在线亚洲免费视频| 欧美日韩国产一区二区三区地区 | 亚洲国产成人porn| 欧美伊人久久久久久久久影院 | 久久精品国产一区二区三区| 久久激情五月激情| 国产精品美女久久久久久2018| 亚洲人成艺术| 亚洲精品一区中文| 欧美大色视频| 亚洲久久一区二区| 中日韩高清电影网| 在线亚洲观看| 午夜一区在线| 国产欧美日韩一区二区三区在线| 午夜精品久久久久久久久| 久久精品国产77777蜜臀| 国产一区二区三区精品欧美日韩一区二区三区| 亚洲午夜免费福利视频| 欧美亚洲一区二区三区| 国产一区二区三区精品久久久 | 久久国产精品亚洲va麻豆| 久久久久久亚洲精品杨幂换脸| 国内免费精品永久在线视频| 久久久五月婷婷| 欧美激情视频在线播放| 99视频在线观看一区三区| 欧美日韩在线不卡| 亚洲欧美日韩国产一区二区| 国产精品久久久久7777婷婷| 亚洲欧美自拍偷拍| 欧美/亚洲一区| 一区二区三区四区五区在线| 国产精品女人网站| 久久综合福利| 一区二区高清在线| 久久人人九九| 99riav国产精品| 国产精品视频内| 麻豆久久婷婷| 亚洲专区免费| 亚洲国产精品久久人人爱蜜臀| 亚洲一区国产精品| 在线成人h网| 国产精品嫩草久久久久| 久久综合导航| 午夜精品久久久久久久久久久久久 | 免费日韩av| 亚洲一区国产| 亚洲国产日韩综合一区| 99国产精品视频免费观看一公开| 欧美一区二区三区久久精品| 亚洲国产欧洲综合997久久| 国产精品成人播放| 久久综合给合| 亚洲视频你懂的| 亚洲区免费影片| 开元免费观看欧美电视剧网站| 日韩午夜电影av| 一色屋精品视频免费看| 国产精品久久久久毛片大屁完整版 | 麻豆国产精品777777在线| 亚洲视频视频在线| 亚洲精选中文字幕| 亚洲国产成人高清精品| 老司机免费视频久久|