OpenCASCADE-HLR Edge
1 Introduction
用計算機生成三維物體的真實圖形,是計算機圖形學研究的重要內容。真實圖形在仿真模擬、幾何造型、廣告影視和科學計算可視化等許多領域都有著廣泛應用。在用顯示設備描述物體的圖形時,必須把三維信息經過某種投影變換在二維的顯示平面上繪制出來。從三維投影到二維的降維操作,會導致圖形的二義性。要消除這類二義性,就必須在繪制時消除被遮擋的不可見的線或面,習慣上稱之為消除隱藏線Hidden Line Removal和隱藏面Hidden Face Removal。
這是渲染顯示上對消隱的需求,在根據三維模型自動生成工程圖的工程設計軟件中,對消隱的需求有所不同。
工程設計軟件與機械設計軟件不同,工程設計軟件一次出圖消隱的模型量大,對出圖的算法要求主要有:
- 主要使用消隱線算法;
- 消隱得到的線能找到與三維模型的關系,方便標注模型信息,如模型名稱、規格等;
- 自動標注布局算法,能對標注的名稱、規格等自動布局,減少手工調整;
- 自動尺寸標注;
- 符號化處理,如管道模型能用一條線符號化處理;
其實最后總結成一句話就是一鍵根據模型生成能交付的圖紙。雖然現在技術上具備三維模型下車間的能力,但是目前二維圖紙依然是設計交付、加工制造主要依據。工程類設計軟件主要的功能就是快速建模,碰撞檢測和自動圖紙生成。當模型量大時,消隱速度快及自動生成的標注文字排列整齊(或滿足工程習慣)成了二維圖紙自動生成的核心技術,也是程序處理中的難點。
2 HLR
幾何內核一般都提供HLR算法,用來根據模型投影生成二維工程圖。OpenCASCADE的HLR提供了隱藏線消隱算法。
https://www.spatial.com/zh/products/cgm-hlr-hidden-line-removal
OpenCASCADE 提供了兩種消隱算法:HLRBRep_Algo和HLRBRep_PolyAlgo。這些算法都是基于相同的原理:比較形狀每條邊相對每個面的可見性,并 計算每條邊的可見部分與消隱部分。算法通過計算在指定投影方向上的物體顯示特性,去除或標記被面遮擋的邊。這兩個算法也與一些提取功能配合使用,如重構一 個簡化的模型等,簡化后新的模型由邊組成,就是在投影方向上的輪廓線。
3 邊的分類
OpenCASCADE的HLR中將邊分為以下類型:
- Sharp Edges
- Smooth Edges
- Sewn Edges
- Outline Edges
- Isoparameter Edges
從類HLRBRep_HLRToShape和類HLRBRep_PolyHLRToShape中給出了這些邊的一些定義。其中Sharp Edge表示C0連續(非G1連續)的邊,就是一般Edge;
Smooth Edge表示G1連續(非G2 連續)的邊;
Sewn Edge表示G2連續的邊;
Outline Edge表示模型的輪廓邊,這種類型的邊不在BREP數據中,需要根據投影方向生成;
Isoparameter Edge表示面的等參線生成的邊,這種類型的邊不也不在BREP數據中;
其中Sharp Edge、Smooth Edge和Sewn Edge一般都是BREP中的EDGE數據,而Outline Edge和Isoparameter Edge是根據設置額外生成的邊。理解邊的這些定義,方便對HLR算法進行理解。HLR算法是相對簡單的算法,主要是就將上述五種類型的邊與面進行求交,判斷遮擋關系。
目前OpenCASCADE中的HLR算法代碼寫得有點亂,上次在深圳ogg的俄羅斯開發人員提到要重構HLR部分的代碼。深入理解 HLR算法,為自動生成圖紙功能打下基礎。