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

eryar

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

OpenCASCADE Hidden Line Removal

Posted on 2015-01-05 18:39 eryar 閱讀(4951) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE 、4.AVEVA Solution

OpenCASCADE Hidden Line Removal

eryar@163.com

Abstract. To provide the precision required in industrial design, drawings need to offer the possibility of removing lines, which are hidden in a given projection. OpenCASCADE provides two algorithms for this Hidden Line Removal component. The paper mainly translate the document of OpenCASCADE Modeling Algorithms, and give some applications in the plant design CAD software.

Key Words. OpenCASCADE, HLR, Hidden Line Removal

1. Introduction

用計算機生成三維物體的真實圖形是計算機圖形學研究的重要內容,在用顯示設備描述物體時,必須把三維的信息經過某種投影變換,在二維的顯示平面上繪制出來。由于投影變換失去了深度信息,往往導致圖形的二義性。要消除這類二義性,就必須在繪制時消除被遮擋的不可見的線或面,習慣上稱之為消除隱藏線(Hidden Line Removal)或消除隱藏面(Hidden Face Removal)。在工程應用中,需要根據三維模型自動生成二維的圖紙,用于指導生產。其中二維圖紙中主要包括三維模型的消隱圖、尺寸標注及件號標注等內容。如圖1.1所示為某CAD軟件中自動根據三維模型生成二維圖紙的效果圖:

wps_clip_image-698

Figure 1.1 Drawing generated from 3D model by PDMS

上圖1.1所示為PDMS軟件中自動生成的圖紙,圖紙中的圖形區的管道模型就是根據三維模型自動投影及消隱后生成的。還生成尺寸標注及管道名稱,以及右上角所件號標示或材料表等相關信息。

盡管現在3D PDF格式很流行,但是二維的生產圖紙在目前國內的設計及施工單位中還是不可或缺的。當模型量大時,消隱速度快及自動生成的標注文字排列整齊(或滿足工程習慣)成了二維圖紙自動生成的核心技術,也是程序處理中的難點。

消隱算法的原理其實很簡單,只要滿足兩個條件:

v 物體A在物體B的后面;

v 物體A與物體B在投影平面上有重疊部分;

前一個條件實際上是廣義的,既可以是物體,也可以是面或線等。命題物體A在物體B后面成立,消隱計算就變成一個二維問題:物體A與物體B在投影平面上的重疊部分就是A被消除的部分。經過投影變換后,物體在投影平面上所占據的區域稱為物體的落影區,物體上任何一點的投影均落在此落影區內。顯然,若空間有兩個物體的落影區是重疊的,則位于后面的物體將被前面的物體遮擋,被遮擋的部分就是落影區重疊的部分。消隱過程就是求取兩者的公共部分,且由第三維深度坐標來判斷兩者的前后的過程。因為是線輸出,這個過程就是一條條線與每一物體(面)的比較過程,最后可見部分的交集即為此線的最終可見部分。

OpenCASCADE提供了兩種消隱算法:HLRBRep_Algo和HLRBRep_PolyAlgo。這些算法都是基于相同的原理:比較形狀每條邊相對每個面的可見性,并計算每條邊的可見部分與消隱部分。算法通過計算在指定投影方向上的物體顯示特性,去除或標記被面遮擋的邊。這兩個算法也與一些提取功能配合使用,如重構一個簡化的模型等,簡化后新的模型由邊組成,就是在投影方向上的輪廓線。

HLRBRep_Algo是根據模型來計算的一種高精度的算法,而HLRBRep_PolyAlgo是基于離散數據的算法。當使用HLRBRep_Algo時可以得到精確結果,而使用HLRBRep_PolyAlgo可以提高計算速度。他們兩個算法都可以處理任意類型的模型,如組合體、面或線,但也有些約束,如下情況就未被處理:

v 點未被處理;

v Z平面上沒有被裁剪;

v 無限面或線沒有處理;

如圖1.2所示為OpenCASCADE中的一些邊的定義:

wps_clip_image-21746

Figure 1.2 Sharp, smooth and sewn edges in a simple screw shape

圖1.3中的實線為同相形狀的外輪廓線,虛線部分為等分參數線。

wps_clip_image-12863

Figure 1.3 Outline edges and isoparameters in the same shape

wps_clip_image-8933

Figure 1.4 An extraction showing hidden sharp edges

如圖1.4可以看出,藍色虛線即為被遮擋的應該被去除的線。

2.HLR Usage

OpenCASCADE隱藏線去除算法的使用涉及以下幾個步驟:

