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

eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

OpenCASCADE中散亂Edge生成Wire

Posted on 2018-05-20 21:50 eryar 閱讀(2238) 評論(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是有順序要求的。當(dāng)給定的邊沒有按順序添加到WIRE之前,需要自己將EDGE按順序處理。OpenCASCADE中也提供了對EDGE按順序進行排序的功能,方便WIRE的生成。

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

2. Code 

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

如下圖所示為一個封閉的WIRE,根據(jù)這些尺寸標(biāo)注,生成WIRE的EDGE。

wps_clip_image-18201

實現(xiàn)上述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數(shù)組,再添加兩個圓弧到EDGE數(shù)組。再使用類ShapeAnalysis_WireOrder來對EDGE數(shù)組進行排序,將排序后的EDGE數(shù)組去生成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首尾相連,感興趣的讀者可以結(jié)合源碼學(xué)習(xí)下。



為了方便大家在移動端也能看到我的博文和討論交流,現(xiàn)已注冊微信公眾號,歡迎大家掃描下方二維碼關(guān)注。
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>
            欧美激情视频在线播放 | 好吊成人免视频| 先锋a资源在线看亚洲| 亚洲视频一二| 国产亚洲一区二区三区| 欧美成人亚洲| 欧美色大人视频| 欧美一站二站| 久久亚洲综合色| 亚洲视频中文字幕| 亚洲欧美一区二区视频| 又紧又大又爽精品一区二区| 欧美激情在线狂野欧美精品| 欧美性大战久久久久久久| 久久精品国产91精品亚洲| 另类亚洲自拍| 亚洲一区视频在线观看视频| 久久精视频免费在线久久完整在线看 | 久久免费黄色| 欧美精品亚洲| 久久黄色小说| 欧美日韩精品免费 | 亚洲午夜三级在线| 久久福利视频导航| 一本色道久久综合亚洲91| 先锋影音久久| 99日韩精品| 久久久99国产精品免费| 亚洲先锋成人| 欧美a级片网| 久久精品视频免费播放| 欧美精选一区| 男人插女人欧美| 国产精品理论片| 亚洲精品免费一区二区三区| 国内精品嫩模av私拍在线观看 | 久久夜色精品一区| 欧美日韩午夜精品| 欧美成人高清| 一区二区视频免费在线观看| 一区二区三区久久久| 亚洲精品视频在线看| 久久国产精品高清| 欧美一区二区三区免费大片| 欧美日韩在线视频一区| 欧美激情a∨在线视频播放| 国产日产欧产精品推荐色 | 欧美母乳在线| 最近看过的日韩成人| 亚洲国产精品99久久久久久久久| 小处雏高清一区二区三区| 亚洲一区二区三区高清| 欧美成人一区二区三区片免费| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品福利在线观看网址| 亚洲久久成人| 亚洲午夜电影网| 欧美色欧美亚洲另类二区| 亚洲巨乳在线| 亚洲深夜福利网站| 欧美精品自拍偷拍动漫精品| 91久久久久久久久| 日韩小视频在线观看专区| 嫩模写真一区二区三区三州| 欧美高清在线一区| 亚洲区一区二| 欧美日韩一区二区免费在线观看| 亚洲精品自在久久| 亚洲一区在线视频| 国产精品三上| 欧美一区三区三区高中清蜜桃| 久久精品免费观看| 在线成人黄色| 欧美国产综合| 亚洲午夜视频在线| 久久激情视频久久| 亚洲第一搞黄网站| 欧美日韩美女一区二区| 亚洲一区二区三区涩| 欧美专区亚洲专区| 国产一区二区三区免费在线观看 | 亚洲视频综合在线| 久久精品中文字幕一区二区三区 | 国产精品裸体一区二区三区| 午夜在线一区二区| 欧美国产成人在线| 亚洲一区观看| 在线观看不卡| 欧美视频在线一区| 欧美一区二区三区四区高清| 欧美成人一区二区三区| 亚洲午夜一级| 一区免费视频| 欧美午夜剧场| 久久视频一区二区| 宅男噜噜噜66国产日韩在线观看| 久久免费精品视频| 99视频精品全国免费| 国产欧美日韩一区二区三区在线观看| 久久精品亚洲一区二区三区浴池| 亚洲激情电影在线| 久久久久久久久久码影片| 亚洲精品一区在线| 国产一区二区三区av电影| 欧美电影在线观看完整版| 亚洲一区国产视频| 亚洲国产精品专区久久 | 亚洲国产一区二区三区青草影视 | 欧美激情久久久| 欧美一区午夜精品| 99国产麻豆精品| 欧美电影免费观看网站| 久久精品国产成人| 亚洲一区国产| 在线中文字幕不卡| 亚洲精品1区2区| 极品少妇一区二区三区精品视频| 国产精品乱人伦一区二区 | 欧美激情国产日韩精品一区18| 欧美亚洲日本国产| 在线亚洲高清视频| 亚洲高清av在线| 欧美jizz19hd性欧美| 欧美在线视频全部完| 亚洲图片欧美一区| 亚洲日本成人在线观看| 在线日本欧美| 一区精品在线| 一区在线观看| 黄色一区二区在线| 国产一区二区三区成人欧美日韩在线观看 | 最新国产の精品合集bt伙计| 欧美sm视频| 麻豆91精品| 免费久久精品视频| 久久精品夜色噜噜亚洲a∨| 午夜在线播放视频欧美| 亚洲欧美区自拍先锋| 亚洲一级片在线看| 亚洲一区二区在线免费观看视频| 亚洲深夜福利在线| 亚洲一二三区视频在线观看| 中文国产成人精品| 亚洲一区二区三区午夜| 亚洲天堂免费观看| 亚洲欧美日韩精品久久亚洲区 | 亚洲精品1区2区| 亚洲国产一区二区a毛片| 欧美激情精品| 亚洲精品国精品久久99热| 亚洲精品久久久久| 在线一区亚洲| 欧美在线视频免费| 久久综合九色综合欧美就去吻 | 欧美jizzhd精品欧美巨大免费| 欧美高清影院| 国产精品久久久久国产精品日日| 国产精品人成在线观看免费| 国产日本精品| 亚洲第一在线| 亚洲伊人伊色伊影伊综合网| 久久精品一区四区| 亚洲电影免费在线观看| 亚洲美女黄网| 香蕉久久一区二区不卡无毒影院| 久久精品国产久精国产一老狼| 欧美大片免费看| 国产精品久久久久国产精品日日 | 国产精品一区久久久| 亚洲成人在线免费| 亚洲视频一起| 久久噜噜噜精品国产亚洲综合| 亚洲大胆视频| 亚洲一级电影| 美女任你摸久久| 国产精品你懂的在线| 亚洲成色777777女色窝| 中文网丁香综合网| 快she精品国产999| 99热这里只有精品8| 久久国产主播精品| 欧美日韩国产综合网| 国产在线不卡精品| 一区二区三区欧美成人| 久久综合久色欧美综合狠狠| 9色精品在线| 卡通动漫国产精品| 国产日韩成人精品| 999在线观看精品免费不卡网站| 欧美影院成人| 99www免费人成精品| 久久蜜桃精品| 国产丝袜美腿一区二区三区| 日韩亚洲欧美成人一区| 久久亚洲春色中文字幕| 一区二区三区欧美在线| 欧美大片在线看免费观看| 国产亚洲人成a一在线v站| 亚洲午夜激情网站| 最新亚洲电影|