一种用于3d打印切片的快速生成方法与流程

文档序号:11948359阅读:2133来源:国知局
一种用于3d打印切片的快速生成方法与流程

本发明涉及3d打印领域,具体涉及3d打印过程中的切片生成。



背景技术:

3d切片是通过切片平面与三维网格模型中的三角面片求交得到。由于三角网格模型通常包含大量的三角面片,如果采用直接求交的方法,其时间开销將十分巨大,在实际生产过程中基本上不适用。目前,常用的3d切片生成技术通常利用空间剖分树,如二叉空间剖分树、八叉树等数据结构进行加速,减少不必要的三角面片与切片平面的求交次数,从而达到降低时间复杂度的目的。然而,这些空间剖分树的数据结构往往实现复杂,并且未针对切片平面为平面这一特殊情况进行优化,使得现有的方法实现复杂,生成效率不高。

本发明通过对三角网格中的三角面片根据其最小z值进行分类,构建分类三角面片链表,从而快速确定每个切片平面求交时,是否存在新的三角面片与该切片平面有交,极大程度上减少判断三角面片是否与切片平面有交的次数。通过求交得到切片平面与三角网格的截面轮廓线后,基于二维多边形扫描填充的算法,可以快速判断与区分填充区域与空洞区域,减少多边形内外的判断。该方法数据结构简单,鲁棒性强,可快速高效的实现3d打印过程中的切片生成。



技术实现要素:

针对目前3d切片方法中数据结构复杂,实现困难,生成效率不高的不足,本发明通过对三角网格中的三角面片根据其最小z值进行分类,构建分类三角面片链表,减少判断三角面片与切片平面是否有交的次数,从而提高切片中轮廓线的生成效率。基于生成的切片轮廓线,结合二维多边形扫描线填充算法,快速判断轮廓线之间的填充区域与空洞区域,减少多边形内外的判断,从而提高切片中打印路径生成的效率。

本发明为实现上述目的所采用的技术方案为:

3d打印切片的快速生成分为三个步骤:三维网格的预处理、切片轮廓线的生成与切片中打印路径的生成。本发明分别针对每个步骤进行优化以提高切片的生成效率,简化实现的复杂度。

1、三维网格的预处理

三维网格的预处理主要是为了简化后续两个步骤运算的复杂度,主要包括模型方向的调整与模型包围盒的计算。首先,根据用户打印的需求,调整模型的方向,使得模型的z轴沿着打印方向,从而切片平面均为平行于XOY平面,简化后续的求交运算;而后计算模型的包围盒,从而确定3d打印的打印范围。

2、切片轮廓线的生成

切片轮廓线主要通过切片平面与三角网格中各个三角面片求交得到。通过对三角网格中的三角面片按照其最小z值进行分类,构建分类三角面片链表,从而快速判断存在哪些三角面片开始与切片平面有交,减少三角面片与切片平面求交的次数,提高切片生成的效率。具体步骤包括:

步骤1:根据3d打印的层厚设置d,以及预处理中确定的打印范围[zb,zt],确定打印的切片层数n=(zt-zb)/d;

步骤2:将三角网格中的各个三角面片按三个顶点中的最小z值zmin进行分类,构建分类三角面片链表(简称分类面表)。分类的准则为:(1)若三个顶点中的最小z值和最大z值的差别小于给定的层厚d,则说明该三角面片位于该切片平面内,忽略该三角面片;(2)根据公式(1)计算该三角面片的类别k,将该三角面片的索引fid以及最大z值对应的类别kmax插入到第k个链表中。最终的分类面表如图1所示。

k=(zmin-zb)/d (1)

步骤3:自底向上遍历所有的切片平面zk=zb+kd,计算切片平面与三角面片的交点。

步骤3.a:从分类面表中取出第0个链表中的所有三角面片到当前待求交三角面片链表(简称活化面表)中,计算切片平面z0与活化面表中各三角面片的交点。此时的交点即为各个三角面片中的对应的顶点;

步骤3.b:设置k=1;

步骤3.c:判断活化面表中的各个三角面片是否与切片平面k依然存在交点,即判断k<=kmax。若成立,则依然存在交点,否则,不再存在交点,将该三角面片从活化面表中删除;

步骤3.d:判断是否有新的三角面片需要加入求交,即判断第k类分类面表是否为空。若不为空,则将该链表中的三角面片加入到当前活化面表;

步骤3.e,计算当前活化面表中各三角面片与切片平面的交点。对于三角形的每条边,若边的两个端点跨越切片平面的两边,计算该边与切片平面的交点。由于分类边表中已经将三个顶点均位于同一类的情形过滤,因此每个三角面片会得到两个交点,从而形成切片轮廓线中的一条边。

步骤3.f:根据三角形的邻接关系,将求交得到的每条边首尾相连得到当前切片层的轮廓线;

步骤3.g:设置k=k+1;

步骤3.h:重复步骤3.c到3g,直到分类面表及活化面表中的三角面片均为空。

