基于共点焊接排序的STL模型高效并行切层方法与流程

文档序号:16856378发布日期:2019-02-12 23:21阅读:289来源:国知局
基于共点焊接排序的STL模型高效并行切层方法与流程

本发明属于增材制造领域,具体涉及一种基于共点焊接排序的stl模型高效并行切层方法。



背景技术:

近年来,增材制造技术得到了广泛关注与快速发展,在航空、航天、模具、医疗等领域展现出广阔的应用前景与技术优势。作为增材制造技术的关键环节,切层计算用于实现三维零件模型到二维切层轮廓的数据转化,在增材制造工艺数据处理过程中扮演着承上启下的重要角色。而stl文件作为增材制造的标准文件格式,得到了大部分切层方法的聚焦,故高效、高精度的实现stl模型的切层计算,对于提升增材制造工艺数据处理效率、保证零件成形质量有显著意义。

由于stl文件是通过三角面片逼近模型表面来表达三维模型的(如图1所示),但三角面片是无序存储的。为了减少三角面片的遍历次数、提升切层效率,基于stl模型的切层方法主要思路都是先对原始stl模型数据进行预处理,然后再进行分层。目前主要的切层方法可以分为两类:基于几何拓扑信息的切层方法、基于三角面片位置信息分组排序的切层方法。中国专利申请号201510979383.6公开了一种stl模型的快速切片算法,该专利首先依据三角面片的位置信息进行分组,然后通过更新算法对每组三角面片进行局部几何拓扑信息重构并进行切层计算,从而提升整个模型的切层效率。但以上方法均需要消耗大量时间进行数据预处理,且在后续切层中,仍需多次调用三角面片计算切线段、多次查找比较进行轮廓排序,随着拓扑优化、晶格设计以及逆向工程等技术的不断发展,需要处理的模型越来越复杂、切层精度要求越来越高,而这将导致切层效率不断降低。



技术实现要素:

本发明的目的在于提供一种基于共点焊接排序的stl模型高效并行切层方法,以减少海量stl模型的切层耗时、保证切层轮廓的处理精度。

实现本发明目的的技术解决方案为:

一种基于共点焊接排序的stl模型高效并行切层方法,包括以下步骤:

步骤1、读取stl模型,构建三角面片顶点和边的索引信息,得到所有三角面片的顶点坐标、顶点索引和边索引,以及包含三角面片总数n、不重复的顶点总数npoints和不重复的边的总数nedges;

步骤2、计算所有切线段,并为切线段端点各分配一个标记数字:根据切层厚度h和模型在z轴方向的最小值zmin和最大值zmax,求出总切层数;利用与三角面片相交的切平面集合,计算所有三角面片与切平面相交的切线段,为切线段端点各分配一个唯一的标记数字;

步骤3、对切层轮廓进行排序:逐层调取切层,调取该层lines中所有切线段进行顶点焊接,通过合并相邻线段的共同端点构建关联映射;依据关联映射,得到一条完整封闭的切层轮廓,删除冗余点,将得到的轮廓存入当前层的轮廓集合;

步骤4、切层计算结束,输出切层轮廓。

本发明与现有技术相比,其显著优点:

(1)本发明通过简化拓扑信息构建过程只构建三角面片边和顶点的索引信息,减少了拓扑信息构建时间和拓扑信息存储内存;

(2)本发明以三角面片为求交对象,一次遍历即可求得所有切线段,大幅度减少了三角面片的调用次数;

(3)本发明所提出的方法可在线性时间内得到切层轮廓,大幅度提升了切层效率;

(4)本发明对三角面片与切平面求交计算切线段的过程和切层轮廓排序过程进行并行计算,进一步提高切层效率。

下面结合附图对本发明作进一步详细描述。

附图说明

图1为本发明的方法流程图。

图2为stl模型示意图;

图3为三角面片信息存储容器示意图;

图4为切层存储容器示意图;

图5(a-e)为切平面与三角面片相交情况示意图;

图6为自定义的结构体info示意图;

图7为无序容器numberinfo存储元素结构。

具体实施方式

