热门关键词:

STL可视化过程中的若干数据处理研究

  • 该文件为pdf格式
  • 文件大小:246.87KB
  • 浏览次数
  • 发布时间:2014-08-22
文件介绍:

本资料包含pdf文件1个,下载需要1积分

Research on SeveraI Data Issues in STL Visualization ProcessZHAN Zhi-min ,ZHANG Hong-hai ,CAO Shu ,SHU Xia-yun '(1.Huazhong Univ of Sci&Tech,Hubei Wuhan 430074.China;2.Wuhan Photoelectric Research at National Laboratories,Light Mechanical and Electrical Systems,Hubei Wuhan 430074,China)Abstract:STL file format which expresses a 3D model with a series of triangles is considered傩the standard file format inRapid Prototyping(RP).By studying the characteristics ofSTLfileformat,STL visualization WG$successfuly realized underthe Visual C6.0 platform when integrated with the OpenGL graphics programming technology.A s for sonte disadvantages ofSTL,like existingplentofredundant information and no geometry topological relationship,some solutions were presented,including geting rid of redundant information and building geomtry topological relationship,which could save much spaceand offer a good data structure for the following STL direct slicing process。

Key W ords:STL;Visualization;Reduce Redundancy;Topological Relationshipl l了I商STL(Stereo lithographic)文件格式是由国外某公司开发的三维实体模型系统的-个接El标准,其接口格式规范,目前已被工业界认为是快速成型(R印id Prototyping)领域的标准描述文件格式I”,几乎所有的三维几何造型软件如 Pro-E、UG、AutoCAD等都提供输出STL文件的功能。

STL文件采用-系列无序的三角面来表达三维实体模型的表面,以最简单且十分具体的方式来存储模型的几何信息。因为存储方式简单,所以这些几何信息中并不包含三角形面之间的几何拓扑关系。

2.STL文件结构STL文件保存模型信息实际上相当于对模型表面进行有限元网格划分,保存的信息即是网格划分后的所有三角面的几何信息,包括二三角面的法向矢量和三个顶点的坐标。具体来说,STL文件包含文本(ASCI)和二进制(BINARY)两种类型 。

2.1 STL的文本格式格式使用字符串来描述三角面的几何信息,每-行由 1个或 2个关键子开头。在STL文件中,最基本的信息单元是三角面(facet),每-个 facet由7行数据组成,关键字 facet normal后面给出三个数是三角面指向实体外部的法向矢量坐标,outerloop随后的 3行数据分别是三角面的 3个顶点坐标 ,3个顶点沿指向实体外部的法矢方向逆时针排列。

图1文本格式的STL文件示例Fig.1 STI File Sample with Text Format来稿日期:2012-07-14基金项目:国家自然科学基金资助项目(51 l75204)作者简介:占志敏,(1987-),男,硕士研究生,主要研究方向:精微制造和工艺装备方面的学习研究;张鸿海,(1950-),男,博士,教授,博士生导师,主要研究方向:精密加工与微细制造-r艺 亏设备研究第5期 占志敏等:STL可视化过程中的若干数据处理研究 232.2 STL文件的二进制格式二进制STL文件用固定的字节数来给出三角面的几何信息。文件起始的80个字节是文件头,用于存储零件名等信息;紧接着用 4个字节的整数来给出表达模型的三角面个数,剩下的内容就是逐个给出每个三角面的几何信息。每个三角面片占用固定的50个字节,依次是3个4字节浮点数(表达三角面法矢量)、3个 4字节浮点数(表达第 1个顶点坐标 )、3个 4字节浮点数(表达第 2个顶点坐标)、3个 4字节浮点数 (表达第 3个顶点坐标),三角面的最后 2个字节用来描述三角面片的属性信息。-个完整二进制 STL文件的大小为三角形面个数乘以 50再加上84个字节。

比较这两种方式 ,二进制格式文件较小(约为 ASCII格式的1/5)141,节省存储空间。但是 ASCII格式的文件可读性更强,能被人工识别并加以修改,操作性更强。

3 STL数据去冗余存储STL文件格式最基本的信息单元是三角面,整个 STL文件由所有三角面的几何信息堆叠而成。文件采用最简单的方式对每个面的几何信息进行存储,即依次保存每个面的法向矢量和顶点坐标信息。

因为在模型表达的过程中,数个三角面都共用-个相同的顶点,所以在数据存储时,每-个顶点都会被重复存储数次。这样导致文件中存在着大量的冗余数据。如果同样以这种简单的方式对这些几何数据进行读取并保存,必将造成空间的浪费,导致存储效率不高。为克服这-缺点,这里给出-种对顶点数据进行无重复存储的方法,以提高存储效率。

3.1数据结构定义因为每个三角面由三维空间中对应的三个顶点及平面的法向矢量构成,所以采用如下全局变量分别保存顶点坐标和法向量。

struct Point,府 储三角面顶点的三维坐标double x; ≠储顶点 X坐标doubley; 腑 储顶点 Y坐标double z; 俯 储顶点Z坐标BOOL readflag;/,q点标志位,用于判定是否经过去冗余处理J;struct Normal ,/存储法向量坐标(double nl; 储法向量 X坐标double n2; / 字储法向量Y坐标double n3; /府 储法向量Z坐标);在STL文件中,三角面是构成文件的最基本信息单位,-个STL文件就是由构成模型的所有三角面的几何信息叠加而成。所以可以定义-个结构来存储三角面的几何信息,以该结构作为-个信息单元,同时采用vector结构来存储这些信息单元,即可完成所有三角面几何信息的存储。

