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

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中散亂Edge生成Wire

Posted on 2018-05-20 21:50 eryar 閱讀(2254) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

OpenCASCADE中散亂Edge生成Wire

eryar@163.com

Abstract. In OpenCASCADE a wire can be built from any number of edges in sequence. If edges are not in sequence, you must sort them in order.

Key Words. Edge, Wire, Wire order

1. Introduction

在OpenCASCADE中生成WIRE時要求添加到WIRE中的邊EDGE是有順序要求的。當給定的邊沒有按順序添加到WIRE之前,需要自己將EDGE按順序處理。OpenCASCADE中也提供了對EDGE按順序進行排序的功能,方便WIRE的生成。

本文給出將散亂的EDGE排序后生成WIRE的實現代碼,這個功能用處還是很大的。

2. Code 

在模型檢查模塊TKShHealing中,OpenCASCADE提供了類ShapeAnalysis_WireOrder用來將用于生成WIRE的一系列EDGE進行排序。這個類的實現原理是根據EDGE的起點、終點坐標來進行連接,生成順序。

如下圖所示為一個封閉的WIRE,根據這些尺寸標注,生成WIRE的EDGE。

wps_clip_image-18201

實現上述Wire的程序代碼如下所示:

/*
The MIT License (MIT)
---------------------
Copyright(C) 2018 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.
*/
#include <vector>
#include <gp_Pnt.hxx>
#include <gp_Circ.hxx>
#include <TopTools_ListOfShape.hxx>
#include <BRep_Tool.hxx>
#include <BRepTools.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <ShapeAnalysis_Edge.hxx>
#include <ShapeAnalysis_WireOrder.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, "TKShHealing.lib")
void test(void)
{
    std::vector<TopoDS_Edge> anEdges;
    // 5 Segment edges.
    BRepBuilderAPI_MakeEdge anEdgeMaker1(
        gp_Pnt(-1650.0, 2857.88383249, 0.0),
        gp_Pnt(-750.0, 1299.03810568, 0.0));
    BRepBuilderAPI_MakeEdge anEdgeMaker2(
        gp_Pnt(1299.03810568, 750.0, 0.0),
        gp_Pnt(2857.88383249, 1650.0, 0.0));
    BRepBuilderAPI_MakeEdge anEdgeMaker3(
        gp_Pnt(2857.88383249, 1650.0, 0.0),
        gp_Pnt(8000.0, 1650.0, 0.0));
    BRepBuilderAPI_MakeEdge anEdgeMaker4(
        gp_Pnt(8000.0, 1650.0, 0.0),
        gp_Pnt(8000.0, -3300.0, 0.0));
    BRepBuilderAPI_MakeEdge anEdgeMaker5(
        gp_Pnt(8000.0, -3300.0, 0.0),
        gp_Pnt(0.0, -3300.0, 0.0));
    anEdges.push_back(anEdgeMaker1.Edge());
    anEdges.push_back(anEdgeMaker2.Edge());
    anEdges.push_back(anEdgeMaker3.Edge());
    anEdges.push_back(anEdgeMaker4.Edge());
    anEdges.push_back(anEdgeMaker5.Edge());
    // 2 Arc edges.
    gp_Circ aCircle1(gp::XOY(), 1500.0);
    gp_Circ aCircle2(gp::XOY(), 3300.0);
    BRepBuilderAPI_MakeEdge anEdgeMaker6(aCircle1,
        gp_Pnt(-750.0, 1299.03810568, 0.0),
        gp_Pnt(1299.03810568, 750.0, 0.0));
    BRepBuilderAPI_MakeEdge anEdgeMaker7(aCircle2,
        gp_Pnt(-1650.0, 2857.88383249, 0.0),
        gp_Pnt(0.0, -3300.0, 0.0));
    anEdges.push_back(anEdgeMaker6.Edge());
    anEdges.push_back(anEdgeMaker7.Edge());
    // Get edges order for the wire.
    ShapeAnalysis_Edge anEdgeAnalyser;
    ShapeAnalysis_WireOrder aWireOrder;
    for (std::vector<TopoDS_Edge>::const_iterator i = anEdges.begin();
        i != anEdges.end(); ++i)
    {
        TopoDS_Vertex aVf = anEdgeAnalyser.FirstVertex(*i);
        TopoDS_Vertex aVl = anEdgeAnalyser.LastVertex(*i);
        gp_Pnt aPf = BRep_Tool::Pnt(aVf);
        gp_Pnt aPl = BRep_Tool::Pnt(aVl);
        aWireOrder.Add(aPf.XYZ(), aPl.XYZ());
    }
    // 
    TopTools_ListOfShape aOrderedEdges;
    for (Standard_Integer e = 1; e <= aWireOrder.NbEdges(); ++e)
    {
        const TopoDS_Edge& anEdge = anEdges.at(e - 1);
        aOrderedEdges.Append(anEdge);
    }
    BRepBuilderAPI_MakeWire aWireMaker;
    aWireMaker.Add(aOrderedEdges);
    if (aWireMaker.IsDone())
    {
        BRepTools::Write(aWireMaker.Shape(), "d:/wire.brep");
    }
}
int main(int argc, char* argv[])
{
    test();
    return 0;
}

