APP下载

基于OpenCASCADE 内核与OpenSceneGraph 渲染引擎的三维网格划分平台研究

2021-11-15谭凤

魅力中国 2021年44期
关键词:二次开发内核开源

谭凤

(湖南科技职业学院,湖南 长沙 410004)

一、前言

目前的主流 CAD 软件都是建立在造型内核的基础上开发的,例如AutoCAD、CATIA 采用的内核是 ACIS,UG、SolidWorks、SolidEdge 和ANSYS 的内核是 Parasolid,而国内的 CAXA 系统对上述两种内核都有应用[1]。OpenCASCADE(简称OCC)也是一种造型内核,其实际上就是一个类库,定义了图形数据的存储格式以及大量的图形算法。OCC 是法国MDTV(Matra Datavision)公司开发的开源 3D 几何造型引擎,是一个先进的、三维的、边界表示(B-Rep)为主的几何造型工具包,是由 C++开发设计基于OpenGL 的专用快速开发的 CAD 类库[2]。

OCC 主要用于开发二维和三维几何建模应用程序,包括通用的或专业的计算机辅助设计CAD 系统、制造或分析领域的应用程序、仿真应用程序或图形演示工具。OCC 通过有机组织的C++库文件提供了六个模块,可视化模块作为OCC 的核心部分,是可视化技术的具体体现。OCC 源代码完全开放,所以无版权问题,适合课题研究使用,并且拥有持续的维护团队,在应用中具有较大的优势。OpenCASCADE 技术可以用于包括 CAD/CAM/CAE等方面的众多三维应用程序的开发。从九十年代中期开始,己经被许多不同领域的商业公司用来开发自己的软件产品[3]。

OpenSceneGraph(简称OSG)是一个开源的高性能三维图像渲染工具包,其完全是由标准C++程序和OpenGL 编写,充分利用STL 和设计模式,发挥开源开发模型的优势来提供一个免费的开发库,并且重点集中在用户的需求上,一般用于视觉仿真、游戏、虚拟现实、科学可视化和建模等领域[4]。随着使用一个全特性的场景图OSG的关键优势在于它的性能、可扩展性、可移植性和快速开发,目前已经有很多成功的基于OSG 的应用,比如景区模拟系统[5]、卫星可视化仿真系统[6]、林地可视化系统[7]、校园可视化系统[8]等,效果不亚于商业视景渲染软件。

CAD/CAE 平台在国内更多的是基于二次开发,比如AutoCAD 二次开发,UG 二次开发,REVIT 二次开发等,这些开发都是依赖于特定的平台,受限很多。而且CAD/CAE 软件售价高昂,成套的CAD/CAE 软件动辄就是百万价格,很多软件使用者无力承担,如果能够针对中小企业提供一个精简高效的CAD/CAE 软件,并根据具体需求增加特定功能,这有利于节省成本,提高工作效率。

OCC 是一个开源的几何建模库,利用这个几何建模库不仅能建立复杂的几何模型而且该库还支持大多数的主流3D 文件格式,直接使用OCC 开源内核能快速的实现高效建模和模型文件的解析;而OSG 是一个开源的三维渲染引擎,具备高性能、跨平台、快速开发等特点,对于大规模渲染来说,OSG 有比较优势;在三维网格划分算法的选择上,采用了Netgen 与Gmsh开源网格算法,二者皆是在三角形和四面体划分领域具备极高的价格,其网格质量能够达到商业水准,因此通过对Netgen 与Gmsh 增加部分接口能快速的实现网格划分。

二、系统实现设计流程

本系统主要分为四个大类:数据驱动采用OCC,对读取的模型文件数据用OCC 解析并保存;模型渲染与交互采用OSG,通过对OCC 数据进行三角化转换为OSG 几何数据,进而在OSG 中可视化;系统界面使用QT5,通过将OSG 嵌入QT 中实现一个可视化、可交互的三维空间;网格采用Netgen 与Gmsh,通过将Netgen 与Gmsh 配合OCC 进行重新编译,并且新增以OCC 数据支持类型的接口,方便直接对模型进行划分。系统设计流程如下图1 所示:

