一种三维打印模型摆放所需支撑量快速估算方法与流程

文档序号:18338406发布日期:2019-08-03 16:01阅读:447来源:国知局
一种三维打印模型摆放所需支撑量快速估算方法与流程

本发明涉及三维打印计算机辅助设计与制造中的模型支撑优化领域,尤其涉及一种三维打印模型摆放所需支撑量快速估算方法。

技术背景

三维打印最早起源于19世纪末的照相雕塑和地貌成形技术,并在20世纪80年代得以发展和推广。自诞生之日起,三维打印便被人们定义为一项颠覆传统生产方式的革命性技术,已成为引领未来全球制造业发展趋势的关键词,是继蒸汽机、电力、互联网后最伟大的发明。经过30多年的发展,三维打印先后出现了多种不同工艺形式,如:光固化(SLA)、叠层实体制造(LOM)、选择性激光烧结(SLS)、熔融沉积制造(FDM)、实体磨削固化(SGC)等。

三维打印技术是一种典型的“增材”制造技术,针对不同的打印工艺,其原理大致相同,即在打印中,工件由打印材料(多为流体或粉末)在实体上逐层堆积固化而成,因此,三维打印也称为生长型制造或分层制造。从软件角度而言,三维打印前模型先后经历了计算机辅助设计(CAD)和计算机辅助制造(CAM)两个过程。三维打印实体模型一般在通用CAD软件里设计完成,如SolidWorks、CATIA等,并将实体模型保存成三角面片模型(如stl)。然后将面片模型导入三维打印专用CAM软件,如Magics RP、Cura等,CAM软件输出一般为切片文件或G代码文件,其中,G代码文件可直接驱动三维打印机进行打印操作。

针对工件模型上的某些危险结构,如内部空洞、悬臂梁等,三维打印CAM软件一般会自动识别并生成支撑。如果不添加支撑,这些结构将在打印过程中坍塌,甚至一开始便无法打印成形。三维打印中,材料本身具有一定的自支撑性,模型上的危险结构一般通过检测模型上各三角面片和水平面夹角来判断。如果该夹角小于给定的临界角,说明当前面片趋向水平,需要对其添加支撑;反之则无需添加支撑。浙江大学金育安提出直接使用切片文件识别模型上需要添加支撑的部位,对相邻切片上下两层多边形进行布尔减运算,得到的区域就是需要添加支撑的部位(参见:金育安,基于挤出成型的增材制造过程规划与运动控制方法研究[D].浙江大学博士论文,2016)。

根据所处位置不同,支撑可分为内部支撑和外部支撑,其中内部支撑用于支持模型内部空洞,外部支撑用于支持模型外部悬臂结构。打印完成后,通常需要将外部支撑去除。一方面,由于支撑结构和工件表面直接接触,在去除支撑过程中,可能在工件外表面留下印记,影响其表面纹理及光洁度;另一方面,模型上支撑生成、去除过程必将导致打印材料浪费,延长打印时间,增加工序。为了获得表面质量较好的工件,同时节省打印材料及时间,提高经济效益,三维打印中模型支撑量应尽量减少。

模型所需支撑量和模型在工作台上摆放角度直接相关。以某模型上一个水平悬臂梁为例,当模型旋转90度后,水平悬臂梁变成竖直柱子,原来需要添加支撑的结构无需再添加支撑。据此,可运用智能优化算法(如遗传算法、粒子群算法、模拟退火算法等)对模型摆放角度进行迭代优化,从而获得使得支撑量最小的摆放方式。无论是哪种优化算法,在其运算过程中,都需要反复(上千万次级别)计算模型在某一角度放置下的支撑量。三维打印中,常规的支撑量计算方法是在模型生成G代码后对代码文件中进行解析,对尺寸较大的模型,考虑到CAM软件生成G代码可能需要消耗较长时间,相应地,支撑量计算也需较长时间。因此,常规的支撑量计算方法不适用于支撑量迭代优化,针对模型的一种特定摆放,这一过程亟需一种能够高效计算模型支撑量的方法。

