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

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| 欧美一区二区三区日韩| 国产性天天综合网| 久热成人在线视频| 蜜桃久久av一区| 日韩视频在线一区| 亚洲精品一区在线| 国产精品第一页第二页第三页| 亚洲图片欧美日产| 午夜视频在线观看一区二区| 国产日韩欧美成人| 欧美岛国激情| 欧美视频中文一区二区三区在线观看 | 亚洲欧洲精品一区二区三区不卡| 欧美成人综合一区| 欧美日韩成人在线| 欧美一区二区三区在线观看| 久久男人资源视频| 亚洲视频一区二区| 亚洲欧美清纯在线制服| 国内成+人亚洲+欧美+综合在线| 美女成人午夜| 欧美日韩国产不卡| 久久精品国产久精国产思思| 免费看成人av| 亚洲主播在线| 久久综合一区二区| 亚洲专区在线视频| 久久久噜噜噜| 中日韩视频在线观看| 欧美在线视频观看免费网站| 亚洲人成网站在线观看播放| 亚洲无人区一区| 91久久一区二区| 午夜精品视频在线观看| 日韩小视频在线观看| 欧美怡红院视频| 一个人看的www久久| 欧美在线地址| 亚洲专区免费| 欧美区二区三区| 男同欧美伦乱| 国产欧美日韩综合一区在线播放| 亚洲黄页视频免费观看| 国产亚洲欧美日韩一区二区| 日韩一二三在线视频播| 亚洲黄色天堂| 久久精品人人做人人爽| 午夜欧美不卡精品aaaaa| 欧美高清在线观看| 欧美国产高清| 在线欧美日韩| 欧美在线免费观看亚洲| 性欧美大战久久久久久久久| 欧美日韩精品是欧美日韩精品| 免费成人黄色av| 国内精品模特av私拍在线观看| 亚洲一区视频在线| 亚洲欧美中日韩| 国产精品久久久久高潮| 亚洲六月丁香色婷婷综合久久| 最新69国产成人精品视频免费| 久久久噜噜噜| 久久久久在线| 国产在线观看一区| 欧美在线|欧美| 久久精品视频99| 国产一区二区三区高清在线观看| 亚洲免费一级电影| 久久国内精品视频| 激情偷拍久久| 久久视频一区二区| 欧美国产欧美综合| 亚洲欧洲日夜超级视频| 欧美激情女人20p| 亚洲精品国产拍免费91在线| 一本一本久久| 国产精品国产三级国产专区53 | 久久精品国产精品| 国产一区二区三区精品久久久| 午夜精品久久久久久99热| 欧美在线综合视频| 黑人巨大精品欧美一区二区小视频| 亚洲欧美视频一区| 久久久久久久久久看片| 红桃视频成人| 欧美大胆成人| 亚洲一级免费视频| 久久久久久久999精品视频| 在线播放一区| 欧美日韩国产一区二区| 亚洲一区在线观看免费观看电影高清| 欧美一级片一区| 在线欧美影院| 欧美日韩国产123| 亚洲欧美电影院| 美女成人午夜| 亚洲欧美精品| 亚洲国产精品久久久久秋霞影院| 欧美精品在线网站| 午夜视频一区二区| 亚洲国产精品电影| 午夜在线视频观看日韩17c| 娇妻被交换粗又大又硬视频欧美| 欧美交受高潮1| 亚洲色诱最新| 欧美成人资源网| 午夜免费电影一区在线观看| 在线精品福利| 欧美色道久久88综合亚洲精品| 欧美一区二区视频观看视频| 亚洲国产精品欧美一二99| 午夜精品久久久久影视| 亚洲欧洲日韩综合二区| 国产女优一区| 欧美另类一区二区三区| 欧美自拍偷拍午夜视频| 亚洲乱码久久| 美女尤物久久精品| 性色av一区二区三区| 亚洲精品在线免费| 黑人极品videos精品欧美裸| 国产精品老牛| 欧美日韩免费一区二区三区| 久久在线免费| 欧美一区二视频在线免费观看| 亚洲免费观看视频| 欧美激情一区二区| 久久一区亚洲| 久久精品国亚洲| 亚洲免费视频在线观看| 一级日韩一区在线观看| 亚洲国产精品精华液2区45| 国产一区二区三区成人欧美日韩在线观看 | 欧美午夜女人视频在线| 欧美成人四级电影| 久久久久五月天| 欧美亚洲一区三区| 中文精品在线| 日韩视频永久免费| 亚洲国产日韩综合一区| 欧美激情久久久久| 欧美国产日本韩| 欧美激情精品| 亚洲国产精品高清久久久| 媚黑女一区二区| 欧美ed2k| 欧美高清不卡在线| 欧美国产免费| 亚洲国产一区二区三区a毛片| 欧美二区乱c少妇| 欧美成人一区二区在线| 欧美高清视频| 亚洲国产女人aaa毛片在线| 欧美国产精品劲爆| 亚洲欧洲日夜超级视频| 亚洲国产裸拍裸体视频在线观看乱了| 欧美激情成人在线| 亚洲人体大胆视频| 在线亚洲激情| 亚洲影音先锋| 久久久久久久性| 欧美va天堂| 欧美日韩国产首页在线观看| 欧美日韩网站| 国产欧美日韩亚州综合| 国内偷自视频区视频综合| 韩日视频一区| 亚洲精品久久久久中文字幕欢迎你| 亚洲美女电影在线| 亚洲欧美影音先锋| 另类酷文…触手系列精品集v1小说| 欧美福利专区| 99国产精品国产精品毛片| 亚洲欧美激情四射在线日 | 性做久久久久久久久| 欧美有码在线视频| 免费在线欧美视频| 国产精品国产三级国产普通话三级 | 欧美与黑人午夜性猛交久久久| 久久久久久一区二区| 欧美日韩免费看| 国产三区精品| 夜夜嗨av一区二区三区网页| 香蕉久久夜色精品国产使用方法| 久久久久九九九| 亚洲精品一区二区三区av| 性久久久久久久| 免费的成人av| 国产性猛交xxxx免费看久久| 亚洲人成亚洲人成在线观看| 香蕉久久一区二区不卡无毒影院| 免费人成网站在线观看欧美高清| 洋洋av久久久久久久一区| 久久久久久色| 国产精品捆绑调教| 99日韩精品| 久久尤物电影视频在线观看|