一、背景

3D打印技术出现在20世纪90年代中期,其原理是使用三维扫描采集物件的三维数据,或直接使用计算机设计三维模型,利用软件算法将物件模型分成若干层,打印机内装有液体或粉末等打印材料,与电脑连接后,通过电脑控制把“打印材料”按照层的形状一层层叠加起来,当每层材料固化后便打印下一层,从而形成成实物。

3D打印技术多大数十种,其中较常见的有FDM熔融沉积成型3D打印技术、SLA光固化快速成型3D打印技术、DLP数码影像投射3D打印技术。FDM是将材料融化,通过喷嘴挤出,逐层堆叠,创建卓越的热稳定性和耐化学性,并有良好的强度重量比。FDM适用于很多行业。SLA 出现较早,SLA是通过紫外光照射光敏树脂固化成型。S通过一个激光发射器将光束射到反射镜上,通过计算机控制反射镜的角度,从而使光速发射到适当的点,定点诱导光敏树脂原料的聚合。当一个点固化后,计算机控制激光束投向下一个点。DLP与SLA 类似,但是DLP不像SLA产生单独光斑。DLP通过图像投影技术将一层影响通射到树脂上,经过一段时间照射使光敏树脂原料固化,其打印速度比SLA 快,打印精度也有所提高。

本文属于3D打印技术领域,涉及一种自动添加支撑的算法。目的是提供一种检测三维模型支撑点的算法,解决了3D打印中某些特殊结构因重力影响导致打印失败的问题。

光固化快速成型3D打印示意图

二、3D打印支撑

我们都知道3D打印技术的原理是,将材料一层一层的堆积,直至模型最终成型。下一层材料堆叠在上一层材料上,对于不规则的物体,下一层与上一层不一样,并不是完美堆叠,可能有平移,那么这里就要考虑到一个重力的问题。由于材料受重力影响,有可能发生坠落,从而导致打印失败。

3D打印支撑是指为了保持3D打印物品的物理平衡而产生的支架材料。文献[1]提出一种斜壁结构自动支撑算法。

三维模型有若干三角形片面组成,文献[2]中提到有以下四种情况要添加支撑:

(1)被支撑面与Z轴垂直

(2)被支撑面与Z轴形成一定夹角θ

(3)悬吊边、悬吊点

(4)悬吊线

本文只考虑被支撑面与Z轴形成一定夹角θ及悬吊点两种情况便可满足大部分情况。

1. 45度倾斜

根据重力原理,如果一个物体的某个面与垂直线的角度大于45度且悬空,就有可能发生坠落,导致打印失败。一般的经验法则是:如果悬垂物与垂直方向倾斜的角度小于45度,那么可以不使用支撑结构;与垂直方向成45度以上角度的悬垂需要3D打印支撑结构。如下图:第一个形状不用添加支撑结构,第二第三个形状需要添加支撑结构。

r

物体表面倾斜

2. 悬吊点

对于悬空的结构,由于下方没有可以支撑它的结构,材料就会在重力的影响下下坠,轻则影响最终打印物的精准度,重则变成乱糟糟的一团完全打印失败。同样,在打印内含中空结构的物体时也会出现类似问题,导致打印失败。

悬吊点

三、算法原理

算法的原理分为两部分,第一部分查找满足条件的悬吊点,第二部分查找满足条件的支撑面,对于部分查找满足条件的面使用经典的种子填充算法。

通过hash表建立拓扑结构,先遍历所有三角形片面,找到悬吊点,再使用种子填充算法的变种算法,查找相邻三角形,并判断是否需要添加支撑,将需要添加支撑的三角形组成集合,并从集合中找到孤立点,对于孤立点必添加支撑,对于支撑点以外的区域,使用网格法均匀增加支撑点。

1. 三维模型文件格式简介

常见的三维文件格式有abc、glTF、fbx、obj、dea、sts、3ds等,stl作为一种简单的格式,使用非常方便,本文采样这种格式进行测试。stl只能用来表示封闭的面或者体。stl文件有两种:一种是ASCII明码格式,另一种是二进制格式。

二进制STL文件用固定的字节数来给出三角面片的几何信息。

文件起始的80个字节是文件头,用于存贮文件名;

紧接着用 4 个字节的整数来描述模型的三角面片个数,

后面逐个给出每个三角面片的几何信息。每个三角面片占用固定的50个字节,依次是:

3个4字节浮点数(角面片的法矢量)

3个4字节浮点数(1个顶点的坐标)

3个4字节浮点数(2个顶点的坐标)

3个4字节浮点数(3个顶点的坐标)个

三角面片的最后2个字节用来描述三角面片的属性信息。

一个完整二进制STL文件的大小为三角形面片数乘以 50再加上84个字节。

2. 基于哈希表的三维模型拓扑结构

一个三维模型包含大量三角形数和其发向量。对于一个由三角形片构成的多面体,其每个三角形有三个顶点,每个顶点同时属于若干个三角形,因此相邻的三角形存在拓扑关系。在计算过程中,需要非常平凡地访问三角形的顶点即法向量,这个过程非常耗时,因此建立三角形之间的拓扑结构,可大幅提高算法的速度。

