3D打印的立体光固化快速成型扫描路径排序方法与流程

文档序号:12604162阅读:487来源:国知局
3D打印的立体光固化快速成型扫描路径排序方法与流程
本发明涉及3D打印技术领域,尤其是涉及一种能够有效提高扫描效率的3D打印的立体光固化快速成型扫描路径排序方法。

背景技术:
在3D打印(快速成型)技术领域中,SLA(StereoLithographyApparatus)工艺是一种分层制造技术,计算机控制激光束对光敏树脂为原料的表面进行扫描,被扫描区域的树脂薄层产生光聚合反应而固化,形成零件的一个薄层。工作台下移一个层厚的距离,以便在固化好的树脂表面再敷上一层新的液态树脂,进行下一层的扫描加工,如此反复,直到整个原型制造完毕。SLA的工作主要是对光敏树脂材料进行扫描,扫描又分为对支撑结构的扫描,对模型轮廓的扫描和对模型实体的扫描,这其中对模型实体的扫描占据最大的工作量。实体扫描路径是以大量的独立分割的线段形式存在的,当模型形状较复杂时就必须对扫描路径进行合理排序,避免过多跳转。因此对模型实体扫描路径的排序对于SLA的工作效率至关重要。通常采用栅格扫描的方式获得扫描线段,在获得扫描线段之后,如果不对扫描线段进行有效合理的排序,则在打印过程中会出现较多跳转,导致扫描效率降低。中国专利授权公开号:CN104057611A,授权公开日2014年9月24日,公开了一种基于扫描线倾角优化的3D打印填充路径生成方法,包括如下步骤:步骤1、根据3D打印设备以及打印精度要求确定合适的填充路径间距和层厚,并根据层厚得到需加工实体的SLC文件;步骤2、以填充路径间距作为偏置距离生成轮廓偏置路径,并将最内层偏置路径进行偏置得到偏置多边形Ω;步骤3、根据加工效率和打印精度具体要求确定各层的扫描线倾角;步骤4、根据扫描线倾角以及扫描线与偏置多边形Ω的交点生成内部填充路径。该发明的不足之处是扫描效率低。

