直接从非网格数据切片?

3D打印 切片 软件
2021-05-18 04:24:24

这是一个有点奇怪的问题,我想答案可能只是“不”。但无论如何,这里是:

我正在编写一些代码,通过“隐式曲面”生成用于 3D 打印的形状,即一个数学函数 f(x,y,z) 在形状内部为正,在形状外部为负。这对于设计我想要打印的形状非常有效,但问题是,将隐式表面变成一个好的网格很难- 有一些库可以做到,但它们有点挑剔,你有大量使用参数以使其正常工作。

但我在想:我首先需要网格的唯一原因是将它发送到切片器,切片器最终会丢弃网格并将其转换为 gcode。我的计划是做

implicit function --> STL file --> gcode

但我想知道是否有任何切片器可以让我跳过中间步骤而让我做

implicit function --> gcode

反而。也就是说,我的代码将提供一个 3D 体素网格,其中包含每个 3D 点处的函数值,并且切片器将根据该值而不是 STL 文件创建 gcode。

似乎 Shapeways 有一种很好且简单的格式,称为SVX,正是这个格式,但据我所知,这仅受 Shapeways 支持,而不受任何 FDM 切片软件的支持。

另一种选择是让我的代码提供一系列 2D 多边形,打印模型的每一层都有一个,因此序列为

implicit function --> big list of slices --> gcode

这比首先将其转换为网格更容易也更准确,而且我假设切片机无论如何都必须生成这种表示,然后才能计算打印头采用的路径。

我想问题是,是否有现有的 CAD 格式支持这些选项中的任何一个,并且现有切片机软件也支持?如果是这样,那么我可以编写我的代码以该格式输出,它应该可以正常工作。

3个回答

不,不是本地人

就目前而言,所有经常使用的切片器确实使用某种具有显式表面的 3D 模型将其切割成切片,然后求解路径函数以创建 G 代码。该模型可以是 STL 或 OBJ 或其他一些格式,具体取决于切片器,但在这一点上(2019 年 11 月),我知道没有任何切片程序支持直接数学作为输入。

大概是自己做的?

但是,您可以通过求解数学公式来设计模型。您可能还可以使用求解公式的程序来充当某种切片器。

一个可能构成基础的软件可能是 Cura,它允许编写插件,因此可能有一种方法让 Cura 自动求解表面公式,然后将其插入切片,而无需将中间数据存储为 STL。

Slic3r 也可以作为基础,因为整个源代码是开放的。这将是与修改 Cura 类似的努力。

这是一个部分答案,如果我稍后跟进,我可能会成为完整答案。(我发布以防其他人有同样的问题,在这种情况下,尽管不完整,这可能会有所帮助。)

似乎 3mf 格式有一个切片扩展,它几乎可以满足我的要求 - 它允许将模型指定为一系列代表切片的多边形,而不是 3D 网格。所以原则上我可以简单地输出一个包含切片数据的 3mf 文件,并将其加载到任何支持此扩展的切片器中。

不幸的是,这意味着学习似乎是相当复杂的基于 XML 的文件格式,而且我不确定哪些切片器当前支持切片扩展名。这似乎是最近发生的事情,可能是等待更好的支持可用的情况,就 Python 库编写 3mf 文件以及切片器支持而言。(lib3mf 有 Python 绑定,但他们的文档目前只包含一个单词“TODO”。)

规范中还要求任何包含切片数据的 3mf 文件还必须包含对象的网格表示。这很烦人,因为这个想法的重点是避免生成网格。我想我可以只输出一个边界框或其他东西。

这是我的第二个自我回答。我单独发布它,因为它是一种不同的技术。这个今天应该可以工作,无需对切片机进行任何修改。

我在Cura 问题跟踪器中从 Cura 开发人员 BagelOrb 那里得到了一个有用的提示

请注意,生成网格并不像您想象的那么困难。您不需要将层连接在一起,您只需要为切片指定一个高度,这样 Cura 就会准确地将每一层切片到您想要的位置。

只需生成 2D 多边形,然后将每条线段挤压成两个完美垂直的三角形,其高度与您想要的图层高度相同 - 和 BAM!你得到了你想要的。

这类似于@towe 在这个问题的评论中提出的建议,但很酷的是你不需要费心渲染每个切片的底面,因为切片器无论如何都会忽略它们。这是因为,用 BagelOrb 的话来说,

CuraEngine 做的第一件事是将 3D 模型切成多边形,其余的处理仅使用这些多边形。3D模型仅用于计算每一层的面积,其他所有操作都是对多边形的操作。

你的网格不需要是流形的;只有每个切片需要是一个封闭的多边形。

CuraEngine 中的切片阶段是一个两步过程:

  • 为每个三角形生成与它相交的每一层的线段
  • 对于每一层,将所有线段拼接成多边形

您的模型可能如下所示: 在此处输入图片说明

这很棒,因为顶部和底部表面很难正确完成。它可以在 OpenSCAD 中使用 完成linear_extrude,但结果证明将union所有层放在一起非常耗时这样我的代码就可以把所有的三角形都扔到一个 STL 文件中,它会正确地切片而不会出现任何问题。

该线程中的另一个有用信息是 Cura 将在每一层的中间对模型进行切片。所以这就是我应该切片我自己的隐式表面模型以获得最大精度的地方。

我做了一个快速的概念证明,到目前为止它似乎有效。我手动创建了一个 ASCII STL 文件,其中包含一个没有顶面或底面的 1 厘米立方体的侧面。在“准备”模式下,Cura 将其视为空心模型:

在此处输入图片说明

但是在切片时它会忽略缺失的面并添加顶层和底层以及填充,如预期的那样:

在此处输入图片说明

一旦我启动并运行了整个过程,我可能会再次编辑这个答案。