一种增材制造中的复杂切片区域自动分割方法与流程

文档序号:12334014阅读:364来源:国知局
一种增材制造中的复杂切片区域自动分割方法与流程

本发明涉及一种增材制造技术中的复杂切片区域自动分割方法,属于增材制造技术领域。



背景技术:

增材制造技术,也称为3D打印,是近年来制造领域的研究热点,但由于目前3D打印的加工效率问题,决定该制造技术更适合于个性化产品和小批量产品的生产。如何提高增材制造技术的生产效率、提高成型速度也成为了当前一个亟待解决的重要问题。3D打印加工是一个材料逐层累加制造的过程,当3D打印模型经过分层切片后,切片层包含孔、洞等结构的情况居多,此时生成的加工轨迹需要多次跨越内孔结构,不可避免的引起了空行程。跨孔次数越多、非加工区域空行程越长,则加工效率越低。因此,有效的减少空走次数和空行程是对于包含内孔的平面结构生成加工轨迹的重要优化问题。加工轨迹规划中,一种减少抬刀次数的方法是区域分割算法。这种算法的思想是将带孔的复杂截面轮廓分割成若干个简单的无内孔的子区域。每一个子区域均不需要喷头跨越即可连续打印完成。经过区域分割后,每一个区域依次单独加工,抬刀仅发生在区域间的连接过程中。这样避免了简单的平行扫描路径需要多次跨越非加工路径的内孔区域,可以显著的提高打印效率。Kai Tang等人提出了局部最优和全局最优方案。局部最优方案旨在给定的平面区域分割方向下找到一次加工成型的子区域数量最少的分割方案。全局最优方案旨在寻找使用局部最优方案分割后,生成子区域数量最少的平面分割方向。同济大学的朱传敏等人将计算机图形学中凹多边形凸分解算法的相关理论应用到扫描路径规划中,通过对凹多边形的区域分割,简化了复杂的平面加工轮廓。但该算法尚不能很好的适用于某些具有复杂平面内孔轮廓的加工问题。



技术实现要素:

针对含有孔洞等形状特征的复杂切片区域,以减少机构空行程为目标的切片区域优化分割问题,本发明提供了一种增材制造技术中的复杂切片区域自动分割方法。本发明所采用的技术方案是:所发明切片区域分割方法包括分割点判别算法、区域分割交点算法以及分区域轮廓信息存储算法。

一种增材制造中的复杂切片区域自动分割方法,步骤如下:

(1)区域分割点判别:复杂切片区域即分层切片后,包含孔的平面加工区域,该平面加工区域外轮廓为凸多边形;对复杂切片区域上任一异形孔的顶点依次遍历,针对任一顶点,设置一条水平线,判断该顶点的相邻两条边是否在设置的水平线同侧,若是,则该顶点可能是分割点;否则,一定不是分割点;确定所有可能的分割点,对任一可能的分割点,首先过该可能的分割点向右引出第一射线,若第一射线与该异形孔边界没有交点,则该可能的分割点即为分割点,该分割点射线标识位为向右;若第一射线与该异形孔边界相交,则再从该点向左引出第二射线,并判断第二射线与该异形孔边界是否相交,若无交点,则该可能的分割点为分割点,且该分割点射线标识位为向左,否则该可能的分割点不是分割点,直至判断出所有的分割点;

(2)区域分割交点计算:针对只有一个异形孔的复杂切片区域,从任一分割点向其自身的标识位方向引出第三射线,第三射线与复杂切片区域外轮廓的交点即为分割交点;针对有多个异形孔的复杂切片区域,选取其中任一异形孔上的任一分割点,向其自身标识位方向引第四射线,若第四射线与其余异形孔无交点或只有一个交点,则第四射线与复杂切片区域外轮廓的交点即为区域分割交点;若第四射线与其余异形孔有两个以上交点,且该分割点射线标识位向右,则取x坐标值最小的交点为当前分割点对应的分割交点;若该分割点射线标识位向左,则取x坐标值最大的交点为当前分割点对应的分割交点,直至判断出所有的分割交点;其中,坐标系以所选取的分割点为原点,x坐标轴、射线与水平线平行;