文献[3]提出一种基于红黑树的STL拓扑重建算法,红黑树时间复杂度是O(log n),本文选择hash表作为数据结构,理想情况下时间复杂度是O(1),平均速度比红黑树更快。

对于点p(x,y,z),以p为key,以p相邻的三角形的索引的集合为值,建立拓扑结构。哈希函数为:H(key)= p.x *1000 + p.y*1000 + p.z*1000;对于三角形t1、t2,其顶点为为p1,p2, p3, p4,以点为hash的键,以点相邻的三角形为hash值,构建如下数据结构:

三维模型拓扑结构与hash表

3. 支撑面的识别

a. 种子填充

本文使用种子填充算法识别大片彼此相邻的三角形,即支撑面。

种子填充算法,也叫泛洪算法——Flood Fill,是一种从连通区域内的一个种子点开始,逐渐向其四周扩展,填充整个区域的算法,多用于图像处理中,用于填充具有不同颜色的连接的,颜色相似的区域,直到图形的边界。

种子填充算法有几个重要的要素如下:

1.领域选择策略。即确定周围相邻的三角形。

2.包含策略。即判断一个三角形是否能纳入当前连通区域,以及什么样的三角形不能加入。

3.生长方式。深度优先还是广度优先。

b. 领域选择策略

相邻的三角形即为领域,即两个三角形共边,则这另个三角形相邻。判断条件:三角形t1和t2有公共顶点,则t1和t2相邻。

c. 包含策略

满足添加支撑的添加即可包含,判断条件:三角形t的法向量n,Z轴负方向p,p与n的夹角θ,有 θ > 45° 且 θ < 135°

三角形法向量与Z轴角

d. 生长方式

采用广度优先策略搜索,即从某个三角形出发,首先判断改三角形是否被包含,若被包含则依据拓扑结构,依次获取相邻的三角形的集合,并判断该集合内的每三角形是否被包含,以次规则直至所有的相邻的三角形都被访问。

e. 识别支撑面的流程

  1. 取一个未标记的种子三角形
  2. 标记该三角形,检测该三角形是否满足支撑面判断条件,满足就添加到支撑面
  3. 获取相邻三角形,并重复2
  4. 若某一三角形不满足则检查支撑面的三角形面积和是否大于阈值
  5. 若大于阈值则将支撑面输出并继续执行1
  6. 重复1-5,直到已经检测所有三角形为止

识别支撑面流程图

4. 悬吊点的识别

由于模型表面通常都不是平整的面,会产生悬吊点结构。该点的Z坐标低于周围点的Z坐标。判断某一顶点为悬吊点,可通过模型拓扑结构,获取改顶点所有相邻点,通过比较Z坐标来确定。一般会设置一个阈值高度,当悬吊点与周围相邻点Z坐标差的平均值大于该阈值高度则识别为悬吊点。

如图,点1的Z坐标低于点2、点3、点4、点5、点6、点7,此时点1为悬吊点。

悬吊点

5. 支撑点的确定

支撑点为最终输出的可添加支撑的点,支撑点应满足以下条件:

(1)包含所有的悬吊点

(2)覆盖所有的支撑面

(3)支撑点之间保持适当间隔,防止支撑粘连

(4)支撑点应均匀分布,防止模型受力失衡倒塌

6. 支撑生成步骤

1、检测模型的悬吊点并作为支撑点

2、检测模型的支撑区域

5、对每个支撑区域xy平面投影

6、用网格覆盖平面投影

7、判断网格中是否有悬吊点,若没有则标记网格

8、遍历所有网格,对没有标记的网格取中心

9、计算步骤8中网格中心与模型下表面的交点,作为支撑点

10、生成支撑结构

如下图,支撑区域为不规则形状,使用网格覆盖支撑区域,点1为悬吊点,因此悬吊点的位置即为支撑点,其他网格以网格中心与模型下表面相交的点2、 3、 4 为支撑点。

支撑区域投影

四、计算实例

实验环境

处理器

Intel Core i7-9750 2.60GHz

内存

8.00GB

操作系统

64位 Windows 10

实验结果

模型

三角形数量

支撑点数量

耗时(毫秒)

模型1

204

26

37

模型2

185636

74

158

模型3

222838

27

238

网格间隔:5毫米

模型1

模型2

模型3

参考文献

[1]黄小毛 叶春生 郭开波 莫键华 基于STL的斜壁结构支撑及自动生成算法 2009

[2]王燕宁 3D打印支撑结构自动生成算法及实现 2018

[3]安涛 戴宁 廖文和 袁天然 基于红黑树的STL数据快速拓扑重建算法 2008

