3D打印切片软件Cura及CuraEngine原理分析

本文详细剖析了3D打印切片软件Cura的工作原理,尤其是CuraEngine的切片流程,包括模型载入、分层、组件划分、路径生成和gcode生成等关键步骤。CuraEngine通过优化的2D图形运算,如交、并、差和偏移,实现高效切片。文章还讨论了CuraEngine的不足及其改进,为3D打印爱好者和开发者提供了深入的理解和实践指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

        年初开始进入3D打印行业,受命以Cura为基础,研发一款自主的3D打印切片软件。

        自主研发要取其长处,补其不足,首先自然是要搞清楚Cura到底做了什么,读Cura的代码是必需的。我一向都觉得比起自己写代码来,读别人的代码是一个漫又而痛苦的过程,读者的思想与写者总有偏差,往往又无法验证自己的猜想是否正确,只叹人脑不是电脑,无法把眼前的代码从头到尾执行一遍。不知道各位资深程序会有什么办法,我的办法是“翻译”,看着别人写的代码,加上自己的理解之后,按自己的喜好重新写出来,看一段翻译一段,等全部翻译完成,理论上作者的思路也明白了,同时还有了一份功能一模一样的代码,自己的理解是否正确,也可以通过执行“翻译”出来的代码验证。

计划总是美好的,中间的工程确总是充满变数,之间的曲折折叠不说。经过若干次推倒重写,勉强算是有了一份自己的切片软件,又经过了半年的推敲摸索以及打印经验积累,一个还算另自己满意的切片软件最终诞生。起名Pango,先观大略。

        Pango的介绍和说明先按下不表,以会有机会另外发文详述。
        在Pango的开发过程中,我对于Cura的理解也日益深入。时至今日,我也有了信心可以把我的这些经验、理解和心得分享出来,供大家参详一二,若能对后来的Cura研究者有所助益,那是再好不过。

 

Cura的架构

        Cura是一个python语言实现,使用wxpython图形界面框架的3D打印切片界面软件,说它是界面软件是因为Cura本身并不会进行实际的切片操作。实际的切片工作是由另外一个C++语言实现的CuraEngine命令行软件来具体负责的,用户在Cura提供的界面上的绝大多数操作如加载模型、平稳旋转缩放、参数设置等最终会转换成并执行一条CuraEngine命令;CuraEngine把输入的STL、DAE或OBJ模型文件切片输出成gcode字符串返回给Cura;Cura再把gcode在3D界面上可视化成路径展现给用户。

        我主要参考的代码是CuraEngine,本文主要篇幅也会放在CuraEngine上。而Pango的界面代码就主要靠我自己发挥了。

        Cura和CuraEngine都可以Github上找到,地址:

        https://github.com/daid/Cura

        https://github.com/Ultimaker/CuraEngine

        我所参考的版本是15.04,15.06之后Cura和CuraEngine都有较大的改动,但核心思想没变。所以本文分析的代码也到15.04为止。

        言归正传,下面我们将开始一步一步揭开CuraEngine把一个模型文件转换成为gcode的过程。

切片流程概述

        从总体上讲,CuraEngine的切片分为五个步骤:


步骤一:模型载入

        有一点3D编程经验的人都知道,计算机中的3D模型大多是以三角形面组合成的表面所包裹的空间来表示的。三角形作为3D模型的基本单元,有结构简单,通用性强,可组合成任意面的特点;空间坐标中只要三个点就可以表示一个唯一的三角形,两点只能表示一条直线,而再多的直线也无法组成一个平面;空间中的任意三个不共线的点都可以组成一个三角形,而四个点所组成的四边形就必需要求四点共面;任意的表面都可以拆解成三角形,一个四边形可以拆解成两个三角形,但一个三角形确没有办法用四边形组合而成。计算机所擅长的事情就是把简单的事情不断重复,而三角形正是因为这些特性,成为了计算机3D世界的基石。

        CuraEngine内部也是用三角形组合来表示模型的,不过同样一个三角形组合,确有无穷多种数据结构来进行存储,CuraEngine切片的第一步,就是从外部读入模型数据,转换成以CuraEngine内部的数据结构所表示的三角形

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值