(3)分区域轮廓信息存储:将分割点、分割交点和各异形孔的顶点存放于数据结构中,并以链表形式进行遍历和数据信息存储,形成最终的子加工区域。

本发明的有益效果:本发明的方法可避免简单平行扫描路径时需要多次跨越非加工路径的内孔区域,有效地减少了打印头抬刀次数,从而可显著地提高增材制造设备的打印效率。

附图说明

图1平面复杂切片区域实例1示意图。

图2分割点P0判别示意图。

图3分割点P3判别示意图。

图4排除可能的分割点P4示意图。

图5分割点P5判别示意图。

图6是实例1区域分割结果示意图。

图7平面复杂切片区域实例2示意图。

图8分割交点坐标位置求解实例示意图。

图9平面复杂切片区域实例3示意图。

图10实例3采用算法流程后得到的数据信息示意图。

图11实例3区域分割结果示意图。

具体实施方式

以下结合附图和技术方案,进一步说明本发明的具体实施方式。

实施例

(1)区域分割点的判别:

图1中,内轮廓为凹多边形的孔结构,它由P0~P6共七个坐标点构成,相邻下标索引值的两个数据点的连线构成了内轮廓的边。按照上述区域分割点判别算法,由P0~P6依次考察内轮廓的各个顶点。以考察P0为例,P0相邻索引值的下一点为P1,二者的y坐标值不等,即P0P1不是水平边。与P0相邻的内轮廓顶点为P1、P6,过P0点作一条水平线L,如图2,不难发现P1、P6两点在水平线L的同侧,则P0为可能的分割点。此时,首先从P0点向右侧引出射线,发现该射线与P0所在内轮廓的所有边均不相交,则断定P0为区域分割点,且P0的射线标识位为ray_Right。将P0的信息以上面建立的数据结构的形式存储起来,并保存进建立的区域分割点vector容器中。

定义:区域分割点引出的射线与其余轮廓的交点为区域分割交点。这里,P0引出的射线与外轮廓交于点P′0,P′0即为区域分割交点,如图3所示。

定义:线段P0P′0为区域分割线。利用同样的判断过程可以判断出P3也是区域分割点,P′3为对应的区域分割交点,P3P′3为区域分割线,如图3所示。

考察点P1、P2、P6情况相同,以P1为例。P1相邻索引值的下一点为P2,二者的y坐标值不等,即P1P2不是水平边。与P1相邻的内轮廓顶点为P0、P2,过P1点作一条水平线L,不难发现P0、P2两点在水平线L的异侧,则P0不是区域分割点。P4是一个凹顶点,如图4所示,它相邻索引值的下一点为P5,二者的y坐标值不等,即P4P5不是水平边。与P4相邻的内轮廓顶点为P3、P5,过P4点作一条水平线L,不难发现P3、P5两点在水平线L的同侧,则P4是可能的分割点。但显然,无论从P4点向左向右引出射线均会与P4所在的内轮廓自身相交,则断定P4不是分割点。

P5相邻索引值的下一点为P6,如图5,二者的y坐标值不等,即P5P6不是水平边。与P5相邻的内轮廓顶点为P4、P6,过P5点作一条水平线L,不难发现P4、P6两点在水平线L的同侧,P5为可能的分割点。此时,首先从P5点向右侧引出射线,发现该射线与内轮廓边P3P4相交,即P5向右引出的射线与自身轮廓相交。再从P5向左引出射线,发现射线与内轮廓的边均不相交,则判断出P5是区域分割点,且P5的射线标识位为ray_Left。将P5的信息以上面建立的数据结构的形式存储起来,并保存进建立的区域分割点vector容器中。

经过上述遍历判定后,确定该平面加工区域内轮廓的区域分割点为P0、P3、P5,对应的区域分割交点分别为P′0、P′3、P′5,区域分割线分别为P0P′0、P3P′3、P5P′5。这些分割点、分割交点、分割线与内外轮廓的各条边将平面加工区域分割成三个部分,如图6。

