如何从 3D STL 转换为 2D SVG?

平面设计 svg 3d
2022-01-29 16:33:41

我找到了一些用于 3D 打印机的 STL 文件,它们主要是 2D 形状的线性挤压:

3D STL 文件,从 2D 形状挤出

我宁愿用激光切割机切割。如何将它们转换为 2D SVG 文件?

4个回答

如果一个人在 cad 程序中打开 STL 文件并在 XY 平面上观察模型,他会看到一些起初很有希望的东西:

在此处输入图像描述

起初我认为将投影保存为 PDF 或 SVG(两者都是可能的),在 Illustrator 或 Inkscape 中打开它并删除不需要的行就可以了。

但...

STL 实际上是由数千个小三角形组成的 3D 表面。这是从倾斜方向看到的一块:

在此处输入图像描述

没有曲线。XY 平面投影包含数千个部分重叠的直线段。他们冻结了 Inkscape 并使 Illustrator 变慢。任何使用形状生成器制作单个形状的尝试都会冻结 Illustrator。在 Illustrator 中,可以选择线条并删除它们。PDF 版本的运行速度比 SVG 版本快一点。在 Inkscape 中,我没有从中得到任何有用的东西。

下载的形状很简单,所以我建议你重新绘制它们。如果您像我一样将 XY 平面投影到 Illustrator,您可以锁定它并使用钢笔工具绘制您自己的版本。您也可以使用屏幕截图作为模型。例如,您可以从 SketchUP 获取屏幕截图。

屏幕截图的计算机负载非常轻,您可以在 Inkscape 中对其进行绘制。

绘制它也是获得不重叠的连续路径的方法。我敢打赌激光切割机想要它们。

添加:只是为了测试 PDF 上的绘图过程,我用笔在 Illustrator 中绘制了一个形状。大概花了六分钟。曲线并不完美,但绘制速度很快。实际上只绘制了形状的左半部分,因为形状是对称的。右侧是翻页。

在此处输入图像描述

如果您对使用 CAD 程序进行更多尝试感兴趣,可以尝试在那里简化这些挤压形状。如果您使用足够简单的程序,这并不是特别困难。像我一样,获得 TurboCAD Deluxe 的免费演示并打开 STL 文件。全选并转到格式 > 分解:

在此处输入图像描述

它会移除所有表面并留下一堆漂浮在空间中的折线。倾斜的观察方向表明,表面三角形的大部分边已经消失,只剩下基本骨架:

在此处输入图像描述

然后将投影直线侧向转动并选择除 XY 平面中的线以外的所有线:

在此处输入图像描述

按 DEL,您只有 XY 平面多段线:

在此处输入图像描述

所有曲线实际上都是数十条连接的直线:

在此处输入图像描述

全选并保存为 SVG。我在 Inkscape 中打开了结果,并赋予它红色描边以使其可见。这里是:

在此处输入图像描述

我不知道切割师是否接受它。我只将 DXF 发送给切割机。我写的“切割机”是操作激光切割机的人。他扔掉了所有似乎想在没有他的情况下向机器输入东西的人。

我写了“与 CAD 战斗”。那是因为您可能必须在安装 CAD 程序之前工作几个小时,并且您已经学会了如何设置投影和进行选择。

祝你好运!

任何体面的 CAD 应用程序都会打开 STL,您应该能够设置正交投影并导出或保存为 SVG。

哎呀,你可以用BlenderOnShape ......甚至我认为DraftsightFreeCAD来做到这一点 -所有这些都是免费软件。

Blender 包括可以根据各种设置绘制轮廓的自由式,默认设置包括适合您需要的轮廓。一旦您的渲染包含自由式线条,您就可以使用 Freestyle SVG exporter

虽然我不确定它是否符合您的需求,但您可能需要查看blenderCAM,它为 CNC 机器生成 g 代码。我认为到目前为止它仍然只支持铣床,查看项目叉可能会发现有人在支持其他机器。

一种解决方案是免费的开源 OpenScad,这是程序员的实体 3D CAD 建模器。这个解决方案的灵感来自于 OpenScad 中的批处理文章以下四行代码导入 STL 文件并沿 Z 轴投影 3D 形状。OpenScad 脚本是:

param1=0; // param1 is the keyword of the first shell argument
FileToLoad=param1;
echo(FileToLoad);
projection() import(FileToLoad);

为了自动执行此操作,bash 脚本处理下载文件夹中的所有 STL 文件,包括子目录,将 STL 文件传递​​给上述 OpenScad 脚本,并将结果保存为 SVG。假设上述代码在 中~/Downloads/slicer.scad,则 bash 脚本为:

for entry in $(find ~/Downloads -type f -name *.stl)

do
    new_entry=$(echo $entry | sed 's/.stl/.svg/g')

    openscad -o $new_entry -D param1=\"$entry\" ~/Downloads/slicer.scad
    echo "$new_entry"
done

生成的 SVG 如下:

OpenScad 中 STL 到 SVG 的结果