3D 打印切片算法
STL 文件格式已经成为快速原型(Rapid Prototyping)技术的一种文件格式标准,因此本文将介绍几种 STL 模型的切片算法。由于 STL 文件格式的特性,使得从模型切片得到 G-code 代码的算法多种多样,常见的算法有基于 STL 模型的切片算法、基于几何模型拓扑信息的 STL 切片算法、基于三角形面片几何特征的 STL 算法等。
基于 STL 模型的切片算法
基于 STL 模型的切片算法是目前在切片软件中使用最多的,也是最基础的切片算法之一。它的原理是用一个切片平面去截取模型,若三角形面片与切片平面相交,则将得到的交线有序地连接起来,并得到该切面这一层的界面轮廓。按照此规则 移动切片平面,得到每一层的界面轮廓,直到切片结束。
切片软件得到界面轮廓后,还要根据用户配置的参数(包括挤出头的规格、内部填充效果、是否需要支撑等)对得到的轮廓进行转换,生成打印这一层所需的 G-code 代码。
基于 STL 模型的切片算法比较简单,也很容易理解。然而,在实际的切片过程中,计算每一层的轮廓都需要遍历所有的面片,而其中绝大部分面片都不会与切面相交。这些不必要的判断和计算造成了时间和资源上的极大浪费,同时与切片平面相交的每条边都要求算出两个交点,运算量也较大。另外,将得到的无序交线进行有序排列也是一个很复杂的过程。
总之,资源和时间的消耗导致该算法的实际切片效率非常低。因此,针对上述这些问题,人们提出了多种改进法,比较有名的是基于几何模型拓扑信息的 STL 切片算法和基于三角形面片几何特征的 STL 算法。
基于几何模型拓扑信息的 STL 切片算法
STL 文件中不包含三角形面片的几何拓扑信息,也就是说,STL 格式并没有包含三角形面片之间的位置关系。拓扑信息的缺失,使得切片过程中每一层的轮廓都需要遍历该模型中所有的三角形面片,当模型文件较大时,这种遍历将会造成很多不必要的浪费。
为了解决这个问题,有人提出在切片前先建立对应模型的几何拓扑信息,再进行切片操作的观点。通过三角形网格的点表、边表和面表来建立 STL 模型的几何拓扑信息,再在得到 的表的基础上进一步切片的操作,将会极大地提高切片效率。
当然,这种算法也存在缺陷,在切片由 STL 模型前期建立完整的数据拓扑信息时,若模型的精度较高,其三角形面片的数量就会很大,因此为其建立完整的拓扑信息表需要耗费较多时间。
基于三角形面片几何特征的 STL 算法
为了解决由于建立几何拓扑信息表所花费的时间过长,影响切片软件性能的问题。研究人员提出了基于三角形面片几何特征的 STL 算法。
STL 模型在切片模型中具有两个特征:一是三角形面片三个顶点中 Z 轴方向跨度越大,其与切片面相交的概率也就越大;二是三角形面片的三个顶点所在高度不同,其与切平面相交的概率也不同。切片算法若充分考虑这两种特征,就有可能优化三角形面片与切平面的相交的判断过程,从而进一步提高切片算法的效率。
在切片执行前,算法先找出模型中每个三角形面片点的 Z 轴坐标的最小值(Zmin)和最大值(Zmax),然后对所有的三角形面片进行排序。经过排序后,切片过程中切平面高度小于某个 Zmin 值,排在该三角形面片后面的将不再进行相交判断和交点求取计算。最后将得到的交线首尾相连得到一条封闭的轮廓线,交付给切片软件进行进一步处理。
基于三角形面片几何特征的 STL 算法减少了移动切平面后,判断三角形面片和该切平面位置关系的次数,不需要通过遍历所有三角形面片来判断位置关系,也不需要通过几何拓扑信息表来查找 相邻三角形面片的位置,这从一定程度上提高了切片算法的效率。
但和上述两种算法一样,基于三角形面片几何特征的 STL 算法并不十分完美,它的局限性表现在以下几个方面:
- 当 STL 模型文件中包含的三角形面片的数量很多时,切片开始前的 Z 坐标排序工作将会很耗时。
- 在判断某三角形面片与切平面相交后,需要求两个交点坐标,以其为邻边且相交的三角形面片也需要求取两个交点,这就造成了重复计算。
- 在由点连接成封闭的轮廓曲线时,需要判断连接的先后顺序。