程序先添加5條線段到EDGE數組,再添加兩個圓弧到EDGE數組。再使用類ShapeAnalysis_WireOrder來對EDGE數組進行排序,將排序后的EDGE數組去生成WIRE。如果生成WIRE成功,會在D盤得到一個wire.brep文件。在Draw中加載后顯示如下圖所示:

wps_clip_image-1190

生成WIRE后,繼而可以生成FACE,對FACE進行拉伸可以得到拉伸體,如下圖所示:

wps_clip_image-9137

3. Conclusion

OpenCASCADE中生成WIRE時對添加的EDGE是有順序的要求。如何對散亂的EDGE進行排序以達到生成WIRE的要求呢?OpenCASCADE在TKShHealing模塊中提供了對EDGE排序的功能。

對EDGE排序的功能原理很簡單,就是將所有的EDGE首尾相連,感興趣的讀者可以結合源碼學習下。



為了方便大家在移動端也能看到我的博文和討論交流,現已注冊微信公眾號,歡迎大家掃描下方二維碼關注。
Shing Liu(eryar@163.com)

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产麻豆一精品一av一免费| 欧美日韩在线综合| 在线观看视频免费一区二区三区| 久久国产精品久久久久久电车| 一区二区三区四区五区视频| 欧美色欧美亚洲另类七区| 亚洲欧美中文在线视频| 午夜久久久久久| 狠狠综合久久av一区二区小说| 老妇喷水一区二区三区| 猛干欧美女孩| 日韩午夜在线观看视频| 亚洲一区二区黄| 狠狠色综合网站久久久久久久| 欧美黄色免费| 国产精品对白刺激久久久| 欧美中文字幕久久| 久久久久久亚洲精品中文字幕| 亚洲精品男同| 一区二区三区视频免费在线观看| 国产一区观看| 亚洲第一网站| 欧美午夜精品久久久久久孕妇| 久久精品国产欧美激情| 蘑菇福利视频一区播放| 亚洲在线1234| 久久视频这里只有精品| 亚洲在线观看视频网站| 久久精品一区二区三区中文字幕 | 一本色道久久综合亚洲精品婷婷| 国产免费一区二区三区香蕉精| 蜜臀久久久99精品久久久久久| 欧美日韩国产欧美日美国产精品| 久久精品在这里| 欧美日韩综合视频| 欧美顶级艳妇交换群宴| 国产精品日韩电影| 亚洲欧洲视频| 国内精品美女在线观看| 一级成人国产| 99在线热播精品免费| 久久久一区二区三区| 性色av一区二区三区| 欧美成人精品在线| 久久综合九色99| 国产欧美精品在线播放| 一本色道久久综合狠狠躁的推荐| 亚洲电影观看| 久久成人资源| 久久精品国产一区二区电影| 国产精品99免费看| 亚洲精选成人| 亚洲精品社区| 免费欧美在线| 欧美国产欧美综合| 在线播放豆国产99亚洲| 欧美一区二区日韩| 久久国产手机看片| 国产免费成人av| 亚洲在线观看视频| 午夜电影亚洲| 国产精品丝袜久久久久久app| 日韩视频一区二区三区在线播放 | 国产精品羞羞答答xxdd| 一本色道久久88综合亚洲精品ⅰ| 日韩一级不卡| 欧美日韩一区免费| 一区二区三区欧美成人| 亚洲视频二区| 国产精品国产三级国产aⅴ入口| 日韩午夜av在线| 制服丝袜亚洲播放| 欧美三级视频在线观看| 亚洲视频一区| 欧美亚洲视频一区二区| 国产欧美日本一区二区三区| 香蕉尹人综合在线观看| 久久九九全国免费精品观看| 韩国福利一区| 欧美.日韩.国产.一区.二区| 亚洲国产天堂久久国产91| 亚洲最新在线视频| 欧美午夜电影在线观看| 亚洲午夜久久久久久久久电影院 | 亚洲综合国产| 国产视频一区欧美| 久久免费视频网| 亚洲黄色在线看| 亚洲欧美日本伦理| 国产一区二区成人| 麻豆精品视频在线观看| 艳女tv在线观看国产一区| 午夜精品美女自拍福到在线| 国产一区二区观看| 欧美成人一区在线| 亚洲香蕉伊综合在人在线视看| 久久久五月婷婷| 亚洲伦理自拍| 国产日韩精品视频一区二区三区| 久久综合影音| 一区二区三区 在线观看视频| 欧美亚洲一区二区三区| 亚洲国产日韩在线| 国产精品高潮视频| 乱码第一页成人| 亚洲夜晚福利在线观看| 免费日韩av| 亚洲欧美国产日韩天堂区| 一区二区三区在线高清| 欧美三级午夜理伦三级中视频| 久久xxxx| 夜夜嗨一区二区| 欧美h视频在线| 午夜欧美视频| 99精品欧美一区| 红桃视频国产一区| 国产精品老女人精品视频| 麻豆精品在线视频| 欧美一区久久| 亚洲视频免费观看| 亚洲青色在线| 美女精品一区| 久久精品国产免费看久久精品| 99视频一区二区| 亚洲国产精品第一区二区| 国产在线不卡视频| 国产精品一区二区三区四区| 欧美精品色网| 免费看成人av| 久热精品在线视频| 久久xxxx精品视频| 午夜精品久久| 午夜精品久久久久久99热软件| 在线一区二区三区四区五区| 亚洲二区视频在线| 免费观看一级特黄欧美大片| 久久精品国产精品亚洲综合| 午夜久久福利| 亚洲在线一区| 亚洲欧美大片| 亚洲欧美变态国产另类| 亚洲色图自拍| 亚洲图片在线观看| 一区二区三区精品国产| 中文日韩电影网站| 在线亚洲精品福利网址导航| 夜夜爽av福利精品导航 | 亚洲成人自拍视频| 亚洲国产成人精品视频| 亚洲福利视频专区| 亚洲日韩中文字幕在线播放| 亚洲大片在线| 亚洲精品国产系列| 一本色道久久综合狠狠躁篇的优点| 亚洲精品国产精品国自产观看| 亚洲激情电影中文字幕| 亚洲乱码日产精品bd| 99在线观看免费视频精品观看| 一区二区三区成人| 性久久久久久久久| 久久久噜噜噜久久人人看| 久久亚洲高清| 欧美激情女人20p| 日韩小视频在线观看| 99日韩精品| 午夜视频一区| 免费成人高清在线视频| 欧美日韩成人在线观看| 国产精品私人影院| 国产在线成人| 亚洲美女网站| 午夜欧美大片免费观看| 美女视频黄免费的久久| 亚洲国产精品久久久久秋霞影院 | 久久亚洲精品视频| 欧美高清在线播放| 一区二区三区日韩欧美| 欧美综合激情网| 欧美精品一区在线播放| 国产精品视频精品视频| 在线观看一区欧美| 亚洲男女毛片无遮挡| 蜜桃av一区二区三区| 日韩香蕉视频| 久久久91精品国产| 欧美色欧美亚洲高清在线视频| 国产小视频国产精品| 日韩亚洲精品视频| 欧美中文字幕久久| 亚洲日本黄色| 久久精品久久99精品久久| 欧美视频一区二区| 亚洲成在人线av| 欧美中文字幕在线| 99视频在线精品国自产拍免费观看| 久久国产精品电影| 国产精品视频xxx| av成人手机在线| 欧美www在线| 小处雏高清一区二区三区|