技术实现要素:
本发明的发明目的是为了克服现有技术中的扫描路径生成方法的扫描效率低的不足,提供了一种能够有效提高扫描效率的3D打印的立体光固化快速成型扫描路径排序方法。为了实现上述目的,本发明采用以下技术方案:一种3D打印的立体光固化快速成型扫描路径排序方法,包括如下步骤:(1-1)建立各个扫描线段的二维数组:利用水平栅格切割,获得物体沿垂直方向依次排列的所有扫描线段,设定每个扫描线段的数据结构为SEGMENT,SEGMENT包括表征扫描线段左端点的属性Point,表征扫描线段右端点的属性OtherPoint,表征扫描线段所在区块索引的属性BIndex;设定扫描线段水平方向最大数目为M,垂直方向最大数目为N,则将位于垂直方向第n行的第m条扫描线段存储为数组Segments[n][m],n∈N,m∈M;(1-2)遍历所有扫描线段,根据扫描线段重叠率OverlapRatio和跳转距离TravelDistance,将所有扫描线段分为K个区块BLOCK:设定区块列表为Blocks[K],最大区块索引MaxBIndex的初始值为0,设定最小重叠率MinOverlapRatio和最大跳转距离MaxTravelDistance;(1-2-1)设定当前的扫描线段为Segments[n][m],当前行的下一行扫描线段为Segments[n-1][:],将当前扫描线段Segments[n][m]与下一行所有扫描线段分别进行匹配:Segments[n-1][:]中,n-1代表行号,冒号:代表列数不确定的含义,:可以是1至L,L为自然数。Segments[n][m]中n和m分别表征确定的数值,Segments[n][m]代表一个确定的扫描线段。假设Segments[n][m]为SegmentA,Segments[n-1][:]中任一条扫描线段为SegmentB,则计算SegmentA和SegmentB的重叠距离OverlapDistance,并利用下述公式计算重叠率OverlapRatio和跳转距离TravelDistance:OverlapRatio=OverlapDistance/|SegmentB.Point-SegmentB.OtherPoint|,TravelDistance=Min{|SegmentA.Point-SegmentB.Point|,|SegmentA.Point-SegmentB.OtherPoint|,|SegmentA.OtherPoint-SegmentB.Point|,|SegmentA.OtherPoint-SegmentB.OtherPoint|};设定参数MinOverlapRatio和MaxTravelDistance;重叠距离OverlapDistance为两条扫描线段重合的长度,SegmentA.Point和SegmentA.OtherPoint分别表示SegmentA的左端点和右端点;SegmentB.Point和SegmentB.OtherPoint分别表示SegmentB的左端点和右端点;对Segments[n-1][:]中L条扫描线段顺次计算与Segments[n][m]的OverlapRatio和TravelDistance,若OverlapRatio>MinOverlapRatio,则判定为匹配;若OverlapRatio≤MinOverlapRatio并且TravelDistance<MaxTravelDistance,则判定为匹配;若OverlapRatio≤MinOverlapRatio并且TravelDistance≥MaxTravelDistance,判定为不匹配;当判定结果为匹配时,则将Segments[n][m]的BIndex设置为上一行的所有扫描线段中对应的那条扫描线段的Bindex,表明属于同一区块,同时结束对Segments[n][m]的匹配判断;当判定结果为不匹配时,则使Segments[n][m]的BIndex增加1,表明这是一个新的区块,同时使MaxBIndex增加1;当所有扫描线段遍历完成之后,按照每条扫描线段的BIndex将扫描线段分配进区块列表Block[K]中;(1-3)根据区块距离BlockDistance对各个区块排序:建立用于描述区块特征的数据结构BLOCK,BLOCK包括表征区块的开始扫描线段的属性StartSegment,表征区块的结束扫描线段的属性EndSegment,表征是否翻转的属性IsFlip,选定区块列表Blocks[K]中任意一个区块作为初始区块BlockCur;(1-3-1)将初始区块BlockCur存入排序区块列表SortBlocks[K]中,分别计算区块列表Blocks[K]中的各个区块与BlockCur的区块距离BlockDistance,将最小BlockDistacne所对应的区块作为最近邻区块BlockNearest;(1-3-2)将BlockNearest存入SortBlocks[K],并且从区块列表Blocks[K]中移除BlockCur,将BlockNearest作为新的BlockCurt;(1-3-3)重复步骤(1-3-1)至(1-3-2)直至区块列表Blocks[K]中只有一项;(1-4)按照区块存入SortBlocks[K]的顺序依次提取各个区块内部的扫描线段,至此,完成了所有扫描线段的排序。3D打印通常采用栅格扫描的方式获得扫描线段,在获得扫描线段之后,如果不对扫描线段进行有效合理的排序,则在打印过程中会出现较多跳转,导致扫描效率降低。本发明是将所有扫描线段以最少跳转为原则进行分区,每一个区块包含尽量多的扫描线段,分块之后,再对所有区块排序,从而实现扫描线段的高效排序,并且获得的扫描路径跳转少,打印连续程度高。因此,本发明具有分区块的路径排序减少了跳转距离,提高了扫描效率;分区块的路径排序使得扫描路径整体化程度较高,打印连续程度高,有助于提高成型强度的特点。作为优选,所述步骤(1-3-1)还包括如下步骤:设定任意一个区块结构BLOCK包括扫描线段StartSegment和EndSegment两个线段结构,扫描线段StartSegment包括左端点StartPoint和右端点StartOtherPoint,扫描线段EndSegment包括左端点EndPoint和右端点EndOtherPoint;则设定BlockDistance是BlockCur的两个端点BlockCur.EndPoint,BlockCur.EndOtherPoint分别与区块列表Blocks[K]中其余的区块BlockOther的四个端点BlockOther.StartPoint、BlockOther.StartOtherPoint、BlockOther.EndPoint、BlockOther.EndOtherPoint的距离的最小值;BlockDistance的计算方法如下所示:BlockDistance=Min{|BlockCur.EndPoint-BlockOther.StartPoint|,|BlockCur.EndPoint-BlockOther.StartOtherPoint|,|BlockCur.EndPoint-BlockOther.EndPoint|,|BlockCur.EndPoint-BlockOther.EndOtherPoint|,|BlockCur.EndOtherPoint-BlockOther.StartPoint|,|BlockCur.EndOtherPoint-BlockOther.StartOtherPoint|,|BlockCur.EndOtherPoint-BlockOther.EndPoint|,|BlockCur.EndOtherPoint-BlockOther.EndOtherPoint|}。作为优选,还包括如下步骤:如果得到最小的BlockDistance的Segment是区块结构BlockNearest的EndSegment,即Max{|BlockCur.EndPoint-BlockOther.EndPoint|,|BlockCur.EndPoint-BlockOther.EndOtherPoint|,|BlockCur.EndOtherPoint-BlockOther.EndPoint|,|BlockCur.EndOtherPoint-BlockOther.EndOtherPoint|}<Min{|BlockCur.EndPoint-BlockOther.StartPoint|,|BlockCur.EndPoint-BlockOther.StartOtherPoint|,|BlockCur.EndOtherPoint-BlockOther.StartPoint|,|BlockCur.EndOtherPoint-BlockOther.StartOtherPoint|};则代表BlockNearest应该被翻转以得到最小的跳转距离,即令:BlockNearest.IsFlip=True;步骤(1-4)由如下步骤替换:按照区块存入SortBlocks[K]的顺序依次提取各个区块内部的扫描线段,其中,具有翻转标记BlockNearest.IsFlip=True的区块内部的扫描线段逆序提取,至此,完成了所有扫描线段的排序。通常是按照先StartSegment后EndSegment的顺序提取区块结构BlockNearest中的扫描线段的,当区块结构BlockNearest中存在BlockNearest.IsFlip=True的翻转标记时,需要按照先EndSegment后StartSegment的顺序提取区块结构BlockNearest中的扫描线段。这样排序可以使区块之间的跳转距离最小。因此,本发明具有如下有益效果:(1)分区块的路径排序减少了跳转距离,提高了扫描效率;(2)分区块的路径排序使得扫描路径整体化程度较高,打印连续程度高,有助于提高成型强度。附图说明图1是本发明的物体的扫描线段的一种结构示意图;图2是本发明的OverlapDistance的一种示意图;图3是本发明的TravelDistance的一种示意图;图4是本发明的是实施例的一种流程图。图中:Block11、Block22、Block3、SegmentA4、SegmentB。具体实施方式下面结合附图和具体实施方式对本发明做进一步的描述。如图4所示的实施例是一种3D打印的立体光固化快速成型扫描路径排序方法,包括如下步骤:步骤100,根据获取的扫描线段建立各个扫描线段的二维数组:预先将物体的轮廓输入计算机中,利用水平栅格切割获得如图1所示的沿垂直方向依次排列的所有扫描线段,下述的计算过程均在计算机中进行:设定每个扫描线段的数据结构为SEGMENT,SEGMENT包括表征扫描线段左端点的属性Point,表征扫描线段右端点的属性OtherPoint,表征扫描线段所在区块索引的属性BIndex;图1中设有3个区块Block11、Block22、Block3,每个区块中设有扫描线段SEGMENT,每条线段均设有左端点Point和右端点OtherPoint。设定扫描线段水平方向最大数目为M,垂直方向最大数目为N,则将位于垂直方向第n行的第m条扫描线段存储为数组Segments[n][m],n∈N,m∈M;步骤200,遍历所有扫描线段,根据扫描线段重叠率OverlapRatio和跳转距离TravelDistance,将所有扫描线段分为K个区块BLOCK:设定区块列表为Blocks[K],最大区块索引MaxBIndex的初始值为0,设定最小重叠率MinOverlapRatio和最大跳转距离MaxTravelDistance;步骤210,设定当前的扫描线段为Segments[n][m],当前行的下一行扫描线段为Segments[n-1][:],将当前扫描线段Segments[n][m]与下一行所有扫描线段分别进行匹配:如图2所示,假设Segments[n][m]为SegmentA,Segments[n-1][:]中任一条扫描线段为SegmentB,则计算SegmentA和SegmentB的重叠距离OverlapDistance,并利用下述公式计算重叠率OverlapRatio和跳转距离TravelDistance:OverlapRatio=OverlapDistance/|SegmentB.Point-SegmentB.OtherPoint|,如图3所示,TravelDistance=Min{|SegmentA.Point-SegmentB.Point|,|SegmentA.Point-SegmentB.OtherPoint|,|SegmentA.OtherPoint-SegmentB.Point|,|SegmentA.OtherPoint-SegmentB.OtherPoint|};设定参数MinOverlapRatio和MaxTravelDistance;对Segments[n-1][:]中L条扫描线段顺次计算与Segments[n][m]的OverlapRatio和TravelDistance,若OverlapRatio>MinOverlapRatio,则判定为匹配;若OverlapRatio≤MinOverlapRatio并且TravelDistance<MaxTravelDistance,则判定为匹配;若OverlapRatio≤MinOverlapRatio并且TravelDistance≥MaxTravelDistance,判定为不匹配;当判定结果为匹配时,则将Segments[n][m]的BIndex设置为上一行的所有扫描线段中对应的那条扫描线段的Bindex,表明属于同一区块,同时结束对Segments[n][m]的匹配判断;当判定结果为不匹配时,则使Segments[n][m]的BIndex增加1,表明这是一个新的区块,同时使MaxBIndex增加1;当所有扫描线段遍历完成之后,按照每条扫描线段的BIndex将扫描线段分配进区块列表Block[K]中;步骤300,根据区块距离BlockDistance对各个区块排序:建立用于描述区块特征的数据结构BLOCK,BLOCK包括表征区块的开始扫描线段的属性StartSegment,表征区块的结束扫描线段属性的EndSegment,表征是否翻转的属性IsFlip,选定区块列表Blocks[K]中任意一个区块作为初始区块BlockCur;步骤310,将初始区块BlockCur存入排序区块列表SortBlocks[K]中,分别计算区块列表Blocks[K]中的各个区块与BlockCur的区块距离BlockDistance,将最小BlockDistacne所对应的区块作为最近邻区块BlockNearest;设定任意一个区块结构BLOCK包括扫描线段StartSegment和EndSegment两个线段结构,扫描线段StartSegment包括左端点StartPoint和右端点StartOtherPoint,扫描线段EndSegment包括左端点EndPoint和右端点EndOtherPoint;则设定BlockDistance是BlockCur的两个端点BlockCur.EndPoint,BlockCur.EndOtherPoint分别与区块列表Blocks[K]中其余的区块BlockOther的四个端点BlockOther.StartPoint、BlockOther.StartOtherPoint、BlockOther.EndPoint、BlockOther.EndOtherPoint的距离的最小值;BlockDistance的计算方法如下所示:BlockDistance=Min{|BlockCur.EndPoint-BlockOther.StartPoint|,|BlockCur.EndPoint-BlockOther.StartOtherPoint|,|BlockCur.EndPoint-BlockOther.EndPoint|,|BlockCur.EndPoint-BlockOther.EndOtherPoint|,|BlockCur.EndOtherPoint-BlockOther.StartPoint|,|BlockCur.EndOtherPoint-BlockOther.StartOtherPoint|,|BlockCur.EndOtherPoint-BlockOther.EndPoint|,|BlockCur.EndOtherPoint-BlockOther.EndOtherPoint|};步骤320,将BlockNearest存入SortBlocks[K],并且从区块列表Blocks[K]中移除BlockCur,将BlockNearest作为新的BlockCurt;如果得到最小的BlockDistance的Segment是区块结构BlockNearest的EndSegment,即Max{|BlockCur.EndPoint-BlockOther.EndPoint|,|BlockCur.EndPoint-BlockOther.EndOtherPoint|,|BlockCur.EndOtherPoint-BlockOther.EndPoint|,|BlockCur.EndOtherPoint-BlockOther.EndOtherPoint|}<Min{|BlockCur.EndPoint-BlockOther.StartPoint|,|BlockCur.EndPoint-BlockOther.StartOtherPoint|,|BlockCur.EndOtherPoint-BlockOther.StartPoint|,|BlockCur.EndOtherPoint-BlockOther.StartOtherPoint|};则代表BlockNearest应该被翻转以得到最小的跳转距离,即令:BlockNearest.IsFlip=True;步骤330,重复步骤310至320直至区块列表Blocks[K]中只有一项;步骤400,按照区块存入SortBlocks[K]的顺序依次提取各个区块内部的扫描线段,其中,具有翻转标记BlockNearest.IsFlip=True的区块内部的扫描线段逆序提取,至此,完成了所有扫描线段的排序。应理解,本实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1