2.1 Loading Shapes

通過使用HLRBRep_Algo::Add()函數來將需要被消隱的形狀加入到消隱算法中去。對于HLRBRep_PolyAlgo對象,使用HLRBRep_PolyAlgo::Load()函數來添加一個或多個需要處理的形狀。

2.2 Setting View Parameters

通過函數HLRBRep_PolyAlgo::Projector()來設置投影方向,其參數為一個HLRAlgo_Projector對象。一般會根據三維視圖數據來得到這個投影數據,進而來設置需要消隱的投影參數。

2.3 Computing the Projections

通過類HLRBRep_PolyAlgo中的函數HLRBRep_PolyAlgo::Update()來計算模型的外輪廓。當用類HLRBRep_Algo時,使用HLRBRep_Algo::Update()這個算法時,必須調用方法HLRBRep_Algo::Hide()來計算模型可見與隱藏線。使用類HLRBRep_PolyAlgo時,可見與隱藏線是通過HLRBRep_PolyHLRToShape來計算。

2.4 Extracting Edges

通過類HLRBRep_HLRToShape和HLRBRep_PolyHLRToShape來提取消隱后的模型數據,提取數據來源分別對應HLRBRep_Algo和HLRBRep_PolyAlgo對象??商崛〉念愋陀校?

v Visible/hidden sharp edges;

v Visible/hidden smooth edges;

v Visible/hidden sewn edges;

v Visible/hidden outline edges;

提取操作是由函數HLRBRep_PolyHLRToShape::Update來實現。

3.Examples

為了產生與AVEVA PDMS的Draft功能模塊類似的功能,就需要隱藏線消除算法來自動根據模型生成二維圖紙。如下代碼為測試HLR算法的一個簡單示例:

osg::Node* TestPolyHlr(void)
{
    osg::ref_ptr
<osg::Geode> aGeode = new osg::Geode();
    osg::ref_ptr
<osg::Geometry> aLineGeometry = new osg::Geometry();
    osg::ref_ptr
<osg::Vec3Array> aVertices = new osg::Vec3Array();

    TopoDS_Shape aPipeModel;
    BRepTools::Read(aPipeModel, 
"d:/PipeModels/2007.brep", BRep_Builder());

    BRepMesh_IncrementalMesh aMesher(aPipeModel, 
0.1);

    OSD_Timer aTimer;
    aTimer.Start();

    Handle_HLRBRep_PolyAlgo aHlrPolyAlgo 
= new HLRBRep_PolyAlgo();

    HLRAlgo_Projector aProjector;
    HLRBRep_PolyHLRToShape aHlr2Shape;

    aHlrPolyAlgo
->Load(aPipeModel);

    aHlrPolyAlgo
->Projector(aProjector);
    aHlrPolyAlgo
->Update();

    aHlr2Shape.Update(aHlrPolyAlgo);

    aTimer.Stop();
    aTimer.Show(std::cout);

    
for (TopExp_Explorer e(aHlr2Shape.VCompound(), TopAbs_EDGE); e.More(); e.Next())
    {
        TopoDS_Edge anEdge 
= TopoDS::Edge(e.Current());
        TopoDS_Vertex aFirstVertex 
= TopExp::FirstVertex(anEdge);
        TopoDS_Vertex aLastVertex 
= TopExp::LastVertex(anEdge);
        gp_Pnt aFirstPoint 
= BRep_Tool::Pnt(aFirstVertex);
        gp_Pnt aLastPoint 
= BRep_Tool::Pnt(aLastVertex);

        aVertices
->push_back(osg::Vec3(aFirstPoint.X(), aFirstPoint.Y(), aFirstPoint.Z()));
        aVertices
->push_back(osg::Vec3(aLastPoint.X(), aLastPoint.Y(), aLastPoint.Z()));
    }

    
for (TopExp_Explorer e(aHlr2Shape.OutLineVCompound(), TopAbs_EDGE); e.More(); e.Next())
    {
        TopoDS_Edge anEdge 
= TopoDS::Edge(e.Current());
        TopoDS_Vertex aFirstVertex 
= TopExp::FirstVertex(anEdge);
        TopoDS_Vertex aLastVertex 
= TopExp::LastVertex(anEdge);
        gp_Pnt aFirstPoint 
= BRep_Tool::Pnt(aFirstVertex);
        gp_Pnt aLastPoint 
= BRep_Tool::Pnt(aLastVertex);

        aVertices
->push_back(osg::Vec3(aFirstPoint.X(), aFirstPoint.Y(), aFirstPoint.Z()));
        aVertices
->push_back(osg::Vec3(aLastPoint.X(), aLastPoint.Y(), aLastPoint.Z()));
    }

    aLineGeometry
->setVertexArray(aVertices);
    aLineGeometry
->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES, 0, aVertices->size()));

    aGeode
