一种面向3D打印的模型分解与排列方法与流程

文档序号:15579514发布日期:2018-10-02 17:37阅读:359来源:国知局
本发明涉及一种面向3D打印的模型的分解与排列的优化方法,具体涉及一种基于模型近似金字塔分解和定向搜索的模型的分割与排列的优化方法。
背景技术
::3D打印,即快速成型技术的一种,它是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术。最近几年,3D打印越来越多的被人们所提及,将数字模型文件打印成实物的能力,使得它在许多行业得到广泛应用。从技术实现上来看,3D打印通常是将打印材料“一层一层”地叠加起来,从而将数字蓝图变为实物。并且这样的3D打印过程都是限定在一个具有一定空间的打印平台之内的。所以,模型和打印平台的大小直接关系到能否一次性打印出成品。当模型的整体大小超出了打印空间的大小,无法完整的摆放进打印平台进行打印,这就需要我们对模型进行分解,然后将模型的各个部分排列进打印空间内进行打印了。针对这一问题,Hu(HU,R.,LI,H.,ZHANG,H.,ANDCOHEN-OR,D.2014.Approximatepyramidalshapedecomposition.ACMTrans.onGraph33,6,213:1–213:12)等人在2014年提出了一种可以将模型分解成尽可能少的满足近似金字塔属性的块的方法,然后将这些满足近似金字塔属性的块分开,利用熔融沉积快速成型(FDM)打印机进行打印,可以非常有效的节省支撑材料。但是该方法只考虑了将模型分解成近似金字塔形状的块,并没有考虑如何将这些块排列进打印空间里,进行有效的打印。Luo(LUO,L.,BARAN,I.,RUSINKIEWICZ,S.,ANDMATUSIK,W.2012.Chopper:Partitioningmodelsinto3D-printableparts.ACMTrans.onGraph31,6,129:1–129:9)等人在2012年提出的方法,可以将一个三维模型分解成许多块,每一个单独的块都可以放进打印空间内进行单独打印。在这个方法中所考虑的因素有块数,可装配性和切割线的美观性。但是这个方法并没有考虑到支撑材料或者打印时间的约束。Vanek(VANEK,J.,GARCIA,J.,BENES,B.,MECH,R.,CARR,N.,STAVA,O.,ANDMILLER,G.2014.PackMerger:A3Dprintvolumeoptimizer.ComputerGraphicsForum33,6,322–332)等人在2014年提出的一个方法,考虑到如何更好地分解模型可以使得排列的结果更好。该方法首先提取模型的表面外壳,并不是针对实心的模型进行处理的,然后对提取的壳状模型进行四面体化处理,再采用自底向上的搜索策略,先进行模型分解,再利用分解得到的块进行排列。这个方法的问题在于,它先将模型分解成了一些固定的块,然后再用这些块去排列,导致了搜索的空间大大的被缩小了,从而大大降低了算法能够找到最优解的可能性。该方法是先分解,再排列的,我们希望在解决这个模型的分解与排列的问题的时候,分解与排列是能够同时进行的,这样就使得算法所能遍历到的模型分解情况与排列情况都大大的增加了。由于这是一个NP-hard问题,我们希望在有限的搜索时间内找到一个近似的最优解。考虑到目前的3D打印成型工艺从成型过程中是否需要支撑结构来讲主要分为两类,一类是基于粉末材料的粘合喷射法,以3DP为代表,另一类是基于树脂、塑料材料的以FDM为代表的成型工艺。在成型过程中,前者无需支撑结构,整体打印时间取决于模型在成型方向上的高度,打印材料取决于三维模型本身的耗费;后者需要支撑结构,整体打印时间与材料由三维模型本身以及支撑材料共同决定。本发明公开的方法适用于以上两类成型工艺,可以分别考虑两者不同的约束。另外,在分解与排列的过程中,我们希望模型被分解成的块数较少,以便于后期对模型的重新组装。注:金字塔形状定义,满足金字塔属性的形状,是指,该形状具有这样一条底边(底面),从该形状的内部的任意一点做该底边(底面)的垂线,这条垂线上的任意一点都在该形状内部,满足上述性质的形状即我们所说的金字塔形状。技术实现要素:本发明为了解决上述问题,提出了一种面向3D打印的模型分解与排列的优化方法。该方法基于模型的近似金字塔分解和定向搜索策略,能够将模型分解成较少的块,并且根据不同的打印技术的约束排列进打印空间内,适用于粉末打印机和熔融沉积快速成型打印机。一种面向3D打印的模型分解与排列方法,包括以下步骤:步骤一:给定一个模型S,打印空间PV,计算模型S初始的金字塔属性块分解,并将这些金字塔属性块体素化,生成第一个初始中间解isolu0;步骤二:初始化中间解集合ISolu={isolu0},初始化最优完全解P*;步骤三:对中间解集合ISolu中的每一个中间解isolui,计算中间解产生的一系列的候选中间解,并加入候选中间解集合CSolu;步骤四:对每个属于候选中间解集合CSolu的csolui,计算其局部目标函数值,并选出分数最高的k个候选中间解csolu0,...,csoluk-1,并使得候选中间解集合CSolu={csolu0,...,csoluk-1};步骤五:对每个属于候选中间解集合CSolu候选中间解的csolui,如果候选中间解csolui是一个完全解了,计算其目标函数值,如果候选中间解csolui的目标函数值大于P*的目标函数值,则P*=csolui;否则舍弃该候选中间解csolui;如果候选中间解csolui还不是一个完全解并且该中间解的目标函数值大于或等于P*的目标函数值,则将候选中间解csolui加入中间解集合ISolu;步骤六:如果中间解集合ISolu不为空,则跳转到步骤三;如果中间解集合ISolu为空,则此时的P*即为求解出的最优解,根据P*里打印空间里面块的排列情况,提取出体素化的块实际对应于模型S的三维网格,即求解出模型S的分解与排列最优解;步骤七:将步骤六提取出来的多个块的三维网格进行局部优化,通过每个块的沿Z轴负方向平移,将这些块排列的更加紧实,由此,得到了关于模型S的最优的分解与排列。所述步骤一中的具体步骤为:(1-1)将模型S进行金字塔属性块分解,并变换这些金字塔属性块的朝向,使其底面与xoy平面平行,体素化得到一系列块{p0,p1,p2,...};(1-2)初始化中间解isolu0,在isolu0中,p0,p1,p2,...都未被排列进打印空间PV。所述步骤二中的具体步骤为:(2-1)初始化中间解集合,令ISolu={isolu0};(2-2)初始化最优完全解P*,令P*的目标函数值为无穷最小值。所述步骤三中的计算候选中间解的具体步骤为:(3-1)初始化候选中间解集合CSolu为空;(3-2)对于每个属于中间解集合ISolu的isolui,在该中间解中,有块{p0,p1,p2,...}未被排列进打印空间PV,对于每个块在排列到打印空间的每个特定位置时会产生一系列的候选中间解;(3-3)将步骤(3-2)中产生的所有候选中间解加入候选中间解集合CSolu。进一步的,对于步骤(3-2)中,对于每个块以完整排列方式排列到打印空间的特定位置或者以部分排列方式排列到打印空间的每个特定位置;对于每个块pi,它可以绕着x,y或者z轴旋转0°,90°,180°或者270°,然后以移动窗口的形式在打印空间的底部移动,即将块pi排列到打印空间的每个特定位置,产生一系列的候选中间解,在这种情况下,一个处在打印空间外的块被完整的排列进打印空间,称其为完整排列;另外,一个块pi还可以被一次横切或者竖切切分成两个块pi0,pi1,pi0或者pi1绕着x,y或者z轴旋转0°,90°,180°或者270°,然后以移动窗口的形式在打印空间的底部移动,即将块pi0或者pi1排列到打印空间的每个特定位置,产生一系列的候选中间解,在这种情况下,一个处在打印空间外的块只有被切分下来的部分块被排列进打印空间内部,余下的部分形成一个单独的块,留在打印空间外部,称其为部分排列。所述步骤四中对一个候选中间解的局部目标函数值计算方法为:假设当前打印空间内部已经有由一些排列好的块组成的堆D,一个候选中间解就是将一个块p排列进打印空间内,与D形成一个新的堆D’,定义一个用来评估将块p排列进堆D的局部目标函数:n:当前候选中间解下所有的块数,包括排列或为排列进打印空间的所有块数;v:形成的新的堆D’中的体素;p,D形成的D’中所有垂直间隙的体素数量,这些垂直间隙将在打印的过程被粉末材料所暂时填充;HGAIN(v,D):Hv即体素v在打印空间中的高度,HPV即整个打印空间的高度;α,η:用户输入指定,可调的参数。所述步骤五中对于一个完全解的目标函数值的计算方法为:N:完全解中打印空间内的所有的块数;H(PV):打印空间的高度;H(D):完全解中打印空间内所有块排列成的堆D的高度;α:用户输入指定,可调的参数。上述算法适用于粉末打印机。进一步的,将步骤五中的目标函数改为以下的目标函数计算方式,即可将上述描述算法适用于熔融沉积快速成型打印机:V(S):为步骤一中对所有块的体素化之后所有体素的数量;GFDM(D):为堆D中所有垂直间隙的体素数量;N:完全解中打印空间内的所有的块数;α:用户输入指定,可调的参数。本发明的有益效果为:解决打印模型太大,不能放入打印空间内打印的问题,提出新的算法,根据不同打印机的打印约束,将模型分解成较少的块,有效的排列进打印空间,使得打印过程有效的进行。本发明的该方法基于模型的近似金字塔分解和定向搜索策略,能够将模型分解成较少的块,并且根据不同的打印技术的约束排列进打印空间内,适用于粉末打印机和熔融沉积快速成型打印机。注:中间解,中间解即不完全的解,由打印空间和处在打印空间外的块组成,在中间解中,虽然打印空间内部有一些已经排列好的块,但还有至少一个块还未被排列进入打印空间内部。完全解,不同于中间解,所有的块已经全部被排列进入打印空间内部。附图说明图1为将模型四面体化后的切面图;图2中展示了初始解,由左边的一些未被排列进PV的块和空的PV组成;图3为展示了从图2所述的初始解经过一次完整排列之后的中间解;图4为展示了图3中的中间解经过一次部分排列之后所形成的中间解;图5中,是由图4所展示中间解再经过一步完整排列的结果所得到的最优解;图6中所展示的是体素化的块中提取出来的对应于模型S的网格;如图7中所示,即是图6经过步骤(7)的局部优化后所得到的最终的结果;图8本算法的具体流程图。具体实施方式:下面结合附图与实施例对本发明作进一步说明。为了便于理解与说明,部分以二维的附图形式来展示算法的细节。为了实现适用于粉末打印机和熔融沉积快速成型打印机的模型的分解与排列,本发明采用如下技术方案(以下描述以粉末打印机为例,并在最后给出如何将本方法用于熔融沉积快速成型打印机的描述)本算法的具体流程图见图8。(1)给定一个模型S,打印空间PV,计算S初始的金字塔属性块分解,并将这些金字塔属性块体素化,生成第一个初始中间解isolu0(在这个中间解中,所有的块都未被排列进打PV);(2)初始化中间解集合ISolu={isolu0},初始化最优完全解P*;(3)对ISolu中的每一个中间解isolui,计算产生其一系列的候选中间解,并加入候选中间解集合CSolu;清空(4)对每个csolui属于CSolu,计算其分数(局部目标函数值),并选出分数最高的k个候选中间解csolu0,...,csoluk-1,并使得CSolu={csolu0,...,csoluk-1};(5)对每个csolui属于CSolu,如果csolui是一个完全解了,计算其目标函数值,如果csolui的目标函数值大于P*的目标函数值,则P*=csolui;否则舍弃csolui;如果csolui还不是一个完全解并且该中间解的目标函数值大于或等于P*的目标函数值,则将csolui加入ISolu,ISolu=ISolu+{csolui};(6)如果ISolu不为空,则跳转到步骤(3);如果ISolu为空,则此时的P*即为求解出的最优解,根据P*里打印空间里面块的排列情况,提取出体素化的块实际对应于S的三维网格,即求解出S的分解与排列最优解。如图5中,是由图4所展示中间解再经过一步完整排列的结果所得到的最优解。该解由三个块组成,并且排列的结果高度很低,有利于加速粉末打印机的打印过程。图6中所展示的是体素化的块中提取出来的对应于模型S的网格。(7)将步骤6提取出来的多个块的三维网格进行局部优化,通过每个块的沿Z轴负方向平移,将这些块排列的更加紧实。由此,我们得到了关于模型S的最优的分解与排列。如图7中所示,即是图6经过步骤(7)的局部优化后所得到的最终的结果。所述步骤(1)中的具体步骤为:(1-1)将S进行金字塔属性块分解,并变换这些金字塔属性块的朝向,使其底面与xoy平面平行,体素化得到一系列块{p0,p11p2,...};图1中,展示了一个二维的例子,图中左边分别列出了初始输入形状(以及其金字塔形状分解),和其分解成的金字塔形状的体素化结果(图右边)。(1-2)初始化中间解isolu0,在isolu0中,p0,p1,p2,...都未被排列进PV;图2中展示了初始解,由左边的一些未被排列进PV的块和空的PV组成。所述步骤(2)中的具体步骤为:(2-1)初始化中间解集合,令ISolu={isolu0};(2-2)初始化最优完全解P*,令P*的目标函数值为无穷最小值;所述步骤(3)中的计算候选中间解的具体步骤为:(3-1)初始化候选中间解集合为空CSolu;(3-2)对于每个属于ISolu的isolui,在该中间解中,有块{p0,p1,p2,...}未被排列进PV。对于每个块pi,它可以绕着x,y或者z轴旋转0°,90°,180°或者270°,然后以移动窗口的形式在打印空间的底部移动(即将块pi排列到打印空间的每个特定位置),产生一系列的候选中间解。在这种情况下,一个处在打印空间外的块被完整的排列进打印空间,我们称其为完整排列;图3为我们展示了从图2所述的初始解经过一次完整排列之后的中间解。另外,一个块pi还可以被一次横切或者竖切切分成两个块pi0,pi1(这里我们过滤掉切分结果不是两块的情况),pi0或者pi1绕着x,y或者z轴旋转0°,90°,180°或者270°,然后以移动窗口的形式在打印空间的底部移动(即将块pi0或者pi1排列到打印空间的每个特定位置),产生一系列的候选中间解。在这种情况下,一个处在打印空间外的块只有被切分下来的部分块被排列进打印空间内部,余下的部分形成一个单独的块,留在打印空间外部,我们称其为部分排列。图4为我们展示了图3中的中间解经过一次部分排列之后所形成的中间解。(3-3)将步骤(3-2)中产生的所有候选中间解加入CSolu。所述步骤(4)中对一个候选中间解的局部目标函数值计算方法为:假设当前打印空间内部已经有由一些排列好的块组成的堆D,一个候选中间解就是将一个块p排列进打印空间内,与D形成一个新的堆D’。我们定义一个用来评估将块p排列进堆D的局部目标函数:n:当前候选中间解下所有的块数(包括排列或为排列进打印空间的所有块数);v:形成的新的堆D’中的体素;p,D形成的D’中所有垂直间隙的体素数量,这些垂直间隙将在打印的过程被粉末材料暂时填充;HGAIN(v,D):Hv即体素v在打印空间中的高度,HPV即整个打印空间的高度;α,η:用户输入指定,可调的参数。所述步骤(5)中对于一个完全解的目标函数值的计算方法为:N:完全解中打印空间内的所有的块数;H(PV):打印空间的高度;H(D):完全解中打印空间内所有块排列成的堆D的高度;α:用户输入指定,可调的参数。最后,通过将步骤(5)中的目标函数改为以下的目标函数计算方式,即可将上述描述算法适用于熔融沉积快速成型打印机:V(S):为步骤(1)中对所有块的体素化之后所有体素的数量;GFDM(D):为堆D中所有垂直间隙的体素数量;N:完全解中打印空间内的所有的块数;α:用户输入指定,可调的参数。上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1