3D打印自动支撑算法相关推荐

  1. 能让3D打印自动支撑和减少压力积累的云软件

    Carbon的软件总监Roy Goldman说:"Carbon的软件创建了一个数字画布,每个立方毫米的零件都可以在打印之前进行设计.控制和优化." 模拟关键定位.支撑 Carbon ...

  2. 通过3D打印自动售货机来定制你的食物

    什锦杂果,乏味的薯条将不复存在.3D打印零食的自动售货机将可能出现在你身边. 芬兰国家技术研究中心(VTT)正投资于高科技的自动售货机,根据该公司的网站的介绍,目前可以通过3D打印来提供食物. VTT ...

  3. 3D人体模型自动生成算法,连肌肉颤动都清晰可见!一作来自北大图灵班

    子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 我们在打游戏.看动漫的时候,遇到过不少这样的情况: 感觉哪里不太对-- 现在,这些3D人体模型可以得到改进了~体态更逼真.褶皱更自然.肌肉更 ...

  4. 【STL切片算法文献笔记】基于GPU并行计算的3D打印切片算法

    3D打印模型切片算法研究 文章目录 3D打印模型切片算法研究 论文介绍 前言 一.介绍 二.基于反向光线追踪的切片算法 1.反向光线追踪算法 2.快速获取切片轮廓 三.轮廓提取和NUBRS拟合优化 1 ...

  5. [论文学习笔记]01一种轮廓平行扫描算法【3D打印路径规划】

    文章目录 零.论文来源 0.1 概述 一.算法描述 1.1 定义一些概念 1.2 域分区 1.3 偏移量的生成 1.4 自交问题 1.5 尖角 1.6 外部轮廓和内部轮廓相交 1.7 空隙 1.8 连 ...

  6. 革命性3D打印数据处理软件 CHITUBOX Pro 1.3.0 Crack

    CHITUBOX PRO登场 革命性的3D打印数据处理软件,让你发挥3D打印的无限潜力 支持多种主流CAD文件格式 除了传统的stl和obj文件,CHITUBOX Pro还支持导入各种主流的CAD文件 ...

  7. 不需要支撑结构的3D打印技术:多轴机器人3D打印系统

    为期五天的世界上最大的计算机图形和交互技术会议-SIGGRAPH 2018将于下周在温哥华启动.来自世界各地的许多研究团队在会上展示他们的最新项目成果,包括3D形状.增强现实.拓扑优化和3D扫描.今年 ...

  8. 无人车最新破绽:3D 打印障碍轻松骗过 9 成算法

    本文转载自IT之家 L4 级自动驾驶就能解放人类? 未必. 不久前,全球 31 家自动驾驶公司接到了同一支科研团队的通知: 你们的 L4,有重大缺陷. 缺陷集中在多传感器融合方案,3D 打印的路障,能 ...

  9. julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域...

    编程界的新宠 Julia 发布 1.0 正式版本,多种优势集于一身 2018-08-14 14:14 公司 Julia 的累积下载次数超过 200 万,已被应用于自动驾驶汽车.机器人.3D 打印.精准 ...

  10. 人工智能3d建模算法_人工智能技术帮助实现3D打印建模过程

    很多制造商现在都已经开始使用人工智能工具了,可以在不需要事先3D建模的情况下自动完成3D打印部件的设计过程.这就意味着有了人工智能技术的加入,可以成功的精简掉3D打印技术最繁琐.人工成本也是最高的3D ...

最新文章

  1. 银行柜台基金买卖现长龙 业内支招宜用新方式
  2. SAP PM入门系列20 - IH08 Equipment报表
  3. Python的垃圾回收机制(引用计数+标记清除+分代回收)
  4. 在Windows环境下搭建Android开发环境
  5. 第01讲:必知必会,掌握 HTTP 基本原理
  6. matlab第二次上机作业答案,第二次上机作业
  7. 转-用qemu-nbd实现mount虚拟硬盘到Host上的功能
  8. Linux: centOS6.5 RabbitMQ
  9. 美团DSP广告策略实践
  10. 收集瓶盖赢大奖(信息学奥赛一本通-T1045)
  11. 机器人与目标匹配问题及解决 虚拟动力学 纳什平衡 Q-Learning
  12. 男人要走过几条路才称得上男子汉?
  13. 【劣等上等】MMD动作+镜头数据下载
  14. 百度高德地图收费5万?
  15. 今天是星期五,上班已经三个礼拜了
  16. ModBus(RTU TCP UDP通信)及利用socket通信(DTU)实现Modbus-RTU通信协议
  17. 分享一个react 图片上传组件 支持OSS 七牛云
  18. 关于为什么sklearn画出来的ROC曲线图是折线的问题
  19. python编程价格_Python基础练习实例46(查询价格)
  20. PCL:投影滤波(二)将点云投影至球面

热门文章

  1. GD32VF103移植SVSTEMVIEW
  2. AESUtil加密加将单个工具类打成jar包并引用
  3. mysql编码gbk_更改mysql数据库编码为GBK
  4. Android仿miui11风格,华为手机适配MIUI11图标风格主题-适配EMUI9.1/9.0
  5. 商务网站建设与维护【7】
  6. 网站被挂黑链是什么原因,如何解决挂黑链问题!
  7. 1602显示字符串的C语言程序,LCD1602程序显示字符串
  8. SWF播放器object DEMO
  9. 点线面缓冲分析(转自esri中国社区)
  10. linux系统安装花生壳