Cura Engine 源码解析:Settings

Cura Engine 使用 Settings类来保存所有打印设置。该类定义在Settings.h 和Settings.cpp两个文件中,但并未在其中标注具体设置的说明,只能结合调用设置的代码上下文理解其含义。这些设置分散在众多代码中,因此解析其功能并不是一个简单的事情。

Settings类的主要成员有:

class Settings
{public:Settings();//0参数构造函数//添加设置void add(const std::string& key, const std::string value);//给外界提供的获取设置的接口函数//在Settings.cpp中对各类型进行了显示专用化template<typename A> A get(const std::string& key) const;
private:Settings* parent; //!指向父母Settings对象的指针std::unordered_map<std::string, std::string> settings;//用于存储所有的设置
}

Settings类对象使用私有类成员 settings来存储所有属于该对象的设置。同时有一个指向父Settings对象的指针parent,以便继承设置。比如:实例化一个Settings类对象用于保存某个打印头的特有设置(如打印温度、打印速速等),将其parent指向总设置对象。在处理这个打印头的轨迹时,就可同时访问打印头的设置和总设置。

参数成员列表:

返回值类型 设置名 引用处 功能解析
coord_t “layer_height_0” FffPolygonGenerator::sliceModel [102] 最底层的层厚度
coord_t “layer_height” FffPolygonGenerator::sliceModel [110] 每层层厚
bool “adaptive_layer_height_enabled” FffPolygonGenerator::sliceModel [119] 变化的层厚开关
bool “infill_mesh” Scene::processMeshGroupl [75]
bool “anti_overhang_mesh” Scene::processMeshGroupl [75]
bool “wireframe_enabled” Scene::processMeshGroupl [88] 表面网格打印模式开关

基本参数 Basic

打印质量 Quality:

层高(layer height):切片每一层的高度。直接影响到打印的速度
外壳厚度(Shell thickness) : 指的是对于一个原本实心的 3D 模型,在 3D 打印过程中四周生成一个多厚的塑料外壳
开启回抽(Enable retraction):指的是在两次打印间隔时是否将塑料丝回抽,以防止多余的塑料在间隔期挤出,产生拉丝,影响打印质量。
其中的层高和外壳厚度两个选项,都与 3D 打印机的挤出头直径密切相关。外壳厚度不能低于挤出头直径的 80%,而层高不能高于挤出头直径的 80%(14.07 版本 cura)

填充 Fill:

底/顶厚度(Bottom/Top thickness):与外壳厚度类似,推荐这个值和外壳厚度接近,并且是层厚和喷嘴直径的公倍数
填充密度(Fill Density):的就是原本实心的 3D 模型,内部网格状塑料填充的密度。这个值与外观无关,越小越节省材料和打印时间,但强度也会受到一定的影响

速度和温度(Speed and Temperature):

打印速度(Print speed):指的是每秒挤出多少毫米的塑料丝,吐丝速度。
打印温度(Printing temperature):打印材料的温度,喷头的温度。
热床温度(Bed temperature):让打印出来的 PLA 能比较牢固的粘在热床上的温度。

支撑(Support):

支撑类型(Support type)
无支撑(None)
接触平台支撑(Touching buildplate):只建立于平台接触的支撑
到处支撑(Everywhere):模型内部的悬空部分也会建立支撑

平台附着类型(Platform adhesion type):

指是否加强模型与热床之间的附着特性
无(None):直接在热床上打印 3D 模型
边缘型(Brim):解决翘边的问题,这样会在第一层的周围打印一圈“帽檐”,让 3D 模型与热床之间粘的更好,打印完成时去除也相对容易。
基座型(Raft):会在 3D 模型下面先打印一个有高度的基座,可以保证牢固的粘在热床上,但也不太容易去除

耗材(Filament)

直径(Diameter):线材的直径
(Flow):设置挤出塑料量相对于缺省值的百分比

高级 Advanced

机器相关设置(Machine)

