CuraEngine.wiki 1.项目概绍

返回 CuraEngine.wiki 0.开发文档目录

文章翻译自官方说明文档,如有错误请积极发言不吝指正
CuraEngine.wiki - Project Overview

**待办事项:**添加 BeadingStrategy、拉伸-连接、直线和线段的加工

Cura 引擎的结构主要是.h 文件。这不是 C++ 项目的标准。但是,使用较少的 CPP 文件会使优化器的工作更加困难,并消除链接错误问题。这在一定程度上是懒惰的结果,但对于优化来说很方便。

.h 文件包含从 main.cpp 文件调用的不同步骤。main.cpp 文件包含全局切片逻辑。

切片过程遵循以下全局步骤:

  • 加载 3D 模型
  • 分析并修复 3D 模型
  • 将 3D 模型切成 2D 图层
  • 从切片图层构建 层部件(LayerParts)
  • 生成内外轮廓(Insets)
  • 生成上/下皮肤区域(skins areas)
  • 生成稀疏填充区域(infill areas)
  • 为每一层生成 GCode

每一步都有更多的逻辑。但这是一个总体概述。引擎的所有数据都存储在“SliceDataStorage ”中。重要的是要记住,只有上一步的数据才是有效的。

在代码中,坐标以 64 位整数存储为微米。所以如果你看到的值是 1000,那么这意味着 1 毫米的距离。这是因为 Clipper 在 64 位整数上工作,并且微米提供了足够高的分辨率,而不会对大小限制太多。请注意,有一些零碎的代码需要小心 64 位溢出,特别是计算长度 sqrt(x*x+y*y) 可能会导致溢出。

优化模型 - OptimizedModel

优化模型是存储有顶点-面<->关系的三维模型。这提供了接触面关系,稍后将用于更快地切片到层。

切片 - Slicer

虽然通常整个 GCode 生成过程被称为“切片”,但 CuraEngine 中的切片器是生成层的代码片段。每个层都包含闭合的 2D 多边形。这些多边形是在 2 步过程中生成的。首先,所有的三角形被切割成每层的线,对于每一层,“线段”被添加到该层。接下来,将所有这些线段彼此连接以形成多边形。优化模型的顶点-面<->关系有助于加快这一过程,因为两个连接面很有可能同时形成两条连接线段。这段代码还可以修补 3D 模型中的小洞,所以你的模型不需要是一个完美的流形。它还处理不正确的法线,因此它可以围绕线段翻转以适合端到端。切片代码位于slicer.cpp

在切片器之后,我们有可以在裁剪器中使用的闭合多边形。

层部件 - LayerParts

要掌握的一个重要概念是层部件的概念。层部件是单个层内的独立部件。例如,在实体立方体中,每个层都有一个单独的 LayerPart.然而,在表中,覆盖腿的层每条腿具有一个 LayerPart,因此将有 4 个 LayerPart.层部件是单个层内不接触任何其他层部件的分离区域。大多数操作在 LayerParts 上运行,因为它减少了要处理的数据量。在 GCode 生成过程中,将每个 LayerPart 作为一个单独的步骤处理,确保你永远不会在 LayerPart 之间移动,从而减少外部移动量。LayerParts 在切片器步骤之后生成。生成 LayerParts 的代码位于LayerParts.cpp

为了生成 LayerParts,使用了 Clipper.具有扩展结果的剪辑器并集给出了其中有洞的多边形的列表。每个多边形都是一个 LayerPart,孔被添加到这个 LayerPart 中。

内外轮廓 - Insets

轮廓有时也称为“周长”或“环”。生成 insets 只是一小段代码,因为 Clipper 完成了大部分繁重的工作。可以在中WallsComputation.cpp找到用于生成插入的代码。

上/下皮肤 - Up/Down skin

皮肤代码生成完全填充的区域,它通过一些繁重的布尔裁剪器操作来实现。皮肤步骤使用来自不同层的数据来完成工作。有关详细信息,请查看代码。稀疏填充区域代码几乎与皮肤代码相同。不同的是,它保留了其他区域并使用不同的偏移。生成皮肤区域的代码位于skin.cpp

请注意,这些步骤生成的是区域,而不是实际的填充线。稍后将生成填充线路径。因此,这一步的结果是需要填充的区域的多边形列表。

GCode 生成

GCode 生成是相当大的一段代码。因为这里发生了很多事情。这里的重要部分是:

  • 轮廓顺序优化 InsetOrderOptimizer:这段代码需要解决一个 TravelingSalesman 问题,同时通过首先打印外部面线来优化尺寸精度。给定一个多边形/线的列表,它试图找到打印它们的最佳顺序。代码可在中InSetOrderOptimizer.cpp找到。
  • 填充 Infill:此代码从区域生成一组线。这是生成实际填充图案的代码。这方面的代码可以在infill.cppinfill subfolder中找到。
  • 运动梳理 Comb:运动梳理代码是在不打印的情况下移动头部时尽量避免出现孔洞的代码。此代码还会检测它何时失败。最终的 GCode 生成器在生成最终的 GCode 时使用梳理码。所以他们密切互动。梳理代码可在中pathPlanning/comb.cpp找到
  • G代码导出 GCodeExport:GCode 导出是一个 2 步过程。首先,它收集需要打印的层的所有路径,这包括所有移动、打印和挤出宽度。然后生成最终的 GCode.这是唯一一段了解 GCode 关键字和语法的代码,以生成不同风格的 GCode.这将是唯一一段需要调整的代码。所有的体积计算也发生在这里。GCode 导出的代码位于FFFGCodewriter.cpp

上一篇 CuraEngine.wiki 0.开发文档目录

下一篇 CuraEngine.wiki 2.编译构建

Cura 是一款开源3D打印机的切片引擎。 切片程序的主要过程如下:          i.             导入3D模型(STL,OBJ等等)。         ii.             分析并修复3D模型(源码里面貌似木有这一步…)。        iii.             将3D模型切割成2D层。        iv.             用上一步得到的2D图层形成LayerParts(他们自己的叫法),因为一层里面,很有可能有很多个不同的多边形,比如桌子,他的四个角,切出来后是四个圆形,上一步中只是得到了四个圆形,而没有确定这四个圆形是属于同一层的。         v.             进一步确定LayerParts中,各个part间的关系,比如得到了两个圆,大圆套小圆,我们就需要确认,小圆是空心的,而大圆和小圆形成的圆环是实心的。        vi.             将需要实心打印的部分标记出来(100%填充)。       vii.             将需要空心打印的地方打印出来(部分填充)。      viii.             根据生成的LayerParts生成每一层的G-code。 上述的每一步都有更多的逻辑关系在里面,但这只是一个工作的大概流程。切割引擎所有的数据都存放在一个叫SliceDataStorage的类里面。记住,上述的每一步都是基于前一步的数据来进行的。这里严格按照上述的流程来处理3D模型生成G-code。另外,在代码里面,坐标是用64位整数的形式存在的,比如,你在代码中看到的1000,他实际代表了1mm。这样做是因为Clipper使用了64为整数来表示距离。 标签:cura3d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值