为了说明本发明的技术方案及技术目的,下面结合附图及具体实施例对本发明做进一步的介绍。

结合图1,本发明的一种基于共点焊接排序的stl模型高效并行切层方法,包括以下步骤:

步骤1、读取stl模型,构建三角面片顶点和边的索引信息

1.1、建立存储容器:

建立存储顶点和顶点索引的关联容器pointtoindex、存储边和边索引的关联容器edgetoindex,两个关联容器初始为空,即没有存储任何元素。此外,为存储三角面片三个顶点的坐标(p1、p2、p3)、三个顶点的索引(pindex1、pindex2、pindex3)以及三条边的索引(eindex1、eindex2、eindex3),建立存储上述信息的三角面片存储容器ti,即其中分别为第i个三角面片的三个顶点坐标,分别为第i个三角面片的三个顶点的索引,分别为第i个三角面片的三条边的索引,n表示三角面片总数;如图2、图3所示。

1.2、构建三角面片顶点和边的索引信息

依次读取stl模型中包含的三角面片,每读取一个三角面片,依次判断三角面片的三个顶点是否已存在于关联容器pointtoindex中,若已存在则得到与顶点相关联的索引,若不存在则将顶点存入关联容器pointtoindex中,并将存入后的关联容器所存储的元素数量作为该顶点的索引;同理,依次判断三角面片的三条边是否已存在于关联容器edgetoindex中,若已存在则得到与边相关联的索引,若不存在则将边存入关联容器edgetoindex中,并将存入后的关联容器所存储的元素数量作为该边的索引。得到三角面片的顶点坐标、顶点索引和边索引信息后,将这些信息存入ti;stl模型读取完毕后,得到所有三角面片的顶点坐标、顶点索引和边索引,以及三角面片总数n、不重复的顶点总数npoints和不重复的边的总数nedges;

1.3、获得模型在z轴方向的最小值和最大值

在读取三角面片的同时,比较各个顶点的z坐标大小,获得模型在z轴方向的最小值zmin和最大值zmax。

步骤2、计算所有切线段,并为切线段端点各分配一个标记数字:

2.1、建立切层存储容器

为存储每个切层所在的高度z、所有切线段lines和所有轮廓polys,建立存储上述信息的切层存储容器lj,即lj{linesj,polysj,zj},j=1,2,···,n;其中,lj表示第j个切层,linesj表示第j个切层中存储的切线段集合,polysj表示第j个切层中存储的切层轮廓集合,zj表示第j个切层所在的平面高度,n表示总切层数;如图4所示。

其中n可根据切层厚度h和步骤1.3中求出的模型在z轴方向的最小值zmin和最大值zmax,由求出(为向下取整运算符);而每个切层的高度z可由z=j*h求出。

2.2、调取第一个三角面片,而对于第一个三角面片,此时i=1;

2.3、获得三角面片在z轴方向的最小值和最大值;

比较该三角面片三个顶点的z坐标,得到该三角面片在z轴方向的最小值zimin和最大值zimax。

2.4、获得与三角面片相交的切平面集合

可求出该三角面片所跨越的切层范围,由切层范围可得到与该三角面片相交的切平面集合。

2.5、计算该三角面片与切平面相交的切线段

由与该三角面片相交的切平面集合依次求出各个切平面与三角面片相交的切线段。

正常情况下切平面与三角面片有两个交点,两个交点构成切线段的两个端点,如图5(a)所示。但切平面与三角面片也存在两种特殊相交情况,一种是三角面片位于切平面内,如图5(b)所示;另一种是切平面只与三角面片的一个顶点相交,如图5(c)所示。这两种情况均不构成切线段,因此在求交切线段时要忽略这两种情况。此外,当三角面片与切平面相交于一条边时,也有两种情况,第一种是三角面片一条边与切平面相交、第三个顶点z坐标大于切平面高度(如图5(d)所示),第二种是三角面片一条边与切平面相交、第三个顶点z坐标小于切平面高度(如图5e)所示)。由stl模型中三角面片共边连接约束可知,若将这两种情况下求得的切线段均存储,将造成重复存储。为避免重复存储切线段,当切线段为三角面片的一条边时,只存储第三个顶点z坐标小于切平面高度时的切线段。