综上所述,三维打印中减少模型支撑量可以节省打印时间,提高材料利用率,因此有必要对支撑量进行优化,而优化过程需要一种能够快速计算模型支撑量的方法。目前,现有技术只能通过解析G代码获得模型所需的支撑量,但这种方法效率不高,且计算速度随着模型尺寸增加而变慢。依靠现有技术无法实现模型支撑量快速计算。



技术实现要素:

为弥补现有技术在三维打印模型所需支撑量计算中的不足,提高支撑量计算速度,本发明提供一种三维打印模型摆放所需支撑量的快速估算方法。本发明方法不需依赖三维打印CAM软件,无需生成G代码,直接对模型进行处理,具有计算速度快的优点,尤其适合应用在三维打印模型摆放及支撑优化上。

一种三维打印模型摆放所需支撑量快速估算方法,包括如下步骤:

步骤1:输入需要估算支撑量的三维模型文件以及支撑生成参数;

步骤2:设模型沿坐标系Z轴方向生长,在XY平面内找出模型的最小轴平行包络矩形B;

步骤3:在矩形B内以d为间距分别作X轴、Y轴的等距平行填充线,得到一系列网格单元,记网格结点集合为{Cij|i∈[0,Nx),j∈[0,Ny)}(简记为{Cij},下同),其中Nx、Ny分别表示X填充线数量、Y填充线数量,元素Cij则表示第i条X填充线和第j条Y填充线交点;

步骤4:过集合{Cij}中每个网络结点,作一系列平行于Z轴的竖直直线,快速计算各条直线和模型交点,同时记录各交点所在面片法线方向,并对每条直线上各交点按Z坐标从小到大排序;

步骤5:对每条直线上的交点,仅考虑序号为奇数(从1开始)的交点,根据交点对应的面片法线方向判断面片倾角是否小于临界值,如果小于则说明该面片需要支撑,此时记录该点至其下最近点之间线段距离;

步骤6:对记录的线段长度进行累加,总长度乘以网格单元面积可得支撑量体积,输出支撑量。

步骤1中,输入的三维模型是由离散三角面片围成的封闭立体模型,三维模型文件格式包括但不仅限于“.stl”、“.tri”、“.xyz”等常见ascii或二进制面片格式,根据面片顶点坐标可直接求出该面片对应的法向量。输入的支撑生成参数主要指判断某一面片是否需要添加支撑的临界倾斜角度值。相对于水平面,如果面片倾斜角小于指定的临界倾斜角度值,则该片面需要支撑;否则不需要支撑。此外,支撑生成参数还包括支撑线型(轮廓线、平行线)、填充间距、支撑类型(无支撑、只接触表面、任意部位)。本发明方法针对“任意部位”支撑类型展开说明,但同样适用于“只接触表面”支撑类型。

步骤2中,坐标系是指模型本身的工件坐标系,在该坐标系下的XY平面上三维模型的最小轴平行包络矩形B的具体求解方法如下:

步骤2.1:遍历模型所有面片,对所有顶点的X轴、Y轴坐标,分别找出X轴坐标、Y轴坐标的最小值及最大值,记为xmin、xmax、ymin、ymax;

步骤2.2:在XY平面上以x=xmin、x=xmax、y=ymin、y=ymax四条线为边界围城的矩形即为所求B。

步骤3中,平行填充线间距d值越小,产生的单元网格数量越大,结点集合{Cij}元素个数越多,得到的支撑量体积越精确,但所需计算量越大。实际计算中,建议d取值范围为0.5mm~1mm之间。单个网格单元面积(用S表示)近似计算方法为:

S=(xmax–xmin)×(ymax–ymin)/(Nx×Ny) (1)

步骤4中,记过结点集合{Cij}的对应竖直直线集合为{Lij|i∈[0,Nx),j∈[0,Ny)},记模型中三角面片集合为{Tk|k∈[0,NT)},其中NT为面片总数,则直线集合{Lij}和面片集合{Tk}的线性求交方法如下:

步骤4.1:如图6所示,令k=0,对三角面片Tk,在XY平面上计算Tk最小轴平行包络矩形Bk;

步骤4.2:从直线集合{Lij}中,根据各直线的x值、y值,筛选穿过矩形Bk的所有直线,由这些直线组成集合{lm|m∈[0,Nk)},其中Nk为该集合元素个数;显然,{lm}为{Lij}子集,即因为集合{Lij}中各元素已有序排列,因此对任意Tk,直线子集{lm}可在常数时间内获得;