(2)区域分割交点求解:

单孔情况:对于单个内孔的情形,过分割点引出的射线与内外轮廓边有且仅有一个交点(分割交点),且必存在于外轮廓上。对于含有多个内孔的平面加工结构,射线有可能与内外轮廓存在不少于一个交点。

多孔情况:首先使用区域分割点判别算法判断出两个内轮廓的分割点,分别是P1,0、P1,1和P2,0、P2,2,且它们的射线标识位均为ray_Right。图7中,坐标点P的下标分别表示轮廓的索引值和该点所在轮廓的数据点存储顺序索引值,规定外轮廓索引值为0,两个内轮廓的索引值分别为1和2。显然,P1,0、P2,0、P2,2所对应的分割交点均在外轮廓上。从P1,1引出的射线与平面轮廓边存在三个交点,如图4.6所示,分别为P0、P1、P2,如图8。当区域分割点射线标识位为ray_Right且与内外轮廓边存在多个交点时,规定当前考察的分割点对应的分割交点为求得的交点中x轴坐标值最小的点。同理,当分割点射线标识位为ray_Left且求出多个交点时,对应的分割交点为x轴坐标值最大的点。

(3)分区域信息的存储:

对于内轮廓多边形上已经确定的分割点及其所引出射线标识位的数据信息,分别从分割点引出射线,与外轮廓(或其余内孔轮廓)各对应边相交,求出各个分割交点的位置信息并保存在相应的数据结构中,此时,所有分区数据点的信息均已获取。平面加工轮廓各个顶点是按照外轮廓逆时针、内轮廓顺时针的方向存储起来的,存储信息只包含各个顶点的坐标、顶点所在轮廓索引(二维数组的行数)、所在轮廓存储位置索引(数组中的位置)。如图9所示,将内外轮廓所有的数据点存储在一个二维容器中,其中点的下标数字分别表示轮廓信息和存储位置,如P0,1表示外轮廓0上的第1个数据,P2,0表示内轮廓2上的第0个数据点。使用区域分割点判别算法依次遍历各个内轮廓的数据点,经判断可知,两内轮廓1、2的区域分割点分别是P1,0、P1,1和P2,0、P2,2。按照各分割点射线标识位的方向引出射线,按照区域分割交点算法求出各分割点对应的分割交点依次是P′1,0、P′1,1和P′2,0、P′2,2。规定点的坐标位置及存储位置统称为点的位置信息,分割点、分割交点或普通轮廓顶点统称为点的特征信息。为了更加全面的存储各个数据点的信息和方便分区存储,建立一种数据结构,既可以存储点的位置信息,又能够表征该点的特征信息,建立的数据结构如下:

其中,点的坐标position是顶点的三维坐标值。分割点标识位isSubregionPoint指明该点是否为分割点,若isSubregionPoint=true,则该点为区域分割点,否则不是。分割交点标识位isIntersectionPoint指明该点是否为分割交点。若该点为区域分割点,则射线方向标识位bflag=ray_Right或bflag=ray_Left。分区域存储标识位subregion_flag用于判别当前分割点是否已完成分区轮廓信息存储,如图10共分为三个子区域,但分割点判别算法共求出四个分割点,若不加此标识位,将会出现分区重复存储的问题。点所在轮廓索引contour_index和点存储位置索引position_index指明点的位置信息。如contour_index=0、position_index=2表示该点是外轮廓上的第二个点。若该点是分割(或分割交点),则其关联点坐标associate_point是与其对应的分割交点(或分割点)的三维坐标。如分割点P1,0的关联点associate_point是P′1,0的三维坐标值,分割交点P′2,2的关联点associate_point是P2,2的三维坐标值。

将求出的分割交点按照求出的位置信息依次插入到所在的轮廓位置和轮廓上的存储位置,如图11所示。将求得的所有数据点按照上面介绍的pointMessage数据结构的形式重新存储。至此,区域分割需要用到的数据点已经全部获取并有序的存储在相应的变量中。分区域的关键在于分区数据点的迭代搜索,从而形成封闭的各个子区域。