2.6、为切线段端点各分配一个标记数字

在求出切平面与三角面片相交的切线段后,若线段端点与三角面片顶点重合,则将三角面片该顶点的索引pindex作为标记数字分配给线段端点;若线段端点在三角面片边上,将三角面片该边的索引eindex加上点的总数npoints作为标记数字分配给线段端点。

或者,若线段端点与三角面片顶点重合,则将三角面片该顶点的索引pindex加上边的总数nedges作为标记数字分配给线段端点;若线段端点在三角面片边上,将三角面片该边的索引eindex作为标记数字分配给线段端点,只需保证一个切层中的每个端点的标记数字唯一、相同端点标记数字相同即可。

2.7、存储切线段

求出切线段并分配好端点索引后,依据切线段所在的切平面高度,将其存入相应切层的切线段集合linesj中。

2.8、令i=i+1,判断i是否大于n,若大于则执行下一步,否则调取下一个三角面片,转至步骤2.3。完成所有三角面片的切线段的存储。

优选的,调取三角面片求交切线段的过程可通过并行计算提高效率。(即多个三角面片同时进行)

步骤3、对切层轮廓进行排序

3.1、调取第一层切层,对于第一层切层,此时j=1;

3.2、建立无序容器

建立新结构体info,其存储的信息包括端点坐标p和两个相邻端点的标记数字(neighbornumber1、neighbornumber2),如图6所示。以端点标记数字number和结构体info为关键字-值(key-value)对建立无序容器numberinfo,如图7所示。无序容器numberinfo初始为空,即没有存储任何元素;

3.3、顶点焊接,通过合并相邻线段的共同端点构建关联映射

调取该层lines中所有切线段进行顶点焊接,首先判断无序容器numberinfo中是否存在以线段端点的标记数字为关键字key的元素,若不存在,在容器中建立以该数字为关键字key的新的元素,其值value(即结构体info)中端点坐标p为该端点坐标,第一个相邻端点的标记数字neighbornumber1为其相邻端点的标记数字;若已存在,则直接其相邻端点的标记数字赋值给值value(即结构体info)中第二个相邻端点的标记数字neighbornumber2(第一个相邻端点的标记数字neighbornumber1已赋值)。该层所有切线段顶点焊接完毕后,通过合并相邻切线段的共同端点完成相邻端点标记数字关联映射的构建。

3.4、轮廓排序,得到一条完整封闭的轮廓

依据关联映射,从无序容器中任取一个元素,将其值value(即结构体info)的端点坐标p作为切层轮廓的第一个顶点的坐标,然后任取一个相邻端点的标记数字(neighbornumber1或neighbornumber2)为查找关键字进行查找,查找到第二个元素后,以第二个元素的值value(即结构体info)的端点坐标p作为轮廓的第二个顶点的坐标,而其两个相邻端点的标记数字中有一个为上一个调取元素的关键字key,为正确排序切层轮廓,需取另一个标记数字为查找关键字进行查找,如此反复直到取出的标记数字为第一个调取元素的关键字key,即查找到第一个顶点,于此便得到一条完整封闭的切层轮廓,且在查找排序过程中便可删除冗余点,将得到的轮廓存入当前层的轮廓集合polys中。

3.5、得到一条轮廓后,将无序容器中查找过的元素删除,判断无序容器是否为空,为空则执行下一步,不为空则转至3.4。

3.6、令j=j+1,判断j是否大于n,若大于则执行下一步,否则调取下一个切层,转至3.2。

优选的,进行轮廓排序的过程可通过并行计算提高效率。

步骤4、切层计算结束,输出切层轮廓。

本发明通过简化拓扑信息构建过程只构建三角面片边和顶点的索引信息,减少了拓扑信息构建时间和拓扑信息存储内存;以三角面片为求交对象,一次遍历即可求得所有切线段,大幅度减少了三角面片的调用次数;可在线性时间内得到切层轮廓,大幅度提升了切层效率。

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