STL文件格式的机械零件网格化剖分技术研究
2016-12-12陈智渊冯骜骜
陈智渊,冯骜骜
(1.青海师范大学 民族师范学院 青海 海南藏族自治州 813000;2.清华大学 经济管理学院,北京100084)
STL文件格式的机械零件网格化剖分技术研究
陈智渊1,冯骜骜2
(1.青海师范大学 民族师范学院 青海 海南藏族自治州 813000;2.清华大学 经济管理学院,北京100084)
为了给机械仿真实验的后处理阶段提供网格化的基本剖分单元,现以AutoCAD作为图形输入环境,以机械零件的STL文件作为数据交换接口,通过对STL文件的图元结构、数据组织方法的分析,利用VC++6.0编程读取由AutoCAD生成的STL格式的零件三维实体文件,然后利用OpenGL图形处理技术再现所读取的图形数据,并实现机械零件的网格剖分功能,附带平移、旋转、缩放、三视图等几何变换处理,最终完成了基于STL文件的网格剖分程序开发.
网格化剖分单元;机械零件;STL;VC++6.0;OpenGL
0 引 言
随着计算机技术的不断更新发展,网格剖分这种离散对象的前置处理技术在航空航天,机械制造,生物工程等领域得到了推广应用,特别是在机械制造行业,这种应用最为广泛.利用有限元分析复杂模型时,通常采用人工方法很难对数据模型进行剖分,这十分不利于高级有限元分析程序的推广和使用[1].通常,当我们掌握了网格剖分技术时,在进行复杂、经济成本较高的制造加工之前,我们就可以先在计算机中进行建模,设置加工特征及参数,模拟真实的加工环境,然后进行网格剖分前处理.在我们得到了基本的剖分单元后,就可进行中间处理和后处理,如对零件进行应力场的仿真[2]和温度场的仿真[3]等,这与零件使用寿命的长短直接挂钩.因此,对网格化自动剖分技术的研究理论与实际意义重大.
本课题就是针对机械零件模拟仿真实验的前置处理进行的研究,基本任务是处理从STL文件中读取获得的三维实体数据,再现机械零件的三维实体内容并实现零件的网格化剖分.
1 整体方案
Fig.1 System flow structure图1 整体方案流程图
系统整体方案流程如图1所示,主要内容包含以下三个部分:
(1)STL文件格式的分析和读取
分析STL文件的图元和文件结构,在VC++6.0环境下进行STL零件图形文件的读取程序的编制,完成对STL文件格式的AutoCAD三维实体图形的读取.
(2)图形的再现
利用OpenGL图形处理技术对读取到的零件三维实体数据进行描述、绘制,实现图形的再现.
(3)图形处理技术
进行网格化剖分内容的实验,并实现机械零件的平移、放大、缩小以及旋转等操作处理.
2 程序设计
2.1 STL网格剖分原理简介
有限差分法( FMD)的网格单元多为直六面体,进行网格剖分的目的是将剖分对象的三维实体在三维空间上进行多边形剖片处理,从而获得由大量小六面体“堆砌”而成的目标数据对象,为后续处理作准备[4-5].立方体三角剖分如图2所示,图3为三角形网格分层切片处理示意图.
Fig.2 Triangle meshing of box图2 立方体三角形剖分
Fig.3 Triangle layer meshing图3 三角形网格分层切片
Fig.4 Main program flow图4 主程序流程图
2.2 程序流程图
2.2.1 主程序流程图
主程序流程如图4所示,主程序流程是对STL网格剖分原理的补充说明.
2.2.2 STL读取与再现
文献[6]对文本及二进制格式的STL文件结构、读取的方法作了详细介绍,另外,关于如何添加OpenGL库文件、编写OpenGL程序等参见文献[7],这里不再累述,只给出STL文件读取与图形再现的流程图(图5)供参考.
Fig.5 STL read and display flow图5 STL文件读取与图形再现流程图
2.3 核心程序
2.3.1 STL数据读取
采用逐行读取数据的方法,对ASCII的STL文件数据信息进行读取.对于三角面片数据信息的处理,采取循环结构体进行读取,最后将表示空间三角面片的法向矢量和顶点坐标数据存入动态数组vert[3]中.具体算法描述如下:1)设置面缓存和点缓存;2)打开文件;3)判断文件类型(是ASCII格式还是Binary格式);4)探寻关键字facet normal,读取并保存面法向量;5)探寻关键字vertex,读取并保存顶点坐标;6)进行下一个三角面片的读取;7)读取完毕.ASCII读取流程如图6所示.
Fig.6 ASCII read flow图6 ASCII读取流程
2.3.2 STL数据模型的显示
在OpenGL中,可通过调用glBegin(GLTRIANGLES)和glEnd()函数来直接生产和渲染三角面片,从而生成所需的实体数据模型,因此通过OpenGL来实现STL三维模型的真实感图形显示,效果更好.图形再现的部分代码如下:
void CWelcomeView::myplane()
{……;
for(int i_0;i {glBegin(GLTRIANGLES); //绘制三角面片 glVertex3f(Vertices[i].x0,vertices[i].y0,vertices[i].z0); glVertex3f(Vertices[i+1].x0,vertices[i+1].y0,vertices[i+1].z0); glVertex3f(Vertices[i+2].x0,vertices[i+2].y0,vertices[i+2].z0); glEnd();)} 运行系统程序,在出现的系统界面上导入STL测试件1,进行剖分处理,得到的不同视图的网格剖分结果分别如图7和图8所示. Fig.7 Text 1 mesh result图7 测试件1网格剖分 Fig.8 Text 1 mesh result图8 测试件1网格剖分 通过以上测试可知,利用VC++6.0进行语言编程,并结合OpenGL图形处理技术能较好地读取STL格式文件,实现STL实体图形的再现,能够有效的划分零件单元,亦包含旋转、放大、缩小等操作,为有限元分析的前期处理作了必要准备. 本文通过对STL文件的深入研究,以VC++6.0为开发平台,利用VC++标准IO库的ifstream类型定义对象并绑定STL文件,再用标准库string类型中的getline函数逐行读取绑定的STL文件并对其中的三角面片顶点数据进行存储,最后结合OpenGL编程技术实现了对STL文件读取与显示以及网格化剖分的功能,可得出以下结论: (1)利用VC++6.0和OpenGL等软件,可以顺利实现对STL文件的读取. (2)OpenGL图形处理技术能够实现图形再现和网格剖分等功能. (3)根据网格剖分技术,可以提高实体模拟精度. [1]戴文芳,曹宗杰,谢军.有限元网格自动剖分方法及其在工程中的应用[J].长春工程学院学报(自然科学版),2009,10(1):61-64. [2]平学成,陈梦成,郑冰冰,等.受热载荷两相材料界面端应力场的新型有限元分析[J].固体力学学报,2013,34(6):591-596. [3]李治国,陈刚.钟罩式感应炉的结构设计及温度场有限元分析[J].机械工程师,2014(3):131-132. [4]戴鼎汉,侯华,王忠,等.基于射线法的STL无锯齿变形六面体网格剖分算法[J].铸造技术,2009,30(6):808-811. [5]邱宗文,孙国雄,刘永刚,等.基于STL的切片法有限元差分网格剖分的研究[J].特种铸造及有色合金,2003(6):28-30. [6]耿铁,任清海.基于OpenGL的STL文件三维模型真实感图形可视化研究[J].制造业自动化,2011,33(16):121-124. [7]刘慧杰,靳海亮.基于VC++的OpenGL三维图形开发设计[J].计算机与数字工程,2009,37(7):122-124. [责任编辑:王军] Research on meshing techniques based on STL machine part CHEN Zhiyuan1,FENG Aoao2 (Minorities Teachers College of Qinghai Teachers University,Hainan Tibetan Autonomous Prefecture,Hainan 813000,China;2.School of Economics and Management,Tsinghua University,Beijing 100084,China) For providing the simulation of post-processing stage the basic mesh units,it takes AutoCAD as the graphic input environment,with STL machine part file as the data exchange interface.Through the analysis of STL graphics file structure,data organization method,with VC++6.0 programming,it reads STL three-dimensional entity graph generated by AutoCAD,and then used OpenGL graphics processing technology to reproduce the graphics data read,achieved the functions of graphical mesh,with translation,rotation,scaling,three views and other geometric transformation processing,finally completed the development of programs based on STL mesh. mesh unit; machine part; STL; VC++6.0; OpenGL 2015-12-02 陈智渊(1981-),男,土族,青海乐都人,青海师范大学讲师,主要从事计算机语音图像处理的研究. TP311 A 1672-3600(2016)12-0050-034 测试结果
5 结 论