步骤4.3:对直线子集{lm}中的每个元素,计算直线和三角面片Tk的交点,如果交点存在,则将Tk法向量记录在该交点上,并将该交点记录在对应直线上;

步骤4.4:k自增1,跳至步骤4.1,直至模型中最后一个面片;

步骤4.5:输出直线集合{Lij}和面片集合{Tk}所有交点。

对直线集合{Lij}中的任一一条直线Lij,它可能和模型不存在交点,也可能和模型有多个交点,根据几何拓扑关系,存在交点时交点个数必为偶数;当交点存在时,将求得的交点按Z坐标从小到大排序。

步骤5中,所述奇数序号交点所在的三角面片相对于水平面的倾斜角等于该面片法向量和竖直方向(即Z轴)的夹角。如果上述倾斜角小于给定临界值,则表明该面片需要支撑,此时记录该点至该点下方最近点(序号为偶数)线段的长度。

步骤6中,记线段总长度为D,则模型所需的支撑量体积(记为V)计算公式为:

V=S×D (2)

式中S为XY平面上单个单元网格面积,S可由公式(1)计算得到。

本发明的有益效果:所述支撑量是模型在当前放置角度下所需支撑总量体积的一种衡量指标。对同一模型,以不同的角度放置,所需支撑量可能不同。支撑量大小直接反应放置方式优劣,支撑量越小,放置方式越优。对三维打印,评估支撑量的常规方法是在打印代码生成之后对代码进行解析,非常耗时。本发明方法可在不生成代码的前提下直接针对模型快速获得所需支撑量的评价指标。

附图说明

图1为本发明一种三维打印模型摆放所需支撑量快速估算方法的流程图。

图2为三角面片法向量及其计算方法示意。

图3为三维打印中三种支撑类型示意。

图4为XY平面内模型最小轴平行包络矩形计算方法示意。

图5为包络矩形内单元网格及结点集合生成示意。

图6为竖直直线集合和模型的快速求交方法示意。

图7为模型上起支撑作用线段长度统计示意。

图8为本发明方法在“3DP”三维模型上的支撑量计算实例。

具体实施方式

下面结合附图和实施例对本发明技术方案做进一步详细说明,以下实施例不构成对本发明的限定。

一种三维打印模型摆放所需支撑量快速估算方法的流程图如图1所示,具体实施步骤如下:

步骤101:输入需要估算支撑量的三维模型文件以及支撑生成参数。

输入的三维模型是由离散三角面片围成的封闭立体模型,文件格式可以是但不仅限于“.stl”、“.tri”、“.xyz”等常见ascii或二进制面片格式。根据三角面片三个顶点坐标可直接求出该面片对应的法向量,如记面片的三顶点分别为E、F、G,如图2所示,则法向量(记为n)可由向量EF和向量EG叉乘得到,即n=EF×EG。

输入的支撑生成参数主要指判断某一面片是否需要添加支撑的临界倾斜角度值。相对于水平面,如果面片倾斜角小于指定的临界值,则该片面需要支撑;否则不需要支撑。此外,支撑生成参数还包括支撑线型(轮廓线、平行线)、填充间距、支撑类型(包括无支撑、任意部位、只接触表面,如图3所示)。本发明方法针对“任意部位”支撑类型展开说明,但同样适用于“只接触表面”支撑类型。

步骤102:设模型沿坐标系Z轴方向生长,在XY平面内找出模型的最小轴平行包络矩形B。

坐标系是指模型本身的工件坐标系,在该坐标系下的XY平面上三维模型的最小轴平行包络矩形B的具体求解方法如下,如图4所示:

步骤2.1:遍历模型所有面片,对所有顶点的X、Y坐标,分别找出X、Y的最小值及最大值,记为xmin、xmax、ymin、ymax。

步骤2.2:在XY平面上以x=xmin、x=xmax、y=ymin、y=ymax四条线为边界围城的矩形即为所求B。

步骤103:在矩形B内以d为间距分别作X、Y轴的等距平行填充线,得到一系列网格单元,记网格结点集合为{Cij|i∈[0,Nx),j∈[0,Ny)}(简记为{Cij},下同),其中Nx、Ny分别表示X、Y填充线数量,元素Cij则表示第i条X线和第j条Y线交点。