挤出头尺寸(Nozzle size):打印机喷头的直径。
回抽(Retraction):
回抽的速度(Speed)
距离 (Distance)
质量(Quality)
首层厚度(Initial layer thickness):把它单独出来,其实是因为层高在一些特殊情况下可以被设置为非常小的值,但如果第一层也是这样的话就没法和热床很好的粘合了。因为这样的原因,首层厚度可以被单独指定
首层线宽(Initial layer line width):也与 3D 打印对象和热床之间的粘合相关,一些情况下,可以指定一个大于 100%的值,加强这个粘合的强度。
剪平对象底部(或称底层切除)(Cut off object bottom):用于一些不规则形状的 3D 对象,如果对象的底部与热床的连接点太少,也会造成无法粘合的情况,这时将这个值设置为一个大于 0 的值,3D 对象将被从底部剪平,自然可以更好的粘在热床上
双击出头重叠(Dual extrusion overlap):只对双头的 3D 打印机有效,两个挤出头的挤出内容,如果有一点重叠,会得到更好的效果。

速度(Speed)

移动速度(Travel speed):非打印时的移动速度
打印速度(print speed):打印时候喷头的移动速度。
最底层打印速度(Bottom layer speed):打印第一层的速度,较低的速度可以保证牢牢黏在平台上
填充速度 (Infill speed):加快打印速度可以提升时间,但会影响效果。
外壳打印速度 (Outer shell speed):较低的速度打印外壳会提高打印质量,但与内部打印有巨大的差别是会影响打印质量。
内壳打印速度 (Inter shell speed)

制冷(Cool)

打印一层最小冷却时间(Minimal layer time):为了让每一层打印完成后有足够的时间冷却。如果路径短,则会降低打印速度来满足。
是否开启风扇(Enable cooling fan)

专家设置

Infill

顶部实心填充:打一个坚实的顶部表面,如不勾选,则将按照设置比例打印。
底部实心填充:打一个坚实底部表面,如不勾选,则将按照设置填充比例打印。
填充交叉:参数越高,表面与填充物连接坚固性越好。
魔幻(Blackmagic)
外部轮廓启用 spiralize:勾中后会稳固增加 z 方向,打印出一个结实底部的 单面墙.
只打印模型表面 :勾中后不打因任何其他地方如填充,底部顶部等.
Blackmagic(另一版本的):给出两种特殊的打印方式
螺旋打印(spiralize the outer contour):以螺旋线上升的线条打印模型外表面,包括底面。
侧面打印(only follow mesh surface):仅仅打印模型的单层侧面,并不打印底面和顶面。

Brim
Brim 打印数量:参数越大是你打印的物体更容以粘在平台上,但同时会缩小可用打印区域
底垫(Raft)
额外幅度(extra margin):增大这个数字使得底座更有力,但会缩小打印区域
线条间距(line spacing):底座边缘距离中心线的的距离,修改 Raft 的首层井字格接触打印平板的密度
底座厚度(base thickness):最底层的厚度,厚度不宜太大,否则后期难取下来
底层线宽(base line width):底层线条的宽度.
接口层厚度(interface thickness):底座上层的厚度.
接口层线宽(interface line width):底座接口层线条的宽度.
悬空间隙:底座和表层的间隙,选用默认值易剥离
表层:底座上打印表层的数量,这些曾是完全填充的.

底垫(raft)另一版本

留白(extra margin):控制底垫的大小的参数,底垫的形状和模型底层的形状类似,只是比底层大。底垫边线的底层边线的距离就是留白的大小。
线距(line spacing): 指打印底垫时,线条之间的距离,可以控制底垫的疏密程度。
基础层(base layer): 底垫下两层是基础层和接口层。基础层线宽(base line width)一般比较大。基础层厚(base thickness)也稍厚点。
接口层(interface layer):
空气沟(airgap):控制底垫上面和模型底面的间隙。在这个间隙中不打印任何填充物,有利于模型和底垫的分离。
表面层(surface layers):存在与空气沟和接口层之间的实心层,这些层都是实心填充。

抽丝(Retraction)

最小空驶长度(minimum travel):需要回抽的最小空驶长度。如果一段空驶长度小于这个长度,那么便不会回抽而直接移动。
是否梳理(Enable combing):让打印机在空驶前梳理一下,放置表面出现小洞。
回抽最小挤出长度(minimum extrusion before retrating):防止回抽前挤出距离过小而导致一段丝在挤出机中反复摩擦而变细。如果空驶前挤出距离小于该长度,那么便不会回抽。
回抽时 Z 抬升(Z hop when retrating):打印机喷头在回抽前抬升一段距离,这样可以防止喷头在空驶过程中碰到模型。当机器默认回缩的时候,会将喷头向上抬起然后再移动到下一个打印点并且降到原始高度打印.

