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

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>
            国产一区二区三区不卡在线观看 | 亚洲精品久久久一区二区三区| 亚洲精品日韩激情在线电影| 国产在线精品成人一区二区三区| 亚洲看片一区| 亚洲成人在线网站| 欧美影院久久久| 午夜日韩电影| 欧美日韩一区免费| 亚洲日本电影| 亚洲国产天堂久久综合| 久久精品五月| 久久久久久亚洲精品中文字幕| 国产精品第13页| 亚洲精品国精品久久99热一| 亚洲国产精品一区二区久| 久久爱www久久做| 久久精品毛片| 国产婷婷精品| 欧美一区二区日韩一区二区| 性色av一区二区三区红粉影视| 欧美日韩中文在线观看| 亚洲人成啪啪网站| 亚洲黄色成人| 欧美成人免费观看| 亚洲国产日韩欧美在线99| 91久久视频| 女女同性女同一区二区三区91| 免播放器亚洲| 亚洲人体一区| 欧美日韩免费高清| 亚洲视频免费在线| 欧美一区二视频| 国产视频久久| 久久男人av资源网站| 欧美成人精品一区二区| 亚洲黄页视频免费观看| 免费欧美高清视频| 亚洲美女视频在线观看| 亚洲视频一区二区| 国产精品夜夜嗨| 久久av在线| 欧美承认网站| 一片黄亚洲嫩模| 国产精品区一区二区三区| 香蕉视频成人在线观看 | 亚洲伊人伊色伊影伊综合网| 国产精品草莓在线免费观看| 亚洲女女女同性video| 久久精品99久久香蕉国产色戒| 好吊色欧美一区二区三区视频| 久久阴道视频| 99热免费精品| 久久久999精品| 日韩午夜av在线| 国产精品每日更新| 久久久久久久综合| 亚洲精品国产精品国自产在线| 午夜一区二区三区在线观看| 雨宫琴音一区二区在线| 欧美日韩国产美| 欧美一级久久| 亚洲精品视频免费在线观看| 欧美一区二区三区四区视频| 在线观看视频一区二区| 国产精品国产三级国产a| 久久国产视频网| 一区二区三区波多野结衣在线观看| 久久精品免费观看| 一区二区三区四区蜜桃| 国产主播一区二区三区四区| 欧美日韩久久不卡| 久久久蜜桃一区二区人| 亚洲午夜精品久久久久久浪潮| 欧美成人精品一区二区| 欧美一区二区三区免费在线看| 亚洲激情av| 国产一区二区三区久久久久久久久| 暖暖成人免费视频| 欧美在线关看| 亚洲午夜一区| 亚洲欧洲日产国码二区| 久久字幕精品一区| 欧美一区二区三区久久精品茉莉花| 亚洲精品日韩久久| 在线观看国产精品网站| 国产欧美一级| 国产精品日韩久久久久| 欧美日韩精品一区二区天天拍小说| 久久美女性网| 久久成人免费网| 亚洲欧美日韩区| 亚洲视频综合在线| 日韩视频免费观看| 最新日韩欧美| 亚洲国产电影| 欧美大片在线观看| 裸体歌舞表演一区二区| 久久精品综合一区| 久久精品五月| 久久久久久尹人网香蕉| 欧美亚洲三区| 欧美一进一出视频| 欧美一级理论性理论a| 亚洲线精品一区二区三区八戒| 99国内精品| 夜夜嗨一区二区三区| 日韩亚洲一区二区| 一区二区黄色| 亚洲网在线观看| 亚洲深夜av| 亚洲欧美日韩一区二区在线| 亚洲专区国产精品| 午夜在线不卡| 欧美在线亚洲| 久久婷婷丁香| 欧美电影在线| 亚洲精品乱码久久久久久| 亚洲国产午夜| 中日韩视频在线观看| 亚洲永久视频| 久久久精品tv| 欧美成人在线免费观看| 欧美日韩色婷婷| 国产精品视频免费一区| 国产亚洲精品资源在线26u| 黄色日韩网站| 亚洲麻豆一区| 亚洲欧美日韩天堂| 久久裸体艺术| 亚洲国产精品t66y| 一级日韩一区在线观看| 欧美一区二区三区四区在线观看地址 | 亚洲精选在线| 亚洲一区国产| 久久蜜桃资源一区二区老牛 | 在线观看日韩www视频免费 | 欧美韩国日本一区| 日韩一区二区高清| 香蕉久久一区二区不卡无毒影院| 久久久久综合一区二区三区| 欧美粗暴jizz性欧美20| 国产精品99一区| 激情综合久久| 中文欧美日韩| 久久婷婷国产综合国色天香| 亚洲国产综合91精品麻豆| 亚洲视频一区二区| 久久伊人精品天天| 国产精品a级| 亚洲国产成人porn| 亚洲欧美另类中文字幕| 免费成人黄色av| 亚洲色图制服丝袜| 麻豆精品视频| 国产精品视频xxxx| 亚洲精品日韩激情在线电影 | 久热精品视频在线| 亚洲精品人人| 久久婷婷国产综合精品青草| 国产精品久久久久久久久免费樱桃 | 99在线精品免费视频九九视| 久久精品视频免费播放| 99这里只有精品| 久久免费视频一区| 国产欧美日韩精品在线| 99精品免费网| 欧美成人国产一区二区| 亚洲欧美日韩综合国产aⅴ| 欧美激情久久久久| 在线观看一区| 久久久久久**毛片大全| 亚洲私人影院在线观看| 欧美精品免费视频| 亚洲黄色成人久久久| 久久久久一区二区三区| 亚洲欧美日本国产专区一区| 欧美日韩视频不卡| 99av国产精品欲麻豆| 欧美高清在线一区| 久久久伊人欧美| 好吊色欧美一区二区三区四区| 性做久久久久久免费观看欧美| 99re6这里只有精品视频在线观看| 欧美aⅴ99久久黑人专区| 激情成人亚洲| 久久免费视频在线观看| 亚洲欧美成人一区二区三区| 国产精品va| 亚洲一区美女视频在线观看免费| 亚洲片在线资源| 欧美刺激午夜性久久久久久久| 亚洲黄色成人久久久| 欧美高清在线播放| 欧美成人中文字幕| 日韩午夜一区| 一区二区三区精密机械公司| 国产精品video| 欧美一区二区精品| 欧美在线精品免播放器视频|