吴建 吴婷 陈廷豪 包涵
摘 要:为提高STL模型的切片效率,提出一种基于MATLAB的STL模型切片分层新算法。首先对STL模型进行数据预处理,筛选出只与切平面相交的三角片集合,然后利用相邻三角面片边的拓扑关系依次求交,获得各层截面轮廓信息。實验结果表明,该方法简单、有效,不仅优化了数据结构,而且提高了切片效率,具有较好的可行性和准确性。
关键词:3D打印;切片;STL模型;MATLAB
中图分类号:TP391.73 文献标志码:A 文章编号:2095-2945(2020)02-0023-02
Abstract: In order to improve the slicing efficiency of STL model, a new slicing algorithm of STL model based on MATLAB is proposed. First, the STL model is preprocessed, and the set of triangles which only intersect with the tangent plane is selected, and then the topological relationship between the edges of the adjacent triangular patches is used to obtain the profile information of each layer. The experimental results show that the method is simple and effective, not only optimizes the data structure, but also improves the slicing efficiency and has good feasibility and accuracy.
Keywords: 3D printing; slicing; STL model; MATLAB
引言
3D打印,又称作快速成形,是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层堆叠累积的方式来构造物体的技术[1]。它对结构复杂、形态多变、骨架分支多的难加工形体具有显著优势,因而在现代医学、高端制造等领域有着广泛的应用[2]。在3D打印工艺过程中,分层切片处理是最为关键的内容之一。它通过层切平面与3D模型截面相交, 得到各层截面轮廓信息,因此切片处理的效率和精度直接影响模型制作的精度和质量[3]。
本文以MATLAB软件作为开发平台,对3D打印切片问题展开研究,运用矩阵和数组及MATLAB自带的一些函数,在MATLAB软件平台下实现STL模型的快速分层切片处理。
1 算法原理
STL模型是由多个三角形面片组成的三维物体,因此对模型进行切片就是沿切层方向(z轴)建立多个切平面,分别求出每层切平面与三角面片的交点,然后进行拓扑重连,从而获得截面轮廓线。
由于STL模型数据量较大,为提高切片处理的效率,本文采用如下方法进行计算:首先对STL模型进行数据排序,然后筛选出与各层切平面相交的三角面片集合, 以减少三角面片与切平面的求交判断次数;在计算三角面片与各层切平面间的交点时, 利用相邻三角面片边的拓扑关系求交,可快速确定交点,减少冗余点计算。
1.1 数据预处理
利用MATLAB软件的stlread函数读取STL模型数据,得到一个三角网格对象,其中包含两个矩阵成员:一个为网格顶点的坐标矩阵,设为P;另一个为组成三角面片的顶点索引矩阵,设为T。
依次从三角面片索引矩阵T中取出每个三角面片的顶点索引号,并从顶点坐标矩阵P中找到其顶点的x、y、z坐标,然后将它们按照z坐标值的大小进行排序,并排成一行:
[x1,y1,zmin,x2,y2,zmid,x3,y3,zmax]
从而得到一个新的三角面片坐标矩阵Vm×9,其中每行表示一个三角面片坐标信息,m为三角面片总数。然后将矩阵V按照zmin进行升序排序,如果zmin相同的,将zmax值小的三角面片排在前面。
1.2 相交三角片的智能筛选
在计算每层切平面与三角面片的交点时,根据每个三角面片的z坐标数据进行判断,筛选出只与当前切平面相交的三角面片集合,以提高分层处理速度。具体步骤如下:
步骤1,首先根据切片精度Δz和模型z坐标的最大值与最小值进行等厚度分层,得到各层切平面的高度zi(i=1,2,…,n,n为切片总数)。
步骤2,利用判断条件筛选出与每层切平面zi相交的三角面片集合。若三角面片与切平面zi相交,则需满足zmin≤zi≤zmax,如图1所示,具体分为以下几种情况:
(1)三角面片的两条边与切片面相交(图1(a));(2)三角面片的一条边与切平面重合(图1(b)(c)),若图1(b)三角片和图1(c)三角片共边,为避免产生冗余点,只保留图1(b)所示三角片;(3)三角面片的一个顶点在切平面上(图1(d)(e)),为避免产生冗余点,只保留图1(d)所示三角片;(4)三角面片与切平面重合(图1(f)),这种情况无法产生有效相交线段,故做排除。
1.3 拓扑求交
三角网格模型中,每条边都有两个三角面片与之共享,因此利用这种邻接拓扑关系,按顺序依次求交即可得到首尾相连的切片轮廓。具体步骤如下:
步骤1,从筛选出的相交三角面片集合中,随机确定一个三角面片作为起始三角面片,计算该三角面片与切平面的交点,并保存交点所在的边,然后从集合中删除这个三角面片。
步骤2,在相交三角面片的集合中找到一个和上一个三角面片的交点边是公共边的三角面片,然后再对这个三角面片进行交点计算,保存交点所在的边后,从集合中删除这个三角面片。如图2所示,根据三角面片1的交点P1所在的边AB找到与之相邻的三角面片2,然后计算切平面与三角面片2的另一个交点P2,根据交点P2所在的边BC找到三角面片3,依次类推。
步骤3,重复步骤2,直到找不到下一个拓扑三角面片,按顺序连接交点即可获得当前封闭轮廓。
步骤4,重复步骤1、步骤2、步骤3,直到相交的三角面片集合为空集,从而完成该层切片所有封闭轮廓的创建。
2 实例验证
为检验本文算法的有效性,以图3所示的蝎子模型为实例,进行切片测试。该模型共有461708个三角面片,230856个顶点,X、Y、Z方向总体尺寸约为59mm、42mm、20mm。采用0.4mm的分层精度对该模型进行切片测试,从图4结果可以看出,即使该模型复杂、具有多条分支结构,本文算法也能产生较好的效果。
3 结束语
本文以MATLAB软件为平台,通过数据预处理、筛选相交三角面片集合、拓扑求交等步骤有效地对模型进行切片分层处理,最大化的保留了原始形状特征,重构出准确率高的切片模型。该方法方便快捷,加强了切片数据的可控性,优化了切片的效率,提高了切片轮廓的准确性,且该程序简短易懂,具有较好的应用价值。
参考文献:
[1]郭亮,安芬菊,王贵.便携式3D打印机设计[J].机电工程技术,2017,46(10):90-92+108.
[2]徐敬华,任新华,陈前勇,等.基于双倾斜度概率的流形模型3D打印层切优化方法[J].机械工程学报,2019,55(13):129-143.
[3]徐敬华,盛红升,张树有,等.基于邻接拓扑的流形网格模型层切多连通域构建方法[J].计算机辅助设计与图形学学报,2018,30(1):180-190.