3D打印开源软件Cura分析(1)

Cura是Ultimaker公司开发的3D打印开源软件,在所有的3D打印开源软件中应属上乘之作,很有研究的价值。国内不少高校对其有深入研究,研究成果体现在其毕业论文之中。国内互联网上也有很多文章对其代码进行了剖析。

最近一段时间,读了几篇论文,分析了Cura的部分代码,打算写上若干篇分析文章。这里的视角与他人不一样,并不具体讲代码,不拘泥于具体的切片算法,而是通过使用软件与阅读代码后总结描述其软件的设计与架构。

所分析的代码是Cura最新的代码,分析过程中直接同步GitHub上的代码库,发现软件开发目前很活跃的,代码提交比较频繁,开发库中的版本已经合并到3.4了。

本篇主要描述:

Cura软件使用的开发语言以及使用的第三方开源库;

切片引擎CuraEngine程序的四种命令行参数调用接口;

Cura软件代码总体评价。

Cura软件简介

Cura软件实际上包含两个软件:Cura与CuraEngine。前者是图形界面程序,后者是专用于切片的后台程序,前者依赖于后者,在切片时将调用后者。

两个软件使用的编程语言与第三方库

第三方库的功用

在编译CuraEngine软件时也可不启用Arcus与protobuf库,这样编译出来的软件将导致Cura无法调用它,而只能单独使用。

CuraEngine软件命令行接口

CuraEngine是一个控制台程序,在cmd中运行CuraEngine help后,将打印其用法信息:

usage:

CuraEngine help

Show thishelp message

--connect[:

]

Connect to via a command socket,

instead ofpassing information via the command line

Loadsettings.json file to register all settings and their defaults

-v

Increasethe verbose level (show log messages).

-m

Set thedesired number of threads. Supports only a single digit.

CuraEngine slice[-v] [-p] [-j ] [-s=] [-g] [-e] [-o] [-l ] [--next]

-v

Increasethe verbose level (show log messages).

-m

Set the desired number of threads.

-p

Logprogress information.

-j

-s=

Set asetting to a value for the last supplied object,

extruder train, or general settings.

-l

Load an STLmodel.

-g

Switchsetting focus to the current mesh group only.

Used forone-at-a-time printing.

-e

Switchsetting focus to the extruder train with the given number.

--next

Generategcode for the previously supplied mesh group and append that to

the gcodeof further models for one-at-a-time printing.

-o

Specify afile to which to write the generated gcode.

The settings are appended to the last supplied object:

CuraEngine slice [general settings]

-g [currentgroup settings]

-e0[extruder train 0 settings]

-lobj_inheriting_from_last_extruder_train.stl [object settings]

--next[next group settings]

... etc.

In order to load machine definitions from customlocations, you need to create the environment variable CURA_ENGINE_SEARCH_PATH,which should contain all search paths delimited by a (semi-)colon.

上面打印了三种命令行接口,实际上读其源代码发现有四种接口的,只是第四种适合于开发者使用。

下面罗列CuraEngine的四种命令行调用接口:

Cura软件代码总体评价

Cura软件新版本根据 https://github.com/Ultimaker/Cura 中的描述:

This is the new, shiny frontend for Cura. Checkdaid/LegacyCurafor the legacy Cura that everyone knows and loves/hates. We re-worked the whole GUI code at Ultimaker, because the old code started to become unmaintainable.

Cura代码做了全部重写,以前用的是Python下的wxWidgets实现图形界面,实在维护不下去了,只好重写。现在用的是PyQt+QUICK实现,Cura的代码可读性不错,注释量偏少。阅读此代码如果不深究三维渲染,则需要对Python,Qt,QML,QUICK有一定基础,否则还需要深入研究Uranium(https://github.com/Ultimaker/Uranium)。

CuraEngine为了追求切片效率,代码是全部使用C++编写,代码可读性很好,注释较多,也能发现一些设计缺陷,以后会提到。在Windows下使用VC编译器编译不了,需要修改代码,我是在Ubuntu系统下编译的。CuraEngine是一个控制台程序,代码的主线逻辑非常简单,从main函数入手,顺着slice命令行调用模式的流程往下看,可很快了解代码顶层的设计实现。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180617G0G5WI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券