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

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 閱讀(2189) 評論(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>
            亚洲国产精品久久久久久女王| 亚洲欧美日韩精品| 亚洲一二三区在线观看| 一区二区三区精品国产| 亚洲午夜未删减在线观看| 亚洲一区二区黄| 午夜一区二区三视频在线观看| 久久精品动漫| 欧美高清免费| 99在线精品观看| 亚洲欧美变态国产另类| 久久久久国产精品午夜一区| 欧美凹凸一区二区三区视频| 欧美日韩一区在线观看| 国产亚洲欧美色| 亚洲美女精品久久| 久久精品1区| 亚洲免费成人av电影| 亚洲欧美日韩高清| 欧美国产一区二区| 国产农村妇女精品一区二区| 亚洲国产高潮在线观看| 午夜精品久久久久久久久久久| 久久久久久久一区二区三区| 亚洲激情成人| 午夜视频精品| 欧美精品99| 亚洲午夜羞羞片| 国产亚洲综合精品| 亚洲精品日韩激情在线电影| 欧美一区二区三区另类| 91久久精品www人人做人人爽| 亚洲影视中文字幕| 欧美va亚洲va日韩∨a综合色| 国产精品一区二区三区久久| 亚洲精品视频在线播放| 久久久最新网址| 99在线|亚洲一区二区| 久久久久九九视频| 国产精品丝袜白浆摸在线| 日韩午夜av电影| 欧美r片在线| 欧美在线综合视频| 国产精品日韩欧美一区二区三区| 亚洲乱码视频| 欧美电影资源| 免费亚洲一区二区| 亚洲国产一区二区三区在线播 | 欧美新色视频| 亚洲精品一区在线| 免费久久99精品国产自| 久久精品99无色码中文字幕| 国产日韩一区二区三区| 亚洲欧美在线免费| 一本色道久久综合亚洲精品小说| 欧美国产一区视频在线观看| 亚洲高清资源综合久久精品| 麻豆精品一区二区av白丝在线| 亚洲欧美日韩一区在线| 国产欧美丝祙| 久久久蜜桃精品| 久久久91精品| 在线色欧美三级视频| 久久综合伊人77777| 欧美在线视频a| 在线播放中文一区| 免费成人性网站| 美国十次了思思久久精品导航| 怡红院精品视频| 欧美国产高潮xxxx1819| 欧美高清视频一区二区三区在线观看 | 久久婷婷亚洲| 久久一区二区三区四区五区| 亚洲国产精品va在看黑人| 欧美成人免费在线| 欧美极品在线观看| 在线午夜精品| 亚洲伊人久久综合| 狠久久av成人天堂| 亚洲国产高清高潮精品美女| 欧美日韩精品免费观看视频完整 | 亚洲国产婷婷综合在线精品| 久久精品视频一| 欧美一二区视频| 久久精品国产久精国产一老狼| 影音先锋日韩有码| 亚洲乱码国产乱码精品精| 欧美午夜视频在线观看| 久久久久久穴| 欧美精品在线看| 久久精品国产在热久久| 欧美成人a视频| 欧美一区二区三区精品| 噜噜爱69成人精品| 午夜一区不卡| 欧美美女喷水视频| 老司机免费视频久久| 欧美区亚洲区| 久久久蜜桃一区二区人| 欧美日本中文| 乱人伦精品视频在线观看| 欧美日韩一区二区视频在线 | 久久亚洲精品视频| 欧美交受高潮1| 久久人人97超碰精品888| 欧美三级视频| 欧美激情aaaa| 国内一区二区三区| 一区二区三区视频观看| 91久久久亚洲精品| 欧美在线视频网站| 亚洲男人天堂2024| 欧美激情1区2区3区| 久久一区二区三区av| 国产精品日韩一区二区| 亚洲精品三级| 亚洲人被黑人高潮完整版| 欧美在线视频观看| 亚洲综合色网站| 欧美精品激情blacked18| 欧美**人妖| 一区二区三区在线高清| 亚洲欧美国产精品专区久久| 亚洲一区视频在线观看视频| 欧美日本在线播放| 亚洲精品国产系列| 亚洲精品乱码久久久久久久久| 久久激情综合网| 久久久91精品国产一区二区精品| 欧美日韩一区国产| 99国产精品国产精品久久 | 一本色道久久88精品综合| 六月婷婷久久| 亚洲二区精品| 亚洲精品综合精品自拍| 欧美sm视频| 亚洲精品乱码久久久久| 中国成人亚色综合网站| 欧美伦理a级免费电影| 最近中文字幕mv在线一区二区三区四区| 国产综合视频| 久久阴道视频| 亚洲国产综合视频在线观看| 一本色道久久99精品综合| 欧美激情在线观看| aa国产精品| 欧美日韩情趣电影| 亚洲自拍三区| 国产精品一区二区久久国产| 亚洲综合导航| 久久综合给合久久狠狠色| 亚洲福利国产精品| 欧美日韩免费观看一区| 一区二区日韩免费看| 久久成人免费| 在线看片成人| 欧美精品aa| 亚洲欧美视频一区| 欧美成人福利视频| 亚洲午夜在线| 激情av一区| 欧美日韩色综合| 欧美亚洲一区二区在线| 欧美激情按摩| 欧美一区二区三区视频免费播放| 国内成+人亚洲| 欧美经典一区二区三区| 亚洲欧美日韩综合国产aⅴ| 欧美激情第一页xxx| 亚洲欧美电影在线观看| 国产日韩1区| 欧美另类videos死尸| 亚欧成人在线| 日韩午夜一区| 欧美成人国产| 欧美一区二视频在线免费观看| 影音先锋亚洲一区| 国产精品毛片a∨一区二区三区|国| 久久国产精品亚洲va麻豆| 日韩午夜精品| 亚洲第一毛片| 久久综合网hezyo| 亚洲欧美春色| 亚洲片区在线| 韩日欧美一区二区| 国产精品免费久久久久久| 老鸭窝毛片一区二区三区| 亚洲一级影院| 亚洲伦理自拍| 亚洲国产成人av| 老妇喷水一区二区三区| 欧美在线观看天堂一区二区三区| 亚洲久久成人| 亚洲国产成人一区| 黄网动漫久久久| 狠狠色狠狠色综合日日tαg| 国产精品欧美久久| 欧美日韩在线三区| 欧美日韩的一区二区| 欧美激情第4页|