OpenCASCADE HLR Quadric Surface Outline Edge
Key Words: HLR, Outline Edge, Sihouette Edge
1 Introduction
OpenCASCADE中关于隐藏线消除HLR算法的描述就是一句话:These algorithms are based on the principle of comparing each edge of the shape to be visualized with each of its faces, and calculating the visible and the hidden parts of each edge. 即根据面判断每条边Edge的遮挡关系,计算出边Edge可见和不可见部分。所以HLR算法的输入主要为边和面,计算遮挡关系依赖线面求交算法。对于精确的HLR算法依赖精确的线面求交算法,PolyAlgo算法依赖多段线与网格求交算法。输入的边中除了BREP中的边以外,还有一类是根据投影方向计算得来的,即外轮廓线Outline,也称为Contour线。ACIS的PHLR中称轮廓线Sihouette Edge。
轮廓线的计算是HLR中比较关键的一步,本文以OpenCASCADE中简单的二次曲面的轮廓线计算入手来理解曲面的轮廓线概念,为理解任意曲面轮廓线计算打下基础。
2 Outline Builder
OpenCASCADE的HLR中使用类HLRTopoBRep_OutLiner来计算外轮廓线。轮廓线的计算依赖投影方向及投影方式,主要计算逻辑在函数Fill()中:
投影方式主要分为透视投影Perspective和平行投影,工程图生成一般使用平行投影方式。实际计算类是Contap_Contour,在类Contap_Contour中又根据投影曲面类型分为两种类型来处理:
- 二次曲面
- 任意曲面
其中函数PerformAna()为计算平面、球面、圆柱面、圆锥面的外轮廓线,最终会使用类Contap_ContAna。其中Ana为Analytical解析曲面的意思,这里指能用解析表达式表示的二次曲面。
3 Contap_ContAna
类Contap_ContAna能计算球面、圆柱面和圆锥面的外轮廓线Contour,下面我们主要来看看这三类面的外轮廓线计算结果。
对于平行投影球面会生成以投影方向为法向,以球半径为半径的一个圆,代码如下所示:
如下图所示中的绿色的线:
对于平行投影圆柱面会生成两条直线,若投影方向与圆柱面法向平行时不生成轮廓线,这时就是使用圆柱体中的上下两个圆的边。代码如下所示:
生成的两条直线方向为圆柱面的轴方向:
圆锥面的轮廓线生成函数逻辑类似,留给读者自行分析理解。
4 Conclusion
综上所述,BREP的HLR算法需要计算模型的外轮廓线。如球体的BREP边有两个退化边(极点),及两个重合边,若来投影实质上只有重合边中的一条边有用,而这个边还是个半圆。从理解 简单的二次曲面外轮廓线计算函数入手,再去深入理解任意曲面的外轮廓线计算方法。
理解HLR实现原理,可以重构HLR代码,也可以完全自己动手,开发出满足实际需求的自动出图程序,自动出图是工程类设计软件中相对核心的功能,目前国内基于PDMS做自动出图相关软件开发的就有很多家。本着开放的心态分享这些相对比较关键功能的原理,让国内这些产品能摆脱基于AutoCAD/BricsCAD开发接口或PDMS Draft的限制,开发出更好用、更自由灵活的软件。
标签:投影,HLR,Edge,OpenCASCADE,计算,轮廓线 From: https://www.cnblogs.com/opencascade/p/occt_hlr_contour.html