->addDrawable(aLineGeometry);

    
return aGeode.release();
}

根據上述用法介紹一步一步來,就可以生成只包含線段數據的消隱后的結果,然后再在OpenSceneGraph中顯示結果如下圖所示:

wps_clip_image-27133

Figure 3.1 HLR for pipe model

wps_clip_image-29066

Figure 3.2 HLR pipe model in OpenSceneGraph

wps_clip_image-3222

Figure 3.3 HLR time usage

由圖3.2可知,一個簡單的管道模型經過HLRBRep_PolyAlgo消隱后,產生很多線段數據,但是由圖3.3可知,HLR消隱速度還是比較快的。因為HLRBRep_PolyAlgo是基于離散網格及可視化數據的,所以當離散精度降低時,會產生較少數據。如下圖為降低離散精度后,產生的線段數據明顯減少。

wps_clip_image-3530

Figure 3.4 HLR pipe model in less tesslate precision

wps_clip_image-7385

Figure 3.5 HLR pipe model in less tesslate precision time usage

由圖3.4和圖3.5可知,當降低模型的離散精度時,在不影響消隱后二維圖形質量的情況下,消隱后產生的線段數據明顯減少,且消隱算法的速度也明顯要快很多。所以離散精度也是HLR消隱算法的一個關鍵因素,使用消隱HLR算法時需要選擇合適的離散精度。

4.Conclusion

綜上可知,OpenCASCADE的隱藏線消除HLR算法使用起來還是比較簡單的,不過徹底理解算法,還是需要靜下心來,Debug進代碼,在理解大概原理的基礎上,對其實現作進一步的理解。

要使用OpenCASCADE的HLR算法,只要指定好投影參數及加載好待消隱的模型,即可得到消隱后的模型的二維數據了。若想加快算法速度事減少模型的二維輪廓數據,則需要選擇合適的網格離散精度。

5. References

1. OpenCASCADE Modeling Algorithms User Guide6.8.0 2014

2. 何援軍. 計算機圖形學. 機械工業出版社. 2010

