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

eryar

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

Split Shape by Plane in OpenCASCADE

Posted on 2017-07-01 12:21 eryar 閱讀(4051) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

Split Shape by Plane in OpenCASCADE

eryar@163.com

Abstract. Sometimes you want to split a shape by plane or even split a shape by a B Spline surface, OpenCASCADE provide a feature class BRepFeat_SplitShape to implement the function. The paper give a sample code to split a cylinder by plane.

Key Words. Split Shape, BRep Feature Algorithms.

1. Introduction

OpenCASCADE提供了Boolean Operation實現了任意兩個形狀的交、并、差的布爾操作。但是如何實現用一個面將一個形狀切割成兩半呢?其實Boolean Operation中已經有求交分割的算法,但是沒有直接提供一個分割的功能類,而是在BRepFeat_SplitShape提供了分割功能。

wps69BE.tmp

Figure 1. Split Cylinder by Plane

2. Code Demo

使用類BRepAlgoAPI_Section和類BRepFeat_SplitShape相結合來實現分割Split形狀的功能。完整代碼示例如下:

/*
Copyright(C) 2017 Shing Liu(eryar@163.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

// Visual Studio 2013 & OpenCASCADE7.1.0

#include <gp_Pln.hxx>

#include <TopoDS.hxx>

#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>

#include <BRepTools.hxx>

#include <BRepPrimAPI_MakeCylinder.hxx>

#include <BRepAlgoAPI_Section.hxx>

#include <BRepFeat_SplitShape.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")

#pragma comment(lib, "TKBO.lib")
#pragma comment(lib, "TKPrim.lib")
#pragma comment(lib, "TKFeat.lib")

//! Test split a cylinder by plane.
//! You can use the algorithm to split other shapes.
void testSplit()
{
    BRepPrimAPI_MakeCylinder aCylinderMaker(10.0, 20.0);
    TopoDS_Shape aCylinder = aCylinderMaker.Shape();

    // Build section by the split plane for the cylinder.
    BRepAlgoAPI_Section aSection(aCylinder, gp_Pln(gp_Pnt(0.0, 0.0, 15.0), gp::DZ()), Standard_False);
    aSection.ComputePCurveOn1(Standard_True);
    aSection.Approximation(Standard_True);
    aSection.Build();

    // Split the cylinder shape.
    BRepFeat_SplitShape aShapeSpliter(aCylinder);

    for (TopExp_Explorer i(aSection.Shape(), TopAbs_EDGE); i.More(); i.Next())
    {
        TopoDS_Shape anEdge = i.Current();
        TopoDS_Shape aFace;

        if (aSection.HasAncestorFaceOn1(anEdge, aFace))
        {
            TopoDS_Edge E = TopoDS::Edge(anEdge);
            TopoDS_Face F = TopoDS::Face(aFace);

            aShapeSpliter.Add(E, F);
        }
    }

    aShapeSpliter.Build();

    // Rebuild left and right shape.
    BRep_Builder aBuilder;
    TopoDS_Compound aLeftCompound;
    TopoDS_Compound aRightCompound;

    aBuilder.MakeCompound(aLeftCompound);
    aBuilder.MakeCompound(aRightCompound);

    // Left shape.
    TopTools_MapOfShape aLeftShapeMap;
    const TopTools_ListOfShape& aLeftShapes = aShapeSpliter.Left();
    for (auto i = aLeftShapes.cbegin(); i != aLeftShapes.cend(); i++)
    {
        aLeftShapeMap.Add(*i);

        aBuilder.Add(aLeftCompound, *i);
    }

    // Right shape.
    TopTools_IndexedMapOfShape aShapeMap;
    TopExp::MapShapes(aShapeSpliter.Shape(), TopAbs_FACE, aShapeMap);

    for (auto i = aShapeMap.cbegin(); i != aShapeMap.cend(); i++)
    {
        if (!aLeftShapeMap.Contains(*i))
        {
            aBuilder.Add(aRightCompound, *i);
        }
    }

    // Output left and right shape.
    BRepTools::Write(aLeftCompound, "d:/left.brep");
    BRepTools::Write(aRightCompound, "d:/right.brep");
}

int main(int argc, char* argv[])
{
    testSplit();

    return 0;
}

先創建一個圓柱體,再使用類BRepAlgoAPI_Section將圓柱體用平面進行分割,最后使用類BRepFeat_SplitShape進行分類,得到切割后的形狀及Left()形狀,把切割后形狀中的Left過濾后剩下就是切割另一半的形狀;最后導出被平面切割后得到的兩半形狀。結果用動畫演示如下:

split shape

Figure 2. Split Shape animation demo

3. Conclusion

OpenCASCADE提供類BRepFeat_SplitShape來實現對一個形狀進行切割的功能,但是要配合BRepAlgoAPI_Section使用。因為Boolean Operation中已經實現了求交、分類的功能,所以在最新版本的源碼7.2.0中已經將分割功能集成到了Boolean Operation中。分割后如果沒有被改變的面還是原來的面。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲一区二区日本| 亚洲少妇诱惑| 国产亚洲在线观看| 美国十次了思思久久精品导航| 久久久夜夜夜| 一区二区欧美视频| 亚洲综合999| 亚洲第一精品福利| 99精品99| 激情成人av在线| 亚洲人人精品| 国产精品久久久久久久第一福利| 欧美伊人久久大香线蕉综合69| 久久精品视频免费播放| 日韩亚洲欧美高清| 欧美一区二区福利在线| 亚洲电影在线免费观看| 一区二区免费在线播放| 国语精品中文字幕| 亚洲精品偷拍| 狠狠色狠狠色综合日日tαg| 亚洲精品国产品国语在线app| 国产欧美三级| 亚洲精品久久久久久下一站| 国产欧美亚洲日本| 亚洲激情二区| 国产综合欧美| 一区二区三区黄色| 亚洲国产精品久久| 亚洲一区二区综合| 99视频在线精品国自产拍免费观看 | 国产精品免费电影| 欧美大片91| 国产亚洲欧美日韩精品| 日韩视频二区| 亚洲欧洲日产国产网站| 欧美中文字幕精品| 亚洲欧美精品suv| 欧美精品v日韩精品v韩国精品v| 久久av红桃一区二区小说| 欧美日韩一本到| 亚洲第一狼人社区| 狠狠色噜噜狠狠色综合久| 中国成人黄色视屏| av不卡在线观看| 蜜桃av一区二区三区| 久久久久久久久蜜桃| 国产精品亚洲综合久久| 一本高清dvd不卡在线观看| 亚洲国产婷婷| 久久影音先锋| 欧美不卡在线视频| 在线观看成人小视频| 久久岛国电影| 久热爱精品视频线路一| 国产一区二区黄色| 欧美一区二区网站| 久久久激情视频| 国产女主播一区| 亚洲欧美日韩直播| 欧美在线国产精品| 国产欧美日韩视频| 欧美综合国产| 免费看成人av| 亚洲欧洲精品一区| 欧美大片一区二区三区| 亚洲人成人99网站| 一区二区免费在线播放| 欧美日韩在线观看一区二区| 亚洲最新色图| 欧美专区第一页| 韩国精品主播一区二区在线观看| 久久久99国产精品免费| 欧美+日本+国产+在线a∨观看| 亚洲国产综合在线看不卡| 欧美a级一区二区| 99精品国产一区二区青青牛奶| 亚洲综合色自拍一区| 亚洲国产精品成人一区二区| 好吊色欧美一区二区三区视频| 久久久久高清| 亚洲国产另类精品专区| 一区二区三区四区五区视频| 欧美午夜视频一区二区| 欧美一区二区三区视频免费播放| 另类图片国产| 一本久道久久综合婷婷鲸鱼| 国产精品手机视频| 久久精品国产99| 亚洲国产小视频| 午夜国产精品视频| 亚洲国产高清在线| 国产精品成人国产乱一区| 久久精品国产亚洲一区二区| 亚洲国产天堂久久国产91| 亚洲一区视频在线| 在线观看日韩一区| 欧美午夜精品久久久久久久| 久久久国产精品一区二区中文| 91久久精品国产| 性做久久久久久久免费看| 亚洲国产精品久久精品怡红院| 国产精品国产成人国产三级| 久久久久9999亚洲精品| 99视频精品| 美女免费视频一区| 亚洲欧美日韩人成在线播放| 亚洲二区免费| 国产日韩一级二级三级| 欧美日韩精品综合在线| 久久精品一二三| 在线午夜精品| 亚洲精品1区2区| 久久全国免费视频| 午夜精品在线观看| 亚洲老司机av| 亚洲福利国产精品| 国产亚洲精品aa午夜观看| 欧美日韩中文| 欧美日韩p片| 免费视频久久| 久久五月天婷婷| 久久精精品视频| 亚洲欧美日韩一区| 在线视频亚洲欧美| 亚洲精品一区二| 亚洲黄色高清| 欧美黄色成人网| 欧美成人免费在线观看| 久久亚洲精品一区二区| 欧美中在线观看| 欧美一区二区三区四区在线观看| 亚洲图片激情小说| 在线亚洲精品福利网址导航| 亚洲精品自在久久| 99re6这里只有精品| 99re66热这里只有精品3直播| 亚洲激情在线观看| 亚洲精品欧美日韩| 日韩一二三区视频| 一区二区三区.www| 亚洲天堂免费在线观看视频| 在线视频一区二区| 亚洲一区二区在线| 西西人体一区二区| 久久riav二区三区| 久久久久国产免费免费| 久久婷婷色综合| 欧美国产日韩精品免费观看| 亚洲大片在线观看| 亚洲狼人综合| 亚洲一区二区在线看| 欧美亚洲三级| 久热精品视频在线| 欧美久久综合| 国产精品福利网| 国产欧美午夜| 在线观看视频一区| 日韩视频免费看| 午夜国产不卡在线观看视频| 久久精品国产v日韩v亚洲| 久久综合999| 亚洲国产欧美在线| 亚洲已满18点击进入久久| 欧美在线视频免费| 欧美成人免费在线视频| 国产精品av免费在线观看| 国产亚洲福利| 亚洲精品国产无天堂网2021| 亚洲伊人第一页| 久久久女女女女999久久| 亚洲国产精品一区二区三区| 亚洲香蕉在线观看| 久久―日本道色综合久久| 欧美精品在线播放| 国产手机视频一区二区| 亚洲第一免费播放区| 亚洲尤物在线视频观看| 免费成人性网站| 一区二区三区 在线观看视| 久久九九电影| 欧美视频一区在线| 亚洲国产精品一区二区尤物区| 亚洲一区在线直播| 欧美电影电视剧在线观看| 亚洲视频1区2区| 欧美成人精品在线| 国产永久精品大片wwwapp| 一区二区久久久久久| 欧美大学生性色视频| 午夜精品久久久久影视| 欧美视频在线观看| 亚洲精品一线二线三线无人区| 久久久久久久久伊人|