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

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 閱讀(2250) 評論(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>
            1024亚洲| 国产精品久久午夜| 一本大道久久精品懂色aⅴ| 欧美激情黄色片| 欧美福利在线| 亚洲日本中文字幕免费在线不卡| 欧美v亚洲v综合ⅴ国产v| 嫩草国产精品入口| 亚洲高清视频一区二区| 一区二区免费看| 欧美一区二区在线免费观看| 久久精品人人| 欧美日韩不卡| 国产一在线精品一区在线观看| 国内精品久久久久伊人av| 在线不卡免费欧美| 中国成人黄色视屏| 久久久久成人精品| 亚洲精品一区二区三区福利| 亚洲欧美日本日韩| 欧美成人国产| 国产一区二区三区在线观看精品| 亚洲欧洲精品成人久久奇米网| 亚洲视频中文| 欧美国产综合| 欧美一级专区| 欧美日韩国产一区精品一区 | 亚洲主播在线观看| 美女精品在线| 亚洲欧美影音先锋| 亚洲久色影视| 亚洲乱码久久| 国产一区高清视频| 亚洲欧美激情精品一区二区| 先锋影院在线亚洲| 一区二区激情视频| 国产中文一区二区三区| 欧美日韩综合精品| 老司机亚洲精品| 久久婷婷亚洲| 伊人成人开心激情综合网| 玖玖精品视频| 亚洲午夜在线观看| 9久re热视频在线精品| 亚洲国产成人在线| 欧美午夜欧美| 久久国产精品99国产精| 欧美韩日一区二区三区| 夜夜嗨av一区二区三区免费区| 欧美精品福利视频| 久久精品道一区二区三区| 最新成人在线| 久久国产欧美日韩精品| 久久精品欧洲| 日韩一区二区精品| 一区二区三区在线免费播放| 国产欧美精品一区二区三区介绍| 亚洲国产精品激情在线观看| 欧美剧在线免费观看网站| 久久国产欧美精品| 久久久国产精品一区| 午夜精品久久久久久久蜜桃app| 9久草视频在线视频精品| 99成人精品| 香蕉久久夜色精品国产使用方法| 亚洲五月六月| 永久久久久久| 亚洲人久久久| 免费欧美在线视频| 欧美一级电影久久| 亚洲国产成人久久综合| 国产伊人精品| 欧美午夜欧美| 99热精品在线| 亚洲免费在线视频一区 二区| 国产精品久久久免费| 小黄鸭精品密入口导航| 久久天天躁狠狠躁夜夜av| 亚洲国产精品一区制服丝袜| 久久久久九九视频| 亚洲精品小视频在线观看| 亚洲欧美日本伦理| 亚洲国产成人午夜在线一区| 欧美精品福利| 蜜乳av另类精品一区二区| 日韩视频在线一区二区| 久久九九免费| 欧美一级在线视频| 99精品国产一区二区青青牛奶| 国产一区二区黄色| 欧美国产在线视频| 欧美亚洲综合久久| 亚洲女同性videos| 欧美日韩国产999| 欧美成人精品1314www| 在线观看视频日韩| 欧美丝袜一区二区| 欧美成人精品高清在线播放| 国产精品久久久久久一区二区三区| 亚洲女ⅴideoshd黑人| 欧美国产91| 亚洲激情在线观看视频免费| 欧美大成色www永久网站婷| 亚洲国产电影| 亚洲美女免费视频| 欧美午夜激情小视频| 亚洲免费人成在线视频观看| 午夜精品一区二区三区在线视 | 免费观看成人网| 国产一区二区中文| 久久er精品视频| 免费久久久一本精品久久区| 亚洲大胆人体在线| 蜜桃av一区二区在线观看| 亚洲电影第三页| 亚洲精品国产精品久久清纯直播 | 午夜精品一区二区三区在线播放| 国产精品久久波多野结衣| 亚洲综合成人婷婷小说| 久久精品国产精品| 亚洲国产精品久久久久秋霞影院 | 午夜精品久久久久久久久久久久 | 一区二区国产日产| 国产日产精品一区二区三区四区的观看方式 | 欧美日韩99| 亚洲免费综合| 欧美风情在线观看| 亚洲一区免费网站| 激情欧美一区二区三区在线观看| 欧美v日韩v国产v| 宅男精品视频| 免费不卡亚洲欧美| aa亚洲婷婷| 黑人一区二区| 欧美日韩免费在线| 久久久精品久久久久| 日韩视频在线观看免费| 麻豆av福利av久久av| 中文日韩欧美| 亚洲国产精品第一区二区| 国产精品亚洲综合久久| 欧美精品久久99久久在免费线| 欧美一区二区视频观看视频| 亚洲免费观看在线观看| 农村妇女精品| 久久er99精品| 亚洲专区在线视频| 99精品视频免费观看| 在线观看精品视频| 国产欧美日本在线| 欧美午夜久久| 欧美日韩不卡视频| 久久综合综合久久综合| 欧美亚洲视频在线看网址| 一区二区三区欧美激情| 亚洲国产精品v| 噜噜噜91成人网| 狠狠色丁香婷综合久久| 欧美日本韩国在线| 欧美成人视屏| 久久亚洲国产精品一区二区 | 久久精品国产综合精品| 亚洲图片在线观看| 亚洲精品乱码久久久久久久久| 美女任你摸久久| 久久久美女艺术照精彩视频福利播放 | 久久青草久久| 欧美伊人久久| 亚洲欧美色婷婷| 亚洲欧美在线aaa| 午夜精品久久久久久久久 | 欧美激情一区二区三区蜜桃视频 | 亚洲电影视频在线| 蜜臀av一级做a爰片久久| 久久夜色精品| 久久综合久久综合久久综合| 久久精品理论片| 久久人人爽人人| 久久综合久久综合久久| 美女网站久久| 亚洲国产合集| 夜夜嗨av一区二区三区四季av | 欧美综合二区| 久久精品一二三区| 久久人人爽人人爽爽久久| 久久久午夜视频| 女生裸体视频一区二区三区| 欧美国产精品中文字幕| 最新国产成人av网站网址麻豆| 亚洲三级毛片| 亚洲一区二区视频| 久久精品日韩一区二区三区| 久久夜色精品国产亚洲aⅴ| 欧美成人激情在线| 欧美日韩午夜在线视频| 国产欧美日韩精品一区| 在线看片日韩| 亚洲一二三四区| 久久午夜电影网| 最新高清无码专区|