<center id="iceyg"><tr id="iceyg"></tr></center>
<noscript id="iceyg"></noscript>
<center id="iceyg"></center>
<noscript id="iceyg"></noscript>
<noscript id="iceyg"></noscript>
posts - 405, comments - 572, trackbacks - 0, articles - 0

OpenCASCADE Incremental Mesh

Posted on 2018-12-31 22:45 eryar 阅读(457) 评论(0)  编辑 收藏 引用 所属分类: 2.OpenCASCADE

OpenCASCADE Incremental Mesh

[email protected]

 

Abstract. OpenCASCADE IncrementalMesh is used to build the mesh of a shape with respect of their correctly triangulated parts. The blog focus on the deflection control of the algorithm.

 

Key Words. Mesh, Visualization

 

1. Introduction

Mesh是生成三维模型显示数据的关键算法。OpenCASCADETKMesh提供了网格剖分算法,用于生成BREP体的显示数据。原来的一些文章对网格剖分的算法及其用法进行过说明,本文主要对网格剖分的核心部分进行深入挖掘,理解其剖分精度控制原理。?#34892;?#36259;的读者可以结合源码,学习其实现方法。当理解其算法原理后,也可以自己实现一套结合?#23548;?#38656;求的高?#38405;?#32593;格剖分库。

网格剖分的主要流程如下:

 

遍历TopoDS_ShapeTopoDS_Face,对于每个TopoDS_Face,遍历其TopoDS_Wire,对于每个TopoDS_Wire遍历其TopoDS_Edge,在根据EdgeFace得到PCurve。因为TopoDS_Wire是闭?#31995;模?#25152;以WirePCurve是在参数空间闭合区域。对PCurve围成的参数区域进行三角剖分,将三角剖分的结果?#25104;?#21040;三维空间,最终生成每个Face的网格剖分。这个流程很好理解,但是如何对网格剖分的质量进行控制呢?即用相对少的三角网格来更好地表示三维模型呢?

 

2. Mesh Deflection Control

OpenCASCADEBRep体进行三角剖分网格化的类是BRepMesh_IncrementalMesh,此类有两个主要的选项来控制三角网格化?#21512;?#24615;偏差Linear deflection和角度偏差Angular deflection

三角网格剖分第一步是将所有的边Edge进行离散,即根据一定的精度生成多段线;

 

线性偏差限?#35780;?#25955;的多段线与曲线之间的距离;角度偏差限制每段线段端部切线的夹角。

第二步是对面进行三角剖分。线性偏差也限?#35780;?#25955;的三角形中点?#35282;?#32447;的距离。

 

应用程序应该提供?#23454;?#30340;偏差参数以达到生成满意的三角网格。角度偏差Angular deflection比较简单?#20197;?#35768;使用一个默?#29616;擔?/span>12~20度)。线性偏差Linear deflection有绝对的含义,需要由程序来给定正确的值。给一个很小的线性偏差值会导致网格剖分过密,消耗大量内存及影响显示效率;但是值太大得到的网格效果就是显示失真。所以对于LOD的网格来说,需要根据模型尺寸来设置相应的线性偏差值。

上面对网格剖分的参数设置进行?#31169;?#32461;,下面对网格剖分的实现原理进行说明。因为曲线曲面是三维的,而对曲面进行剖分的底层三角剖功能是个二维三角剖分库,所以网格剖分总的思路是对曲线在二维参数空间进行剖分,将参数空间剖分的结果通过曲面参数方程?#25104;?#22238;到三维空间。通过对pcurve围成的参数空间闭合区域进行二维三角剖分,即可对三维曲面进行剖分。类BRepMesh_FastDiscretFace是对每个TopoDS_Face进行离散,其中函数control()是用来控制生成网格的质量的。

 

最多迭代次数是11次。在每一次迭代过程中,检查生成的所有三角形在参数空间?#34892;?#28857;处与曲面的距离是否满足线性偏差,如果不满足,则插入新的点以便下次迭代。

 

从上面的代码可以看出其实现思路与其类名Incremental还是很贴切的,即增量法。

 

 

3. Conclusion

OpenCASCADE的网格剖分中网格质量控?#21078;?#30456;对重要的核心功能。在理解其原理后,可以自己实现一个更清晰的网格剖分库。

 

2018年就过结束了,这一年收获颇丰,其中最大的收获就是有了自己的小宝宝。

 

分享创建价值。虽然OpenCASCADE不是完美的,但是她是目前世界上唯一一款功能相对完善的开放的几何造型库。OpenCASCADE的开放分享,给她带来生机。当他人因为我的blog的分享的文章或代码联系我时,他们的一声感谢,我都会觉得很高兴。

 

2019年马上就要到来,希望大?#20197;?#26032;的一年里,创造、创新,突破自我,更上一层楼!


为了方便大?#20197;?#31227;动端也能看到我的博文和?#33268;?#20132;流,现已注册微信公众号,欢迎大家扫描下方二维码关注。
Shing Liu(eryar@163.com)

只有注册用户登录后才能发表评论。
?#23601;?#33616;】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


安徽快3网
<center id="iceyg"><tr id="iceyg"></tr></center>
<noscript id="iceyg"></noscript>
<center id="iceyg"></center>
<noscript id="iceyg"></noscript>
<noscript id="iceyg"></noscript>
<center id="iceyg"><tr id="iceyg"></tr></center>
<noscript id="iceyg"></noscript>
<center id="iceyg"></center>
<noscript id="iceyg"></noscript>
<noscript id="iceyg"></noscript>