裙摆 (Skirt) :在模型底层周围打印一些轮廓线,当使用了 Brim 或 Raft 时裙摆无效。

线数目(line count):裙摆线的圈数。
初始距离(starting distance):最内圈裙摆线和模型底层轮廓的距离。
最小长度(minimal length) : 限制裙摆线的最小长度,

冷却(cooling)

风扇全速高度(fan full on height):指定在某个高度,冷却风扇全速打开。
最小速度(fan speed min):为了调整风扇速度去配合降低打印速度冷却。打印机为了冷却而降低速度可以达到的速度下限。\ 如果没有选择冷却头提升(cool head lift),那么即使该层打印时间大于最小层打印时间也无所谓。如果勾选了冷却头提升,那么打印机喷头会移动到旁边等待一会,直到消耗到层最小打印时间,然后回来打印。
最大速度(fan speed max):

填充(Infill):对底层和顶层进行特殊处理

是否顶层实心填充(solid infill top)
底部实心填充 (solid infill bottom)
填充重叠层(infill overlap):表面填充和外壁有多大程度的重叠,值太小就会导致外壁和内部填充结合不太紧密。充时占据外框的比率,因为有可能材料挤压的程度不够,与外框粘连结合的强度不够,就可以设置这个比率,这样模型外围就不会有缝隙
填充选项(infill pattern):圆形填充、直线填充、蜂窝八角形填充、矩形填充

支撑 (support):设置支撑结构形状与模型的结合方式。

结构类型(structure type):支撑结构的形状,有格子状(Grid)和线状(line)。
填充量(fill amount): 支撑结构的填充密度。越大支撑越结实,同时也更加难于剥离。
X/Y 距离(X/Y distance):支撑材料在水平方向的距离。为防止支撑和模型粘到一起而设置。
Z 距离(Z distance):同上,太小会使得模型和支撑粘的太紧,难以剥离,太大了会造成支撑效果不好。
生成支撑的悬空角度

模型修复(fix horrible)

类型 A http://www.docin.com/p-970237300.html%EF%BC%9A 软件试图保留子模型重叠部分的内孔和细节连接完好无损
类型 B:只保留重叠部分的外型,内部细节不做处理
保持开放面(keep open faces):保持模型中的小洞(自动修复这些洞)
广泛拼接(extensive stitching):使用 touching polygon 算法去补模型中所有的洞,运算量大。

机器设置(Machine Setting)

打印宽度(Maximun width)
打印深度 (Maxlumum depth)
打印高度 (Maximum height)
Stepsper E :系到打印机挤出机构供给材料的多少,它的设置与打印速度需要配合,如果有需要的话,在高速打印的时候,需要供给材料的速度跟上,也就需要降低这个 E 值;如果打印速度太慢,供给的材料太多同样很多有可能造成打印的模型外表面变形,如果发生这种类事情,就需要增加这个 E 值
喷头数量 (Extruder count)
是否有打印热床(Heated bed)
机器中心 (machine center 0,0) :对于一般方形打印机,应该是打印机尺寸的一半,要勾选,圆形打印机则不用。
平台形状 (Build Flavor)
Gcode 类型 (GCode Flavor)

喷头设置(print head size)

用于排队打印。指将平台上的多个模型逐一打印,而不是一起打印。这样的好处是,如果打印失败,总能保证一些模型打印成功,否则,所有模型都打印失败。\ 但并不是对所有的多模型组合都能进行排队打印,比如有些模型较大,那么在排队打印的过程中可能会碰到该模型。
“喷头” 指的是喷头俯视图的包围矩形,“喷嘴”指的是喷嘴的位置。以喷嘴为中心点,计算喷头的 X 方向和 Y 方向的四个距离,\ 假如两个模型的左右间隙小于“size towards x_min”那么就无法从左到右排队打印。gantry height 是喷嘴下端离喷头支撑光轴在竖直方向的距离。
整体结构解析:

未完待续…

