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

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 閱讀(4068) 評論(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實現(xiàn)了任意兩個形狀的交、并、差的布爾操作。但是如何實現(xiàn)用一個面將一個形狀切割成兩半呢?其實Boolean Operation中已經(jīng)有求交分割的算法,但是沒有直接提供一個分割的功能類,而是在BRepFeat_SplitShape提供了分割功能。

wps69BE.tmp

Figure 1. Split Cylinder by Plane

2. Code Demo

使用類BRepAlgoAPI_Section和類BRepFeat_SplitShape相結(jié)合來實現(xiàn)分割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;
}

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

split shape

Figure 2. Split Shape animation demo

3. Conclusion

OpenCASCADE提供類BRepFeat_SplitShape來實現(xiàn)對一個形狀進(jìn)行切割的功能,但是要配合BRepAlgoAPI_Section使用。因為Boolean Operation中已經(jīng)實現(xiàn)了求交、分類的功能,所以在最新版本的源碼7.2.0中已經(jīng)將分割功能集成到了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>
            精品91久久久久| 久久午夜电影网| 蜜臀av在线播放一区二区三区| 一本色道久久综合狠狠躁篇怎么玩| 午夜精品免费在线| 亚洲视频网站在线观看| 久热国产精品| 久久久综合网站| 欧美午夜片在线观看| 亚洲精品免费观看| 91久久国产综合久久蜜月精品| 午夜视频在线观看一区二区| 亚洲欧美国产日韩中文字幕| 欧美精品一区二区视频| 亚洲第一黄网| 亚洲国产精品黑人久久久| 久久精品国产99精品国产亚洲性色 | 亚洲大片在线| 一区免费观看| 久久国内精品自在自线400部| 欧美在线视频全部完| 国产精品久久久对白| 中文网丁香综合网| 亚洲尤物视频网| 国产精品久久久久一区| 一本高清dvd不卡在线观看| 在线午夜精品| 国产精品成人av性教育| 在线一区视频| 久久aⅴ乱码一区二区三区| 国产精品入口福利| 香蕉精品999视频一区二区| 久久国内精品视频| 国产综合激情| 久久手机免费观看| 亚洲欧洲美洲综合色网| 中文无字幕一区二区三区| 国产精品v亚洲精品v日韩精品| 夜夜爽www精品| 欧美在线黄色| 亚洲丰满在线| 欧美日韩精品伦理作品在线免费观看| 日韩亚洲国产欧美| 欧美一区1区三区3区公司| 国内精品99| 欧美成人网在线| 亚洲一区二区三区四区五区黄| 久久久www成人免费毛片麻豆| 精品成人一区二区三区| 欧美黄色免费| 亚洲专区一区二区三区| 久久综合九色综合欧美就去吻| 亚洲三级视频| 国产精品另类一区| 免费观看一级特黄欧美大片| 99精品国产福利在线观看免费| 欧美一区二区三区婷婷月色| 亚洲电影在线看| 国产精品99免费看 | 欧美专区在线| 亚洲国产欧美精品| 国产精品美女久久| 欧美成年视频| 亚洲欧美日韩精品久久亚洲区| 欧美成人a视频| 亚洲欧美激情视频| 亚洲国产欧美一区| 国产精品专区一| 欧美韩国一区| 久久―日本道色综合久久| 99精品国产在热久久| 久久人人超碰| 亚洲欧美一区二区激情| 亚洲国产视频a| 国产一区二区三区四区三区四 | 亚洲国产精品小视频| 国产精品久久久999| 欧美 日韩 国产 一区| 午夜宅男欧美| 一区二区国产在线观看| 欧美激情女人20p| 久久精品国产亚洲aⅴ| 中国成人在线视频| 91久久国产综合久久| 国产一区在线看| 国产乱码精品一区二区三| 欧美日韩三级电影在线| 免费成人高清视频| 久久九九99| 欧美在线观看日本一区| 亚洲视频成人| 一本色道久久88亚洲综合88| 亚洲国产精品一区二区久| 久久综合电影一区| 久久精品一区蜜桃臀影院| 亚洲欧美国产另类| 亚洲欧美日韩精品久久久久| 在线一区二区日韩| 一区二区三区高清不卡| 亚洲六月丁香色婷婷综合久久| 亚洲电影在线播放| 国外成人性视频| 国产午夜亚洲精品理论片色戒| 国产伦精品一区二区三区视频孕妇 | 美腿丝袜亚洲色图| 久久久久五月天| 久久久久久久97| 美女视频黄 久久| 蜜桃久久av一区| 欧美 日韩 国产 一区| 女主播福利一区| 欧美区二区三区| 欧美性jizz18性欧美| 国产精品视频内| 国产日产亚洲精品| 国内揄拍国内精品少妇国语| 狠狠色狠狠色综合日日五| 精品成人久久| 亚洲精品综合久久中文字幕| 在线视频亚洲一区| 亚洲欧美一区二区视频| 久久精品视频免费观看| 欧美a级片网站| 亚洲美女中文字幕| 亚洲综合日韩中文字幕v在线| 欧美一级理论片| 久久久噜噜噜久噜久久| 欧美大片在线观看一区| 欧美日韩免费视频| 国产无一区二区| 亚洲国产日韩一区二区| 亚洲性图久久| 久久久不卡网国产精品一区| 欧美国产专区| 一区二区三区久久| 久久精品视频一| 欧美人与禽猛交乱配| 国产精品久久久久久久电影| 激情亚洲网站| 一本色道久久| 久久天天躁夜夜躁狠狠躁2022 | 影音先锋中文字幕一区二区| 亚洲乱码国产乱码精品精| 亚洲欧美日韩国产中文在线| 麻豆九一精品爱看视频在线观看免费| 亚洲国产精品成人va在线观看| 一本大道久久精品懂色aⅴ| 久久成人免费| 国产精品成人一区二区网站软件| 国产一区日韩欧美| 亚洲视频在线观看视频| 老司机成人在线视频| 一区二区三区.www| 久久手机免费观看| 国产热re99久久6国产精品| 亚洲欧洲一二三| 久久视频在线看| 一区二区欧美国产| 欧美成人午夜视频| 国内精品久久久久影院色| 亚洲午夜激情免费视频| 欧美96在线丨欧| 午夜天堂精品久久久久| 欧美三级特黄| 亚洲精品一区二区三区不| 久久视频国产精品免费视频在线| 夜夜爽av福利精品导航| 欧美mv日韩mv国产网站| 影音先锋久久久| 欧美综合第一页| 亚洲天堂黄色| 欧美视频一区二区三区在线观看| 亚洲激情午夜| 你懂的视频欧美| 久久电影一区| 国产一区二区久久精品| 午夜一级久久| 亚洲一区影音先锋| 欧美日韩亚洲一区二区三区在线观看| 亚洲电影av在线| 久久视频这里只有精品| 午夜在线视频观看日韩17c| 国产精品一区二区你懂的| 亚洲欧美日韩国产中文| 在线亚洲一区| 国产精品乱码人人做人人爱| 99re热这里只有精品免费视频| 欧美激情一区二区在线 | 国产精品午夜国产小视频| 亚洲图片欧美日产| 一区二区三区蜜桃网| 欧美日韩在线三级| 亚洲香蕉视频| 亚洲一区综合| 国产久一道中文一区| 久久福利影视| 久久激情视频| 91久久久精品| 亚洲欧洲精品一区二区三区不卡 | 国产精品青草综合久久久久99|