【此系列文章基于熔融沉积( fused depostion modeling, FDM )成形工艺】

这一篇文章说一下填充算法中的网格填充。网格填充在现有的较为成熟的引擎中是非常普遍的:skeinforge从扫描线的连续性上考虑採用的四边形填充,看下图:



打印顺序:a→b→c→d→e→f→g→h→i→j→k→l→⋯→t→a所以打印能够以行为单位进行,每两行是一笔画下来的。

slice3r从模型的柔韧性上考虑採用的是六边形填充(蜂窝填充)。cura从打印速度及开发成本上考虑则主要採用的是线填充(不知道如今是否还是这样。去年的时候cura因此打印质量不如skeinforge和slice3r)。我的上一家雇主,为了实现建筑打印,从模型硬度上考虑则须要实现三角形填充(理论上讲三角形填充也不是最合适,下文将提到)。

为什么那么多切片程序都默认网格填充。非常大原因是它能够不做不论什么改变的兼顾各种拓扑结构,连续性强,平均长度和方差都相对符合打印机的基本要求(请參看第一讲切片引擎的基本要求),并且开发起来也相对easy。

在我的程序里。不局限于是多边形填充。理论上能够是随意填充图案的,动态载入图案。然后动态拼接成网状。我的方案是先把基本图形单元存入xml,然后在程序中像拼地板砖一样把它扩展,最后就实现了网格填充。xml文件格式例如以下:

<?

xml version="1.0" encoding="utf-8" ?>
<Rectangle LineCount="3" XVol="0.1" YVol="0.1" Angle="30"> <Line>
<Begin x="0.10" y="0.10"/>
<End x="0.10" y="0.00"/>
</Line> <Line>
<Begin x="0.10" y="0.00"/>
<End x="0.00" y="0.00"/>
</Line> <Line>
<Begin x="0.10" y="0.00"/>
<End x="0.00" y="0.10"/>
</Line>
</Rectangle>

这是正三角形填充的一个基本图元,当中LineCount是图元中的线段数。XVol是线段集合中x的最大值。Angle为偏转角度,这个參数非常关键。由于非常多不规则图形不太方便xy轴正方向的拼接,须要拼接好然后做一定角度的旋转变换。以下的xml代码是正六边形填充的基本图元。

<?xml version="1.0" encoding="utf-8" ?>
<Rectangle LineCount="6" XVol="3.00" YVol="1.73" Angle="0">
<Line>
<Begin x="0.00" y="0.87"/>
<End x="1.00" y="0.87"/>
</Line> <Line>
<Begin x="1.00" y="0.87"/>
<End x="1.50" y="1.73"/>
</Line> <Line>
<Begin x="1.00" y="0.87"/>
<End x="1.50" y="0.00"/>
</Line> <Line>
<Begin x="1.50" y="0.00"/>
<End x="2.50" y="0.00"/>
</Line> <Line>
<Begin x="2.50" y="0.00"/>
<End x="3.00" y="0.87"/>
</Line> <Line>
<Begin x="3.00" y="0.87"/>
<End x="2.50" y="1.73"/>
</Line> </Rectangle>

接下来在程序中把它展开。然后用clip算法。这样就得到了全部的填充矢量的集合。以下最关键的是把这些填充矢量收尾相接的,间断次数最少的组织起来(可參考图的深度优先遍历),注意:这里填充矢量的方向在组织的时候是能够改变的。以及把长度小于阈值的边给去掉。这样就实现了最简单的网格填充。

我们平时所说的填充大都指的是二维概念上的。能不能实现三维概念上的填充,或者说是不是有必要实现三维的填充,我觉得是有必要的。就像是我上面提到的建筑材料的打印。要尽可能的硬度大。就须要实现相似于金刚石的内部结构,就应该是一个正四面体的填充。这就是一个三维概念上的填充。实现方法和上面提到的相似。仅仅只是图元扩展和clip的时间复杂度要大得多,三维的clip算法眼下有没有较为成熟的这个我本人还没有去研究过。

转载请注明出处:http://blog.csdn.net/fourierfeng/article/details/47605363

最新文章

  1. 写给.NET开发者的数据库Migration方案
  2. 备忘录:hadoop技术一点积累
  3. 利用jstree插件轻松构建树应用
  4. 10 个强大的开源 Web 流量分析工具(转帖)
  5. oracle系列--第四篇 Oracle的卸载
  6. 2016年10月26日 星期三 --出埃及记 Exodus 19:10-11
  7. (转)linux多线程,线程的分离与结合
  8. 快速访问WCF服务--ServiceModel 元数据实用工具 (Svcutil.exe)
  9. 用TMS的控件就可以了,有bug叫他们改
  10. 这样就算会了PHP么?-4
  11. 用户名_密码获取Access_Token
  12. UVA 1374 Power Calculus
  13. UIKit控件直接显示网页文字内容
  14. ThreadLocal类及常用的线程安全类探究
  15. 部署DNS服务
  16. 20175315 《Java程序设计》第6周学习总结
  17. windbg无故不显示command窗口
  18. MATLAB——读取xls文件内容
  19. HOJ 2156 &POJ 2978 Colored stones(线性动规)
  20. ECCV 2014 Results (16 Jun, 2014) 结果已出

热门文章

  1. RocketMQ学习笔记(3)----RocketMQ物理结构和逻辑部署结构
  2. 结构化数据、半结构化数据、非结构化数据——Hadoop处理非结构化数据
  3. 学习爬虫:《Python网络数据采集》中英文PDF+代码
  4. Python学习————字典的增删改查
  5. Linux gcc中的LIBRARY_PATH 和 LD_LIBRARY_PATH
  6. 2015 Multi-University Training Contest 2 hdu 5308 I Wanna Become A 24-Point Master
  7. 2015 Multi-University Training Contest 1 y sequence
  8. Codeforces 558E 线段树处理字符串内排序
  9. Ryu基本操作的REST API调用演示样例
  10. Leetcode:Singel Number