3. 孫家廣. 計算機圖形學. 清華大學出版社. 2000

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区3d动漫同人无遮挡| 久久婷婷久久| 亚洲欧美另类久久久精品2019| 亚洲人成网站777色婷婷| 亚洲人午夜精品| 日韩午夜电影| 国产一区 二区 三区一级| 国产精品99久久久久久白浆小说 | 欧美一区1区三区3区公司| 欧美一区二区日韩| 另类综合日韩欧美亚洲| 亚洲国产精选| 亚洲三级网站| 欧美一区=区| 欧美成人一区二区三区在线观看| 欧美日韩一区二区三区在线看 | 国产精品高潮粉嫩av| 国产日韩综合一区二区性色av| 狠狠色香婷婷久久亚洲精品| 日韩一级大片| 久久久久亚洲综合| 日韩亚洲欧美一区二区三区| 午夜电影亚洲| 欧美日韩精选| 亚洲国产精品毛片| 欧美一区二区三区日韩视频| 欧美黄色aa电影| 亚洲欧美综合网| 欧美日韩国产成人精品| 韩国av一区| 亚洲欧美视频一区| 亚洲国产日韩一级| 久久九九国产精品怡红院| 国产精品jvid在线观看蜜臀 | 午夜久久影院| 亚洲经典三级| 久久久久国产精品一区三寸| 欧美午夜精品久久久久久人妖| 亚洲国产日韩欧美在线图片| 久久精品亚洲一区二区三区浴池| 亚洲免费大片| 欧美freesex8一10精品| 精品成人在线视频| 久久精品国产2020观看福利| 亚洲四色影视在线观看| 欧美日韩99| 9色国产精品| 亚洲国产综合在线| 女生裸体视频一区二区三区| 伊人久久亚洲热| 葵司免费一区二区三区四区五区| 午夜影院日韩| 国产亚洲精品久久久久婷婷瑜伽| 午夜国产精品视频免费体验区| 日韩午夜电影在线观看| 欧美精品亚洲精品| 亚洲免费高清视频| 亚洲精品激情| 欧美日韩视频一区二区| 亚洲欧美日韩另类| 欧美三级午夜理伦三级中文幕 | 久久午夜视频| 久久精品1区| 永久免费毛片在线播放不卡| 久久婷婷激情| 久久久噜噜噜久噜久久| 韩国视频理论视频久久| 久久婷婷激情| 蜜臀久久99精品久久久久久9 | 国产精品色午夜在线观看| 亚洲一区二区三区乱码aⅴ| 99精品久久| 国产乱码精品一区二区三区不卡| 欧美亚洲三区| 久久久91精品国产| 亚洲欧洲精品成人久久奇米网| 亚洲国产精品999| 欧美日韩国产不卡在线看| 亚洲系列中文字幕| 先锋影音久久| 亚洲激情综合| 99视频日韩| 国产一区视频在线观看免费| 欧美成人激情视频| 欧美日韩在线视频一区二区| 欧美在线视频网站| 久久久亚洲国产美女国产盗摄| 亚洲欧洲一区二区在线观看| 夜夜嗨av一区二区三区网页| 国产午夜精品全部视频在线播放| 免费观看日韩av| 国产精品a级| 欧美成人免费大片| 国产精品豆花视频| 欧美成人第一页| 国产伦精品一区| 亚洲黄色在线观看| 国产亚洲成av人在线观看导航| 欧美激情网站在线观看| 国产精品日韩欧美综合| 欧美激情国产高清| 国产精品无码永久免费888| 欧美国产一区二区在线观看 | 亚洲一区二区三区乱码aⅴ蜜桃女| 国产一区二区精品在线观看| 亚洲九九精品| 亚洲国产专区校园欧美| 亚洲欧美日韩中文视频| 亚洲精品专区| 久久精品国产91精品亚洲| 亚洲视频电影图片偷拍一区| 久久福利毛片| 午夜精彩视频在线观看不卡 | 欧美一区视频| 欧美高清在线一区| 久久一二三四| 国产伦精品一区二区三| 亚洲精品乱码久久久久| 激情欧美一区二区三区| 亚洲午夜一区二区三区| 亚洲精品国精品久久99热一| 久久精视频免费在线久久完整在线看| 亚洲调教视频在线观看| 欧美高清在线观看| 欧美激情二区三区| 亚洲二区在线视频| 久久久水蜜桃av免费网站| 欧美伊人久久| 国产日韩亚洲欧美综合| 亚洲欧美日韩精品一区二区| 亚洲免费在线观看视频| 欧美日韩在线免费观看| 日韩天堂在线观看| 一区二区三区视频在线| 欧美精品三级| 亚洲毛片av| 一区二区三区 在线观看视| 欧美激情视频给我| 亚洲欧洲免费视频| 99在线精品视频| 欧美午夜精品一区| a4yy欧美一区二区三区| 日韩亚洲国产欧美| 欧美特黄一级| 亚洲欧美日韩在线播放| 久久久91精品国产一区二区三区| 国产一区二区高清| 久久久久国产精品午夜一区| 欧美成年人视频网站| 亚洲欧洲一区二区在线观看| 欧美精品一区二区三区四区| 亚洲美女电影在线| 午夜精品国产更新| 激情婷婷欧美| 欧美激情视频在线免费观看 欧美视频免费一 | 久久婷婷av| 久久一区二区三区四区| 在线播放不卡| 欧美日本精品一区二区三区| 一区二区三区精品| 久久午夜羞羞影院免费观看| 最近中文字幕日韩精品| 国产精品成人免费| 久久精品国产69国产精品亚洲| 久久精品免费| 亚洲六月丁香色婷婷综合久久| 欧美日韩在线直播| 久久久www成人免费无遮挡大片 | 性久久久久久久久久久久| 玖玖综合伊人| 一区二区三区视频在线看 | 午夜精品久久99蜜桃的功能介绍| 性欧美1819性猛交| 欧美大胆成人| 亚洲一区视频在线| 激情综合激情| 欧美色道久久88综合亚洲精品| 亚洲欧美日韩精品久久久久| 亚洲高清不卡一区| 欧美一区二视频| 日韩亚洲成人av在线| 国产日韩欧美在线| 欧美日本在线| 另类尿喷潮videofree| 亚洲视频高清| 亚洲国产天堂久久综合| 久久久999成人| 中文在线一区| 亚洲精品免费一二三区| 韩国精品在线观看| 国产精品入口尤物| 欧美日韩成人激情| 久久综合影音| 久久国产精品99久久久久久老狼| 日韩视频专区| 日韩一区二区久久| 亚洲人成亚洲人成在线观看图片| 久久久噜噜噜久久中文字免| 午夜视频在线观看一区二区三区| 亚洲精选在线观看|