如图5所示,平行填充线间距d值越小,产生的单元网格数量越大,结点集合{Cij}元素个数越多,得到的支撑量体积越精确,但所需计算量越大。实际计算中,建议d取值范围为0.5mm~1mm之间。单个网格单元面积(用S表示)近似计算方法为:

S=(xmax–xmin)×(ymax–ymin)/(Nx×Ny) (1)

步骤104:过集合{Cij}中每个结点,作一系列平行于Z轴的竖直直线,快速计算各条直线和模型交点,同时记录各交点所在面片法线方向,并对每条直线上各交点按Z坐标从小到大排序。

记过结点结合集合{Cij}的对应竖直直线集合为{Lij|i∈[0,Nx),j∈[0,Ny)},记模型中三角面片集合为{Tk|k∈[0,NT)},其中NT为面片总数,则直线集合{Lij}和面片集合{Tk}的线性求交方法如下,如图6所示:

步骤4.1:令k=0,对三角面片Tk,在XY平面上计算Tk最小轴平行包络矩形Bk;

步骤4.2:从直线集合{Lij}中,根据各直线的x、y值,筛选穿过矩形Bk的所有直线,由这些直线组成集合{lm|m∈[0,Nk)},其中Nk为该集合元素个数;显然,{lm}为{Lij}子集,即因为集合{Lij}中各元素已有序排列,因此对任意Tk,直线子集{lm}可在常数时间内获得;

步骤4.3:对直线子集{lm}中的每个元素,计算直线和三角面片Tk的交点,如果交点存在,则将Tk法向量记录在该交点上,并将该交点记录在对应直线上;

步骤4.4:k自增1,跳至步骤4.1,直至模型中最后一个面片;

步骤4.5:输出直线集合{Lij}和面片集合{Tk}所有交点。

对直线集合{Lij}中的任一一条直线l,它可能和模型不存在交点,也可能和模型有多个交点,根据几何拓扑关系,存在交点时交点个数必为偶数,加上直线和工作台面交点(如图7所示),交点总数位奇数。将求得的交点按Z坐标从小到大排序,如图7所示。

步骤105:对每条直线上的交点,仅考虑序号为奇数(从1开始)的交点,根据交点对应的面片法线方向判断面片倾角是否小于临界值,如果小于则说明该面片需要支撑,此时记录该点至其下最近点之间线段距离。

奇数序号交点所在的三角面片相对于水平面的倾斜角等于该面片法向量和竖直方向(即Z轴)的夹角。如果上述倾斜角小于给定临界值,则表明该面片需要支撑,此时记录该点至该点下方最近点(序号为偶数)线段的长度,如图7中线段P0P1、P2P3、P4P5的长度。

步骤106:对记录的线段长度进行累加,总长度乘以网格单元面积可得支撑量体积,输出支撑量。

记线段总长度为D,则模型所需的支撑量体积(记为V)计算公式为:

V=S×D (2)

式中S为XY平面上单个单元网格面积,S可由公式(1)计算得到。

本发明方法通过C++编程语言实现,典型实施实例如下:

该例选用模型为字符“3DP”的立体拉伸模型,在SolidWorks软件里完成建模,如图8所示。该模型长约200mm,高约100mm,拉伸厚度为60mm。设定支撑临界角为45度,即当模型中面片和水平面夹角小于45时,需要在其下方添加支撑;显然,该模型中每个字符都需添加支撑。在测试程序中,设置平行填充线间距d=1mm,最终生成的支撑直线如图7所示,支撑直线总长度为431397mm,所需支撑总体积为431397mm3

针对该模型,程序在个人电脑(CPU为Intel Core i7-4710MQ@2.50GHz)上的执行时间为31ms。在相同电脑平台上,如果使用传统方法,先生成打印G代码,然后从G代码中解析支撑量,使用Cura软件在切片层高设置为2mm时耗时12s,层高设置更小时耗时更长。

由上比较可知,针对上述尚未模型,相较于传统方法,使用本发明方法可提高支撑量计算效率380倍以上,尤其适合需要大量迭代的模型智能优化摆放计算。

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