3D打印技术之切片引擎(2)
来源:互联网 发布:文本朗读软件 编辑:程序博客网 时间:2024/05/01 19:19
【此系列文章基于熔融沉积( fused depostion modeling, FDM )成形工艺】
在上一篇文章中,我从总体上介绍了一下切片引擎技术,从这一篇文章开始,我开始说一下具体的技术细节。
切片引擎,实体部分包括:
提取边界矢量——>添加多边——>生成填充矢量集合。
为了避免实体和地板的粘连有时候还需要生成个底座,以及为了避免打印头停止打印后有继续吐丝的现象而影响到打印质量,有时候也需要添加墙结构,这些都是很工程的问题,开发上难度也很低,这里就不赘述。
除之外就是支撑部分。这篇文章就先说下支撑算法。
生成支撑矢量集合分为人工生成和自动生成两种,优越的支撑算法主要体现在
1,省材料。
2,生成速度快。
3,生成的支撑体与零件实体较少的接触与干涉,有利于剥离。
4,支撑能稳固的支撑住任意结构的模型。
其中,3和4互斥,要在两者做出一个平衡;支撑体与实体干涉太少必然就不够稳固,当打印到上层的时候就容易使实体和地板的连接处松动以及实体部分塌陷等等,这要在开发中做到尽量的两者兼顾,要在保证4的情况下尽量的实现3。
毕竟,切片引擎的优劣主要体现在实体生成质量,支撑算法仅仅是锦上添花,对于国内的大多数刚刚起步的3D打印企业目前还没有必要把过多的精力放在支撑算法的研发上。
在我的切片引擎中我用的三维布尔运算,采用线扫描,采样间隔大于实体的采样间隔。
这样的方案不是最好的,但是可以在开发周期和软件质量方面做出一个平衡。
具体方案如下:
将原型零件的STL模型上所有法向量Z向分量为负的三角形面片合并成支撑区域,再分别将各区域沿Z轴向基底投影,从而得到所需支撑的STL模型。如果投影区域与零件模型的实体有相交区域,还需要对生成的支撑进行干涉处理,其中要用到三维布尔运算。具体流程如下图:
我认为较好的方案是在一篇国内的论文当中反映的:
上图是描述零件待支撑的区域,当且仅当发现对应模型的某一部位有倾斜角度过大的下表面、下棱线和悬吊点这3种结构特征之一时,应该对其加以支撑;其他情况一律不加支撑。由于STL文件是三角形面片的无序集合,无法由其直接知道不同三角形之间的连接关系,不利于后续待支撑区域的识别和分层等处理,所以先应在无序三角形基础上建立其邻接关系,即拓扑信息。也就是说要识别出悬吊点,下棱边和倾斜角过大的下表面。倾斜角过大的下表面每一层切片对应位置都需要添加支撑,而悬吊点和下棱边只需要对周围较小的邻域内的层添加支撑。
通常根据三角面片的法向矢量与z轴正向的夹角大小对STL模型中三角面片进行分类,大于90度的三角形称为下表面三角形,小于90度的称为上表面三角形,正好等于90度的为垂直面三角形。倾斜角度过大的下表面是由法向向量与z轴正向的夹角大于某一阈值(不同成形机系统对应的阈值大小也不同)的三角形连接而成的区域。先将法向向量与z轴正向的夹角大于某一阈值的待支撑三角形找出来,并将彼此共点或共边相邻的三角形合并成各个独立的面域即得到了待支撑的下表面。下棱边至少包含在1个下表面三角形中,且包含该边的三角形中第3点的z坐标均大于这条边2个端点的z坐标,将彼此共点相邻的下棱边合并成各条独立的下棱线。悬吊点也至少包含在1个下表面三角形中,且该点邻接三角形中另外2点的z坐标均大于这个点的z坐标,则确定该点为悬吊点。
- 3D打印技术之切片引擎(2)
- 3D打印技术之切片引擎(2)
- 3D打印技术之切片引擎(3)
- 3D打印技术之切片引擎(3)
- 3D打印技术之切片引擎(1)
- 3D打印技术之切片引擎(4)
- 3D打印技术之切片引擎(5)
- 3D打印技术之切片引擎(6)
- 3D打印技术之切片引擎(7)
- 3D打印技术之切片引擎(1)
- 3D打印技术之切片引擎(4)
- 3D打印技术之切片引擎(5)
- 3D打印技术之切片引擎(6)
- 3D打印技术之切片引擎(7)
- 3D 打印切片软件 CuraEngine 介绍
- HTML5 2D游戏引擎研发系列 第四章 <Canvas技术篇-画布技术-基于手动切片动画>
- 3D打印技术
- 3D打印技术
- Javascript里的EventTarget的规范及应用
- SetNull
- 电商概论上课笔记--作业一
- 黑马程序员——java基础---多线程
- C# 发送文件(Http Post),带其他参数
- 3D打印技术之切片引擎(2)
- 学习笔记(传智播客视频中的)
- STM32固件库详解 (转载)
- android模拟器太慢?
- C. Drazil and Factorial
- 能力与价值
- Machine Learning by Andrew Ng-----note
- 一,从头到尾在myeclipse中的java开发环境搭建之JDK安装
- malloc kmalloc vmalloc