Cura Engine 源码解析:Settings相关推荐

  1. MyBatis源码- SqlSession门面模式 selectList 源码解析

    文章目录 Pre 工程概览 pom.xml mybatis-config.xml UserMapper 测试类 selectList 源码解析 附 SQL log4j.properties app.p ...

  2. Mybatis运行原理及源码解析

    Mybatis源码解析 一.前言 本文旨在mybatis源码解析,将整个mybatis运行原理讲解清楚,本文代码地址: https://github.com/lchpersonal/mybatis-l ...

  3. Tomcat8源码解析

    Tomcat8源码解析 Tomcat总体架构 Connector:开启Socket并监听客户端请求,返回响应数据: Container:负责具体的请求处理: 一个Service负责维护多个Connec ...

  4. Gin源码解析和例子——中间件(middleware)

    在<Gin源码解析和例子--路由>一文中,我们已经初识中间件.本文将继续探讨这个技术.(转载请指明出于breaksoftware的csdn博客) Gin的中间件,本质是一个匿名回调函数.这 ...

  5. python flask源码解析_用尽洪荒之力学习Flask源码

    [TOC] 一直想做源码阅读这件事,总感觉难度太高时间太少,可望不可见.最近正好时间充裕,决定试试做一下,并记录一下学习心得. 首先说明一下,本文研究的Flask版本是0.12. 首先做个小示例,在p ...

  6. Android之EasyPermissions源码解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! 前言 我们知道在Android中想要申请权限就需要在AndroidManifest ...

  7. 渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(上)

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/08/11/es-code02/ 前提 上篇文章写了 ElasticSearch 源码解析 -- ...

  8. Tomcat源码解析系列二:Tomcat总体架构

    Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...

  9. Mybatis 源码解析 -- 基于配置的源码解析(二)

    为什么80%的码农都做不了架构师?>>>    mapper解析 接着上篇的配置,本篇主要讲解mappers标签 <?xml version="1.0" e ...

  10. spring boot2.x设置session有效时间_Spring 源码解析 Scopes 之 Request 、Session 、Application...

    (给ImportNew加星标,提高Java技能) 转自:开源中国,作者:麦克斯 链接:my.oschina.net/wang5v/blog/3017934 Request.Session.Applic ...

最新文章

  1. OVS DPDK--网桥配置(四)
  2. 【论文学习】RepVGG: Making VGG-style ConvNets Great Again及网络重参数化的用途及效果分析
  3. canopen c++程序编写_JAVA、C、C++、Python同样是高级语言,为什么只有C和C++可以编写单片机程序?...
  4. CodeForces - 1321E World of Darkraft: Battle for Azathoth(二维偏序+线段树)
  5. 【本质】你知道C语言编译的过程吗?
  6. 直方图尖峰python_Python系统学习 - 绘制直方图
  7. 【图论】【斜率优化】前往大都会(loj 2769)
  8. android java调用_关于Android中Java调用外部命令的三种方式
  9. idea 点击右侧栏找不到git或者svngit的基本使用
  10. VMware虚拟机克隆或复制linux后无法上网的解决方案
  11. atitit.ajax上传文件的实现原理 与设计
  12. hyper-v无法连接本地计算机,如何在Hyper-V虚拟机中访问本地和USB硬盘驱动器
  13. 单层感知器的原理及代码实现
  14. 《人机交互技术》 第五章 界面设计
  15. gta5结局杀老崔我哭了_GTA5:玩家眼中的重情义,剧情中变定时炸弹,崔佛为何是个疯子?...
  16. 信贷业务:常用风险指标
  17. <12>springboot集成thymeleaf模板引擎
  18. 如何加载3D模型(odj文件和mtl文件)
  19. BJTU1853 gangpener 买零食
  20. MYSQL窗口函数用法

热门文章

  1. Element-Plus中日期时间选择器组件DateTimePicker默认显示英文的问题
  2. 用Python分析豆瓣,评分最低的演员原来是他
  3. [学点经济]什么是SDR [the IMF's Special Drawing Rights (SDR) basket of currencies]
  4. 大规模网络拓扑测量与分析研究1-论文
  5. RecyclerView在GridLayoutManager情况下实现四周都有分割线的ItemDecoration
  6. 微信应用架构!!-----微信应用能力篇
  7. python xlsx转xls_Python 批量将xls文件转换为xlsx
  8. Arduino基础入门篇(认识开发板和面包板)
  9. excel联系导入到手机通讯录(小米手机)
  10. 联想android怎么解密,联想G886手机如何解密