结构如下:struct Face /存储三角面几何信息Normal normal;俯 储法向量Point point3]; ,府 储三个顶点);vectormodel;/于临时存储模型的所有三角面信息model容器只是暂时用于存储从 STL文件中直接读取下来的几何数据,为实现模型几何数据的无重复存储,还需要下面-些数据结构。

struct Node /存储无重复顶点的几何信息Normal fnormal;/存 储顶点法向矢量,这些法向矢量需经过平均处理Point fpoint; /府 储无重复顶点的三维坐标);vectornode; 芋储所有无重复的顶点,vector每个元素对应- 个顶点slruct Faceindex/存 储三角面三个顶点对应的索引值int pointindex[3];/对应二三个顶点的索引值);veetorfaceindex;腑 储所有三角面的顶点索引值在上述数据结构中,Node结构用于保存无重复顶点的几何信息,node容器用于保存无重复的顶点坐标,Faceindex结构用丁存储三角面三个顶点的索引值,faceindex容器用于给L叶I所有 角面的顶点索引值 而每个顶点索引值即是相应顶点在无重复顶点序列中的序列号。

3-2数据无重复存储数据存储过程中,去冗余处理实际上是通过比较各顶点的坐标值,归并重复的顶点,重新建立-个无重复的顶点序列;而角面的三个顶点则采用索引法表达,每个面只记录三个索引值,分别对应相应顶点在无重复顶点序列中的序列号,可以根据这些索引值完全找出三个顶点的几何信息。

在去冗余处理之前,首先需要建立-个 Face类型的model临时容器并将 STL文件中所有三角面信息暂存下来。因为每个顶点信息中都设置了-个用于判定顶点是否经过去冗余处理的标志位(readflag),所以对于暂存于 model中的所有三角面,从第- 个面开始,依次取各顶点进行判定:若该点的标志位为真(TRUE),即说明已被处理 ,则跳至判定下-个点;若标志位为假(FALSE),即未进行处理,则进行下面 3个步骤:(1)设置当前点的标志位为真(TRUE);(2)将该点保存至无重复顶点序列中,记录该点在序列中的序列号,并将当前面该点的索引值设置为序列号;(3)从下-个三角面开始 ,通过比较 、y、z坐标,依次遍历剩下三角面的所有顶点,找出所有与当前点坐标相同的顶点 ,设置这些点的标志位为真,并将这些面在这些点的索引值设置为序列号。

机 械设 计 与制 造No.5May.201 3待上述三个步骤全部完成,则取下-个点做同样的处理,直至所有顶点处理完成,最后获得-个无重复顶点序列和-个用索引表示三角面信息库。无重复存储流程,如图2所示。

图2无重复存储流程Fig.2 Storage Process without Repetition4建立三角面拓扑关系因为 STL文件格式只是简单的保存三角面的各个顶点坐标,并没有给出各三角面间的相邻关系,所以为了使存储下来的数据更具有操作性,并为后续 STL直接切片提供-个 良好的数据结构,这里给这些三角面建立相应的几何拓扑关系。需要建立的拓扑关系主要包括两类:(1)建立点的邻接面关系;(2)建立面的邻接面关系。

为建立顶点的邻接面信息,在上述Node结构中添加-个容器成员,用于保存该顶点所有所在面的索引号。添加的容器成员为:vectorpneibor;,/记录该顶点所有所在面的索引号其算法是依次遍历faceindex容器中的每个三角面,将当前三角面在容器中的序列号作为索引值保存至该面三个顶点的邻接面容器中,待所有三角面全部完成遍历,即完成各顶点的邻接面查找。

完成各顶点的邻接面查找后,各个面的邻接面查找就变的容易多了。根据三角面其中两个顶点的邻接面信息,可以找出这两个顶点所共有的两个面:其中-个当前面,另-个面即是当前面在这两个顶点所构成边的邻接面;同时,当前面也是其邻接面在该边上的邻接面。所需数据结构如下:struct NeibFace /,l于记录边的顶点索引及所在面在该边的邻接面索引int vl;肌已录第-个顶点坐标索引int v2;己录第二个顶点坐标索引int findex;价己录当前三角形在该边上的邻接面索引);另外还需要在存储三角面信息的faceindex容器中添加:vectorneibface;,/保存当前面得三个邻接面其算法是偎据三角面其中两个顶点的邻接面信息,通过邻接面索引值的比较,找出三角面这两顶点的共有三角面,则这两个三角面分别为各自在该边上的邻接面,保存此邻接面信息。完成查找的点对会加以标记,以避免重复查找,而完成查找的三角面也会设置相应的完成标志位。待所有面全部遍历完,即完成三角面邻接面的查找。

5 OpenGL可视化研究所编译的程序是在 Visual c6.0集成开发环境下,基于 MFC和 OpenGL进行开发的。通过在 Visual c6.0中建立OpenGL窗口实现对 STL数据模型的显示。我们按照三角面片的顺序,使用glBegin函数并以GI TRIANGLES为参数15],依次出每个三角面的顶点及法矢,直至构成出整个实体模型。同时,添加了模型的旋转、移动和缩放等功能∩视化效果,如图 3所示。

图3杯子模型Fig.3 Cups Model6结束语STL文件以三角面为基本信息单元进行数据存储,必然造成每个顶点的重复保存,因而造成文件数据冗余。通过肖除冗余顶点信息可以极大的减少存储空问,提高STL文件存储效率。另外,通过给各三角面建立几何拓扑关系,提高了数据的可操作性,并为后续进行 STL直接切片提供了良好的数据结构,是实现直接切片的关键环节。

正在加载...请等待或刷新页面...
发表评论
验证码 验证码加载失败