已知数据点的特征包括分割点、分割交点和普通轮廓顶点三种。默认各个分割点的分区存储标识位subregion_flag=true。分区存储时,从内轮廓的分割点开始遍历,首先判断分割点的分区存储标识位subregion_flag,若subregion_flag==true,则该分割点尚未保存分割区域,可以由此遍历,并定义该点为Start_point。定义该分割点为当前点,其所在轮廓的下一点为Next_point。按照如下步骤开始循环:若Next_point是普通轮廓顶点,则在当前轮廓上继续寻找下一点,更新Next_point为该轮廓上的下一点,循环继续;若Next_point是分割点,则找其关联点坐标对应的分割交点,并判断该分割交点所在的轮廓及存储位置索引,更新Next_point为该分割交点,循环继续;若Next_point是分割交点,则找其关联点坐标对应的分割点,并判断该分割点所在的轮廓及存储位置索引,将找到的该分割交点的分区存储标识位subregion_flag的值改为false,即该点已完成区域存储,更新Next_point为该分割点,循环继续。循环的停止准则为Next_point与Start_point为同一点,此时所有数据点构成了一个封闭的区域,循环结束。该算法的伪代码如下:

按顺序搜索内轮廓,找到某内轮廓上的第一个分割点point;

If(point的subregion_flag==true)则Start_point=point;

在point的轮廓contour_index上寻找下一点Next_point;

循环体:

{

If(Next_point是普通点),则在该轮廓上继续寻找下一点;

If(Next_point是分割点),则找其对应的分割交点,并从分割交点所在的轮廓寻找下一点;

If(Next_point是分割交点),则找其对应的分割点,并从分割点所在的轮廓寻找下一点,同时该分割点的subregion_flag=false;

If(Next_point==Start_point),循环结束。继续从其他分割点遍历存储。

};

以该算例的分割点P1,0为例。判断P1,0的subregion_flag==true,则由P1,0开始遍历,并令Start_point=P1,0。P1,0所在内轮廓1的下一点为P1,1,即Next_point=P1,1。进入循环体,P1,1是分割点,找到其对应的分割交点为外轮廓0、位置索引为4的点P0,4,更新Next_point=P0,4,并在P0,4所在的外轮廓0上寻找下一点,经判断为P0,5。更新Next_point=P0,5,P0,5是分割交点,找到其所对应的分割点为内轮廓2、位置索引为2的点P2,2,令P2,2的分区标识位subregion_flag=false。更新Next_point=P2,2,在P2,2所在的内轮廓2上寻找下一点,经判断为P2,3。更新Next_point=P2,3,P2,3是分割交点,找到其对应的分割点为P1,0,更新Next_point=P1,0,此时发现Next_point=Start_point,则循环结束。顺次两两连接所有找到的数据点,所为成的封闭多边形结构即是其中的一个子加工区域。按照同样的步骤可以将另外两个子加工区域存储起来。最终获得的三个子加工区域分别为:

区域①:P1,0→P1,1→P0,4→P0,5→P2,2→P2,3→P1,0

区域②:P1,1→P1,2→P1,0→P2,3→P2,0→P0,7→P0,8→P0,9→P0,0→P0,1→P0,2→P0,3→P0,4→P1,1

区域③:P2,0→P2,1→P2,2→P0,5→P0,6→P0,7→P2,0

通过以上算例分析,介绍了一种增材制造中的区域分割方法,此种分割方法可以将一个复杂的平面加工区域分割成若干个可以连续加工成型的子区域。每个子区域均可一次性加工成型,喷头的空行程仅发生在区域连接过程中。该方法为提高3D打印加工效率提供了一种便利的分区域加工方法。

以上列举了具体实例来详细阐述该区域分割方法的分割流程和实现步骤,这些个例仅供说明本发明的原理及其实施方式之用,而非对本发明的限制,在不脱离本发明的精神和范围的情况下,本领域的普通技术人员还可以做出更多的变形和改进。因此所有等同的技术方案均应属于本发明的范畴并为本发明的各项权利要求所限定。

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