3、切片打印路径的生成

切片打印路径的生成,其主要目的是确定当前打印方向中哪些区域是填充区域,哪些区域是空洞区域,对于填充区域,利用扫描线对其进行填充。空洞区域与填充区域的判断,等价于多边形内外的判断。因此,基于步骤2中获得的切片轮廓线,可将该问题转化为多边形的扫描填充的问题。通过扫描线与轮廓线的交点性质,可消除点在多边形内外的判断,从而提高切片打印路径的生成效率。具体步骤包括:

步骤1:根据打印机在y轴方向的精度d以及预处理过程中得到的y方向的打印范围[yb,yt],确定扫描线的条数n=(yt-yb)/d;

步骤2:将切片轮廓线中的各边按两个顶点中的最小y值ymin进行分类,构建分类边表。分类的准则为:(1)若两个顶点中的最小y值和最大y值的差别小于给定的精度d,则忽略该边;(2)根据公式(2)计算该边的类别k,将该边的索引eid以及最大y值对应的类别kmax插入到第k个链表中。

k=(ymin-yb)/d (2)

由于扫描线每次移动d,扫描线与边的交点的x值只会变化一个常数d/m,因此预先计算该值并保存在分类边表中。最终的分类边表如图2所示。

步骤3:自底向上遍历所有的扫描线yk=yb+kd,计算扫描线与各边的交点。

步骤3.a:从分类边表中取出第0个链表中的所有边到当前待求交边表(简称活化边表)中,计算扫描线y0与活化边表中各边的交点。此时的交点即为活化边表中各边的下顶点;

步骤3.b:顺序取出两两交点,交点之间的部分即为填充区域,其他部分为空洞区域;

步骤3.c:设置k=1;

步骤3.d:判断活化边表中的各边是否与yk依然存在交点,即判断k<=kmax。若成立,则依然存在交点,否则不再存在交点,将该边从活化边表中删除;

步骤3.e:判断是否有新的边需要加入求交,即判断第k类分类边表是否为空。若不为空,则将该链表中的边加入到当前活化面表;

步骤3.f:计算当前活化边表中各边与扫描线的交点。实际上只需在上一个交点的x坐标的基础上增加d/m即可,即:xk=xk-i+d/m。

步骤3.g:顺序取出两两交点,交点之间的部分即为填充区域,其他部分为空洞区域;

步骤3.i:设置k=k+1;

步骤3.h,重复步骤3.d到3.g,直到分类边表及活化边表中的边均为空。

有益效果

本发明的用于3d打印切片的快速生成方法,通过对三角网格中的三角面片根据其最小z值进行分类,构建分类三角面片链表,减少判断三角面片与切片平面是否有交的次数,从而提高了切片中轮廓线的生成效率。基于生成的切片轮廓线,结合二维多边形扫描线填充算法,快速判断轮廓线之间的填充区域与空洞区域,减少多边形内外的判断,从而提高切片中打印路径生成的效率。因此,该发明方法可降低生成3d打印切片的时间复杂度与实现复杂度,提高3d打印切片的生成效率。

附图说明

图1为分类面表的结构示意图。

图2为分类边表的结构示意图。

图3为生成3d打印切片的算法流程图。

具体实施方式

下面结合附图对本发明进一步说明。

如图3所示,3d打印切片的快速生成分为三个步骤:三维网格的预处理、切片轮廓线的生成与切片中打印路径的生成。

输入一个三维模型,首先对其进行方向调整并计算其包围盒,以确定三维模型的打印范围,切片层数以及扫描线的条数。

而后针对每个切片平面,计算三维模型与切片平面相交的轮廓线。其具体步骤包括:

步骤1:根据3d打印的层厚设置d,以及预处理中确定的打印范围[zb,zt],确定打印的切片层数n=(zt-zb)/d;

步骤2:将三角网格中的各个三角面片按三个顶点中的最小z值zmin进行分类,构建分类分类面表。

步骤3:自底向上遍历所有的切片平面zk=zb+kd,计算切片平面与三角面片的交点。根据三角面片的邻接关系,将交点连接形成轮廓线。

基于切片得到的轮廓线,最后确定哪些区域为填充区域,哪些区域为空洞区域,并对填充区域利用扫描线填充算法进行填充。其具体步骤包括:

步骤1:根据打印机在y轴方向的精度d以及预处理过程中得到的y方向的打印范围[yb,yt],确定扫描线的条数n=(yt-yb)/d;

步骤2:将切片轮廓线中的各边按两个顶点中的最小y值ymin进行分类,构建分类边表。由于扫描线每次移动d,扫描线与边的交点的x值只会变化一个常数d/m,因此可预先计算该值并保存在分类边表中。

步骤3:自底向上遍历所有的扫描线yk=yb+kd,计算扫描线与各边的交点。顺序取出两两交点,交点之间的部分即为填充区域,其他部分为空洞区域。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1