通过读取STEP、IGS 文件,利用OCC 的OCAF 进行解析,能获得模型文件的装配体结构,系统将这些数据进行存储;利用OSG 对这些存储的数据进行三角化处理后,用OSG 进行显示;在网格划分阶段,通过交互方式选中一个或者多个模型零件后,设置网格参数后对这些零件进行网格划分,并用OSG 显示结果。

三、系统详细设计

(一)OCC 数据驱动

本系统利用OCC 接口直接读取STEP、IGS 文件后获取模型数据,这些数据主要包括:

表1 模型数据类型说明

(二)OSG 显示与交互

OSG 显示模型主要是通过三角化操作实现的,然后获取所有的三角形即可,因此OSG 接口数据主要有:

表2 接口数据类型说明

(三)网格划分与显示

划分网格采用Netgen 与Gmsh 开源网格划分算法,对其进行集成时需要新增或者修改接口,例如在Netgen 就没有直接以模型数据为接口参数的API,因此需要自行新增以模型数据为参数的接口设计,Gmsh 也是类似的,本系统新增了2 个接口,通过将TopoDS_Shape 数据传作为参数输入,得到网格划分结果,接口描述如下:

表3 接口函数说明

Netgen 网格划分参数设置如下:

表4 Netgen 网格划分参数说明

Gmsh 网格划分参数设置如下:

表5 Gmsh 网格划分参数说明

四、系统实现效果

本系统命名为OCCAD,采用QT 多文档的设计框架,初始化效果如下图:

(一)读取模型文件的效果如下:

读取文件格式目前支持STEP、IGS 格式,模型显示在OSG 场景中,左侧的模型装配体结构利用OCC 的XCAF 框架解析,通过遍历方式将零件按照树形结构存储,再利用qt 树形控件显示出来。

(二)模型装配体树显示

利用OCC 的XCAF 实现对模型文件的装配遍历,并根据模型装配直接的相互关系,构建一颗树,效果如下图所示:

(三)视角切换与模式切换

具备基本的视角切换,支持六视图操作与手势操作,支持三种模型显示模型切换:线框模式、实体模式、实体线框模式。效果如下图:

(四)Netgen 网格划分

编译带OCC 选项的Netgen C++动态库,同时新增一个以模型为参数的接口Ng_OCC_Load_Shape(TopoDS_Shape &shape)实现针对交互选择的特定子模型进行网格划分,通过设置参数实现自动划分,效果如下所示:

(五)Gmsh 网格划分

编译带OCC 选项的Gmsh C++动态库,新增一个以模型为参数的接口:import Shapes Native Pointer(Topo DS_Shape&shape,gmsh::vectorpair &out Dim Tags,const bool highest Dim Only=true)实现交互选择子模型进行网格划分,效果如下图所示:

五、结语

本文实现了一个基于QT 框架下,OCC 与OSG 相结合的三维网格划分系统,通过集成、修改Netgen 与Gmsh 网格接口实现了对STEP、IGS 模型能进行高质量的划分并快速显示,从底层内核开发系统的方式,改变了以往基于商业平台进行二次开发的环境需求,利用开源的内核、显示引擎与开源算法集成,结合了OCC 与OSG 各自领域的优势,以及Netgen 与Gmsh 在网格划分领域内的高质量效果,通过集成的方式实现自主可控,为CAD/CAE 系统的自主研发提供了思路。

猜你喜欢

二次开发内核开源
AutoCAD 与PDMS 二次开发在三维复杂形体设计建模上的应用
多内核操作系统综述①
校园武术“学、练、赛”一体化实践探索
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
传播开源精神 共迎美好未来
例谈对高中数学教材中习题的二次开发
浅谈CAD软件二次开发的方法及工具
五毛钱能买多少头牛
2019开源杰出贡献奖