因本人属于在OCC以及OSG领域是小白水平,因此文章可能存在错误的地方,恳请指正。
因为对几何建模比较有兴趣,而且受身边的人的影响,所以利用晚上和周末的时间写了一个简单的基于QT5+OCC7.0+OSG3.4的初级3D CAD(准确来说不算CAD,算是3D模型查看器)。
主要功能有: 读取3D文件,如图:
视角切换、按住滚轮拖动模型、放大缩小、视觉样式显示、导出文件功能。其他操作在接下来可以具体看见。
首先看下我的软件界面:
我对QT并熟悉,虽然我比较熟悉C++ 以及 MFC,但是还是比较欣赏QT的精美界面。我把这个查看器命名为OCCAD,,软件打开是如上图的样式,我采用的是QT MDI的多文档操作,每新增一个文档就新增一个显示窗口,先来看下新建窗口是怎么样的:
关于OSG怎么嵌入QT窗口,我想在网上也是有很多参考的文章,这里就不多说了,关于怎么实现右下角的坐标系,我推荐参考图形码农老师的这篇文章:https://blog.csdn.net/wang15061955806/article/details/49617055,我的就是参考这个实现的,具体实现的代码是:
因为OSG自己能读取很多图形文件,比如OBJ,STL,OSG等等。但是不能直接读取STP/STEP,IGS/IGES等文件,因此可以利用OCC接口读取这些文件的几何数据,然后离散化显示到OSG中,比如读取IGS文件可以这么写:
关于函数BuildShapeMesh,可以参考小胖七少爷老师的这篇:解析OCC(TopoDS_Edge、Geom_Surface、TopoDS_Shape),生成OSG节点_occ 节点-CSDN博客,读取STP文件也是类似的,都是使用了这个BuildShapeMesh函数,这个小程序还实现了视角切换功能,如图:
部分视角参考如下:
五个文件中的模型是同一个模型,因为OSG支持导出OBJ,STL,OSG,所以我也把这个现有的导出写了下。顺便提下QT多文档的窗口切换是使用了QSignalMapper,如图:
自动添加菜单项,点击能实现正常的窗口切换,数字7/8/9/10...初步设定为快捷方式没因为0-6被用于视图切换。
继续聊下显示的模式,我实现了6种: 有2中是针对OBJ,STL文件的,具体效果如图:
关于如何针对IGS和STEP文件显示模型的线框模式,核心代码如下:
BuildPolyLineMesh函数就是遍历模型的所有的EDGE,我是参考的eryar老师的代码,并做了一些小修改。具体为:
导出功能目前直接用的OSG自带的,暂时没有添加新的处理,导出函数是osgDB::writeNodeFile。
后续功能我将进一步探索,目标是实现一个简易CAD,如有错误,请及时联系我修改: QQ:1623451686。