posts - 418, comments - 576, trackbacks - 0, articles - 0

Mesh BRep Shapes

Posted on 2019-01-06 10:49 eryar 阅览(588) 谈论(0)  修改 保藏 引证 所属分类: 2.OpenCASCADE

Mesh BRep Shapes

eryar@163.com

Abstract. 当对OpenCASCADEBRep表明法的数据结构有了必定的了解后,主张能够自己完成一个显现数据生成的功用,即网格剖分功用。

Key Words. BRep, Mesh, Triangulation

1. Introduction

OpenCASCADE中网格剖分功用是很重要的一个模块,他可用于生成模型的可视化数据,还可用于HLR消隐,关于离散求交算法也是依据网格数据。OpenCASCADE开源版别中的模块TKMesh能够用来生成网格的显现数据,首要的类为BRepMesh_IncrementalMesh

在运用BRepMesh_IncrementalMesh的过程中发现其剖分精度高,且精度不便于操控。如对一个球进行网格剖分,想得到一个粗糙的作用,即一个多边形,运用BRepMesh_IncrementalMesh是不容易得到的。

如上图所示为同一个球的不同的剖分精度得到的模型。为了能准确操控网格剖分精度,以便后期运用LOD等优化算法,自己完成一个网格剖分功用。

网格剖分的首要思路便是遍历每个TopoDS_FaceTopoDS_Wire,依据Wire找到鸿沟或面上的孔洞。将Wire对应到二维参数空间,并对二维参数空间中的鸿沟先进行一次三角网格剖分。关于平面来说,只需要这一步就能够满足可视化的要求。关于其他曲面来说,就需要在二维参数空间中额定刺进一些点,以使终究生成的网格满足剖分精度要求。最终将二维参数空间的三角剖分映射到三维空间。

2. Mesh Boundary Region

由于运用BRepBuilderAPI_MakeFace能够经过Add(TopoDS_Wire)来增加面上的开孔,所以一个TopoDS_Face会有大于1个的TopoDS_Wire。找出外鸿沟和内孔Wire后可进行一次三角剖分,如下图所示:

 

如上图所示,关于平面而言,直接对鸿沟及内孔进行一次三角剖分即能够得到满足的网格数据。关于曲面而言,这显然是不满足精度要求的。

 

如上图所示为球面的第一次对鸿沟进行三角剖分得到的作用。由于在一个参数上的边是退化Degenerated边,所以退化边的参数空间上没有均分。将参数空间的三角剖分映射到三维空间后,得到的是一条线,其实是两个非退化边。

 

3. Deflection Control

关于曲面来说,假如直对鸿沟进行一次三角剖分,是达不到精度要求。为了使曲面网格剖分作用更好,就需要对按鸿沟剖分后的网格进行刺进点持续剖分。关于上面球面的参数空间区域,依据精度要求刺进点剖分后的成果如下图所示:

 

得到的三维作用如下图所示:

 

4. Demo

下面给出几个自己完成网格剖分的成果与OpenCASCADETKMesh作个比照:

 

上图为自己完成网格剖分算法对椭球面的网格剖分成果

 

上图为TKMesh网格剖分算法对椭球面的网格剖分成果

 

上图为自己完成网格剖分算法对椭圆环面的网格剖分成果

 

上图为TKMesh网格剖分算法对椭圆环面的网格剖分成果

经过上面的比照能够发现,在大致相同的显现作用情况下,OpenCASCADE发生了更多的极点和三角形数据。自己完成的网格剖分发生的网格质量相对可控且功用高。 

5. Conclusion

OpenCASCADE中开源的网格剖分库TKMesh能够完成模型的可视化数据生成功用,可是关于网格剖分的精度可控性差。为了对模型的网格精度进行更好地操控,自己完成一套网格剖分功用,且功用要优于TKMesh。在程序的编写过程中,能够加深BREP数据结构中一些概念的了解。有爱好的读者在了解BREP数据结构后,也能够测验下网格剖分功用的完成。


为了便利我们在移动端也能看到我的博文和谈论沟通,现已注册微信大众号,欢迎我们扫描下方二维码重视。
Shing Liu(eryar@163.com)