基于层变边数组和邻接边顺序链表的等层厚切片算法

文档序号:9787597阅读:542来源:国知局
基于层变边数组和邻接边顺序链表的等层厚切片算法
【技术领域】
[0001]本发明属于3D打印技术领域,具体涉及一种基于层变边数组和邻接边顺序链表的等层厚切片算法。
【背景技术】
[0002]3D打印机技术是基于3D打印硬件设备以及3D打印软件设备的一种技术。在3D打印机的硬件设备确定之后,3D打印机软件显得至关重要,一款好的3D打印机软件不仅可以节省硬件在打印之前的模型处理所花费的时间,同时还可以决定打印出的模型质量。国内自主研发的3D打印机控制软件主要有UP和一些需要购入打印机才配套放出的软件,国内自主研发软件特点为功能简单实用。国外的30打印机控制软件主要有1^口1;[031:0冗、1^口61^61.-Host、CURA、Netfabb、PrintRun,这些软件功能强大有很多可选参数且打印效果很好。
[0003]对于3D打印软件而言,模型处理过程存在几个必不可少的步骤,如模型载入、切片生成轮廓环、轮廓环填充、生成G-Code代码(存放打印机打印喷头挤出速率、移动位置、移动速度等数据的编码格式),其中切片生成轮廓环将花费模型处理过程的大半时间。
[0004]由于切片算法非常重要性,因此有许多学者对其做了算法研究。国内有些学者将基于STL文件的等厚分层切片算法的基础算法分为三类:基于面片拓扑关系切片算法、基于模型几何特征分类分层算法、基于几何连续性分组排序算法。国内也有学者将基于STL文件的等厚分层切片算法的基础算法分为两类:基于面片拓扑关系的分层算法、基于模型几何特征的分层算法。第二种分类方式将第一种分类方式中后两种算法归为一类。非等厚分层切片算法主要包括自适应层厚分层算法。
[0005]国内对于算法研究主要集中在等厚分层算法的时间和空间上,同时有少量STL模型支撑生成算法的研究、模型精度提高算法的研究。由此演变出的新算法包括:分组局部拓扑信息排序算法、分组矩阵和活性三角面片表算法、分层邻接排序快速切片算法。
[0006]国外对于算法的研究主要集中在自适应层高算法方面,此类算法的实现提高了打印模型的精度,是一种很好的算法研究方向。此类算法包括曲面法线算法、邻接层样本点算法、最大曲率分析算法、外部自适应层厚与内部固定层厚并用算法、局部自适应层高算法、邻接层斜率自适应算法。另外国外还有对于支撑算法的研究,如熔融沉积造型的支撑生成算法和悬吊边支撑生成算法。

【发明内容】

[0007]发明目的:本发明涉及一种基于层变边数组和邻接边顺序链表的等层厚切片算法,其目的是为了减少3D打印机模型处理过程中切片获取轮廓环的运算时间。该算法利用了相邻两切片层邻接边关系延续的特性,通过断链和重组链的方式,加速了求得相邻层轮廓环的工作。进而节省3D打印机打印前模型处理所需时间,缩短3D打印机打印同样模型质量的模型时所需时间。
[0008]技术方案: 一种基于层变边数组和邻接边顺序链表的等层厚切片算法,用于在3D打印机软件切片过程中加速求得轮廓环上交点顺序,其特征在于:该算法利用STL文件中的边的连续性,通过层变边数组和上一层邻接边顺序链表加速求得当前层的邻接边顺序链表;
该方法按以下步骤进行:
步骤一:提取点、边、面的信息,具体为:通过计算机读取STL文件,提取当前三角面片中三个点信息存入点表,将该三角形在点表中的三个点的索引值两两组合存入边表,最后使用该三角面片的三条边的索引值重组存入三角面片表;
步骤二:对点表、边表冗余数据去重,具体为:先对set容器进行运算符重载,然后使用set容器分别载入点信息和边信息,实现自动去重;
步骤三:点、边、面数据转储,具体为:将去除冗余的点、边信息以及面信息存储到map容器中,用于后续算法调用;
步骤四:建立层变边数组,具体为:将所有边的索引值存放于第一次被截平面所截的层;
步骤五:求第一层轮廓环上的邻接边顺序链表,具体为:
1)根据三角面片的邻接拓扑关系,求得第一层邻接边顺序链表;
2)利用层变边数组中数据依次加速求得后续层的邻接边顺序链表:
3 )根据邻接边顺序链表求得每层的交点顺序链表;
步骤六:求除了第一层以外轮廓环上的邻接边顺序链表,具体为:在求其他层的邻接边顺序链表时,首先遍历前一层邻接边顺序链表中的每个元素,若边与当前层截平面不再相交则将其从链表中删除;
此时得到该层散乱的邻接边顺序链表,接下来根据邻接拓扑关系将散乱的邻接边顺序链表和层变边数组中该层数据重组,重组时按照下述步骤:
遍历当前层链表map,从前往后每个链的首和尾与层变边数组中数据进行链重组,直至该链长度大于三,且链的首与尾同属一个三角形,或者层变边数组中没有可以再链接的边,则开始对下一个链进行重组,直至层变边数组中所有的边都被加到链中停止;
再次遍历当前层链表map,用当前链尾端与其他链表首进行连接,如果匹配成功则将后链表按正常顺序加入前面链,如果当前链尾端与其他链表尾端存在邻接关系则将后链表以倒序加入前链表并删除后链表,直到当前链的链表首与链表尾存放的边同属于一个三角面片,然后开始下一个链表的连接工作,直至所有链表均处理完;
最后使用邻接边顺序链表中所有的边与截平面相交求出交点,并且将交点按顺序存入交点顺序链表。
[0009]所述步骤五包括:
在求第一层邻接边顺序链表时,先取得层变边数组中第一层的第一个边数据,根据该边索引值得到该边所属的两个面,接下来根据面中的边索引信息找出层变边数组中该层拥有的其他边作为该边的邻接边,重复上述过程直至该链的长度大于三条边时,且链表的首和尾同属与一个三角面片,或者层变边数组中的所有边都已被加入该层的邻接边顺序链表中,则停止该操作;若在层变边数组的边没有加完之前,该链表的首和尾同属一个三角面片且该链长度大于三,则将当前链表加入链表map中,所述链表map用于存储每层的多个链表,形如map〈int,CList〈int,int>*>,然后开辟新链存储层变边数组的数据,然后将新建链加入链表map,层变边数组中后续数据依上述方式加入新链中,直至层变边数组中数据都被使用,最后将得到的该层完整的链表map存入链表map的map的当前层中,形如map〈int, map<int, CList<int, int>^>氺>。
[0010]在所述步骤六中删除前一层邻接边顺序链表中的元素时遵循以下规则:
1)如果该边所在位置为链表的首或尾,则将其从该链表直接删除;
2)如果该边所在位置为非链表的首或尾,则新建一个空链表,然后将该边后面的其他边依次加入新建链表中,然后至后向前删除当前链表的数据,直至该边及该边至后的所有边被删除,最后将新建的链表加入该层的链表map尾部;
3)如果该边与该层截平面相交则保留。
[0011]优点及效果:该算法综合了层变数组和动态边表算法的优点,并且利用了相邻两切片层邻接边关系延续的特性,通过断链和重组链的方式,加速了求得相邻层轮廓环的工作,减少了3D打印机各工作阶段中的模型处理阶段时所需时间,且打印出模型质量高。
[0012]【附图说明】:
图1为层变边数组和邻接边顺序链表算法流程图;
图2为截平面和边的6种关系图;
图3为齿轮心模型载入后效果图;
图4为用层变边数组和邻接边顺序链表算法对齿轮心模型切片后整体效果图;
图5为用层变边数组和邻接边顺序链表算法对齿轮心模型切片后第300层切片效果图;图6为使用层变数组和动态边表算法和使用层变边数组和邻接边顺序链表算法对齿轮心切片用时对比图;
图7为一个文件中两个模型载入后效果图;
图8为用层变边数组和邻接边顺序链表算法对一个文件中两个模型切片后整体效果图;
图9为用层变边数组和邻接边顺序链表算法对一个文件中两个模型切片后第50层效果图;
图10为使用层变数组和动态边表算法和使用层变边数组和邻接边顺序链表算法对一个文件中两个模型切片用时对比图。
[0013]【具体实施方式】:
下面结合附图和具体的实施方式对本发明做进一步的说明:
本发明是一种基于层变边数组和邻接边顺序链表的等层厚切片算法,用于在3D打印机软件切片过程中加速求得轮廓环上交点顺序,该算法的技术思想为:利用STL文件中三角面片的连续性,使用层变边数组和上一层邻接边顺序链表加速求得当前层的邻接边顺序链表,该方法程序流程图如图1,该方法按如下步骤进行:
步骤一:提取点、边、面的信息,具体为:通过计算机读取STL文件,提取当前三角面片中三个点信息存入点表,将该三角形在点表中的三个点的索引值两两组合存入边表,最后使用该三角面片的三条边的索引值重组存入三角面片表。
[0014]步骤二:对点表、边表冗余数据去重,具体为:先对set容器进行运算符重载,然后使用set容器分别载入点信息和边信息,此时将实现自动去重。因为去重后的数据量急剧减少,所以将缩短后续算法所需时间,以至于节省
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1