如何使用 Matlab 制作 GrabCAD 体素打印切片

本教程适用于已经对 Matlab 和 J750 操作有所了解的用户。

它不是有关如何使用 Matlab 软件或 PolyJet 打印机的全面课程。

Stratasys 为您提供以下内容:

第 1 步:什么是体素?

就像 2D 数字图像由像素组成一样,您可以将 3D 数字形状视为由"体素"组成。

它们是规则的矩形结构,包含 3D 打印中该点的颜色或材料数据。

在 3D 中:体素在 2D 栅格化中

但是,与其在 3D 中描绘体素,不如在脑海中思考 2D 中发生的事情,以及 3D 打印的每一个切片。切片不是"体素化",而是"栅格化"。你可以看到,要在 2D 中表示一个字母,我们必须做出许多决定,关于网格中的哪个方格是深色填充、轻度填充或根本不填充。

因为为每个切片做出数千个这样的决策会产生一个巨大的值矩阵,这就是使用 Matlab 的一个原因,它有许多工具来处理大型矩阵。

第 2 步:一般切片准则

很容易想象,如果体素打印的每一层都有 1,000+ 渐进式切片,如下所示:

您可以在 J750 中将它们一个接一个地堆叠起来,并获得如下打印效果:

但是有一些规则需要遵循。

第 3 步:规则 1:所有切片必须具有相同的维度

体素打印中的每个切片都必须具有相同的像素尺寸(宽度和高度)。例如,在下面的球体中,每个 PNG 切片都是一个 709 像素高 x 1424 像素宽的矩形(即使在球体顶部和底部附近的切片处,那里没有发生太多事情)。

这些只是创建切片的工程师选择的维度。他可以选择任何尺寸,只要照片中的每一片都是相同的。

我们将使用 Matlab 循环命令来确保每个切片的大小相同。

步骤 4:规则 2:切片之间的 Z 间隙应与打印机层设置匹配

您应该计划在与 J750 所能做的层高相匹配的层高处切割所需的最终形状。

例如,在下面的球体中,假设每个 PNG 切片与下一个切片相距 0.027 毫米,以形成最终形状。

作为参考,J750 层高为:

(注意:如果您的切片厚度与打印机层厚度不匹配,打印机将尝试补偿差异。例如,如果您生成的切片厚度为 0.0135 毫米,并且您的打印模式为"混合",则打印机将打印每个图像两次,以达到所需的 0.027 毫米厚度。最佳做法是创建切片以匹配您将要打印的模式。

第 5 步:规则 3:所有切片都应使用相同的前缀按顺序命名

Voxel Print 实用程序不知道切片的"正确"顺序。它只是按文件名。

它将在单个文件夹中查找,并对所有标有已定义前缀的 PNG 文件进行排序。

在此示例中,前缀为 "slice_"。

序列将按递增数字。

我们将使用 Matlab 循环在切片生成时按顺序编号。

步骤 6:规则 4:在所有切片中仅使用 6 种 RGB 颜色

J750 只能容纳 6 种材料 + 支撑。

Voxel Print Utility 将按 RGB 值分隔每个切片中的材质使用。

因此,在给定的打印中,在所有切片的组合中,您只能使用 6 个 RGB 值。

以下是一些常见 J750 材质的 RGB 值,以供参考:

从这里开始,我们将进入 Matlab 命令。

第 7 步: 现在,RGB 图像如何存储在 Matlab 中?

Matlab 附带的示例图像之一是 'peppers.png' (如下)。

要将该图像加载到 Matlab 变量中,请使用以下命令:

运行该命令后,Matlab 向您展示 RGBsample 现在被定义为 384 x 512 x 3 矩阵:

要查看 peppers.png 中的任何给定像素,请使用以下命令:

结果:

这意味着,从辣椒图片的顶角往下 50 行,往上 100 列,有一个 RGB 值为 (66,38,68) 的像素,或者像这样:

第 8 步:最简单的体素打印(红砖)

现在,我们将尝试制作最简单的体素打印之一,即均匀的红砖:

为此,我们将使用 Matlab 来定义和编号所需的切片(并非显示所有切片)。

从命令开始:

应生成一个 300 x 600 x 3 的整数矩阵:

用零填充:

现在让我们制作矩阵的第一层 = 161,第二层 = 35,第三层 = 99。这对应于 (161,35,99) 的 RGB,应该是 VeroMagenta。

>>brickslice(:,:,1) =161;

>>brickslice(:,:,2) =35;

>>brickslice(:,:,3) =99;

然后我们用 Image Show ('imshow') 命令进行测试:

>>imshow(brickslice)

这应该会导致:

第 9 步:一个 'for' 循环,按顺序对我们的 941 个切片进行编号和命名

Matlab 循环的一般结构:

我们的循环:

#### **第 10 步:对第一个 'for' 循环结果的想法**

如果您将该 for 循环保存在 Matlab '.m' 文件中并运行它,您可能会注意到一些事情:
**为什么我们指定 941 个切片?**

如果您还记得,我们想要一块 1 英寸高的积木:

![](https://img-blog.csdnimg.cn/img_convert/af55a09ef3e24212f27eab57a5c0527c.png)

如果我们的 J750 设置为高混合模式,切片相距 0.027 毫米,因此 25.4 / 0.027 = 940.7,我将其四舍五入为 941。

2.**为什么所有生成的 PNG 都有错误的尺寸?**

如果您右键单击我们刚刚创建的任何 PNG 并查看"属性",您会发现它们不是我们想要的 300x600 像素:

![](https://img-blog.csdnimg.cn/img_convert/2b93d6e49f844b7b8adbc32c69a5542c.png)

这是因为 Matlab 的 'imshow' 命令以默认解显示图像,我们现在必须更改该解。我们将在下一步中展示如何执行此操作。
#### **第 11 步:在我们的 'for' 循环中控制输出像素尺寸**

我们的 **REVISED** 循环:

![](https://img-blog.csdnimg.cn/img_convert/6dcd9b2d26b16aa8ddad11f77ab9fd5c.png)
#### **第 12 步:Matlab 切片的结果**

在与 Matlab '.m' 文件相同的文件夹中,您现在应该有 941 个单独的 PNG 切片文件,所有文件都按顺序编号并具有相同的前缀:

![](https://img-blog.csdnimg.cn/img_convert/9d9a8337c8de907fa6040011bf9555df.png)

*(我将我的更改为 'brick_slice' 以匹配 .m 文件的名称,你可以在循环中设置任何你想要的前缀。*

![](https://img-blog.csdnimg.cn/img_convert/2abfed734ee8da0a0a38b07ef51670f1.png)

它们都应该具有正确的像素尺寸。

现在,我们已准备好进入 GrabCAD Print

**从这里开始,我们将使用 GrabCAD Print 和 Voxel 实用程序**
#### **第 13 步:Voxel Print Utility 将位于"应用程序"下,类似于 Insight**

![](https://img-blog.csdnimg.cn/img_convert/16f8be75c97e49814e9b164e41b31342.png)
#### **第 14 步:Voxel Print Utility 将在此窗口中打开**

![](https://img-blog.csdnimg.cn/img_convert/0ce32511dc7e532530434bb55b5789d9.png)

![](https://img-blog.csdnimg.cn/img_convert/ff33d708ed468deb74610e0a1bc4a5c0.png)
#### **第 15 步:使用 Voxel Print 实用程序**

![](https://img-blog.csdnimg.cn/img_convert/eec37350b1af53690a5982d9f8551633.png)

![](https://img-blog.csdnimg.cn/img_convert/e59f1bb0307493449285629047b4b143.png)
#### **第 16 步:点击"下一步"后,实用程序运行**

![](https://img-blog.csdnimg.cn/img_convert/207e252986af01ebcce106cf7ab86df7.png)

这也是将显示错误的屏幕。如果您收到**"Too Many Colors"**错误,请参阅本演示文稿后面的疑难解答指南。
#### **第 17 步:接下来,我们必须将 RGB 值映射到 J750 材质**

这是 Utility 告诉我们它在切片中找到了哪些 RGB 值(记住最多 6 个)的地方。

我们必须为每个值指定一些 J750 材料。

![](https://img-blog.csdnimg.cn/img_convert/36a37f2d687ae3d6a1d1c1c4cce18a55.png)

但是看到不对劲了吗?
#### **第 18 步:疑难解答:"Too many colors"错误**

请记住,我们的切片中只能有 6 个 RGB 值。但是我们在 Matlab 中只指定了 1,那么是什么呢?答案来自放大 Matlab 的任何 PNG 输出:

虽然切片在预览中可能看起来不错:

![](https://img-blog.csdnimg.cn/img_convert/99ceb77578e82d00b661a79cd67f03e0.png)

甚至当你打开一个时看起来也不错:

![](https://img-blog.csdnimg.cn/img_convert/fc09ba2b044ec816e2efa4bc007a4f25.png)

如果放大某个角落,则会看到问题:抖动

![](https://img-blog.csdnimg.cn/img_convert/5355f892a701e832e5610ed2e84d5f97.png)

这似乎是 Matlab 输出图像方式的默认设置,它尝试对纯色的边缘进行"抗锯齿"。

比我更好的 Matlab 用户可能知道关闭此功能的命令,但现在请注意,如果您在切片矩阵中指定了 6 种颜色,体素打印实用程序会将这些边缘视为 EXTRA 颜色并给您一个错误,因为它们是新的 RGB 值。

照片编辑软件是检查这一点的好方法。

1. 打开颜色选择器。

2. 单击切片中的抖动区域。

3. 查看 RGB 值是否发生变化或与您的预期不同。

![](https://img-blog.csdnimg.cn/img_convert/082b809d2ca3f8adb8b4b910c4739ebb.png)

如果是这样,这些额外的 RGB 值可能是导致"颜色过多"错误的原因!

其他选项:

一个。您没有将正确的颜色指定为 "background"。

B. 颜色下的不同 Alpha 通道被视为不同的 RGB 值,因此我们实际上只能有 6 个 RGBA。
#### **第 19 步:接下来,我们必须将 RGB 值映射到 J750 材质**

由于我们现在无法修复 Matlab 抖动问题,因此我们将为每个找到的 RGB 值指定一个材质(我选择黄色作为抖动,希望这不会产生太大影响):

![](https://img-blog.csdnimg.cn/img_convert/be94b113cf254d0c791a8bce8ca0269f.png)
#### **第 20 步:点击"完成",即可创建 GCVF 文件**

![](https://img-blog.csdnimg.cn/img_convert/99ecbf7120a969b3aa794cb03677ac91.png)
#### **第 21 步:将 GCVF 文件添加到托盘之前**

您必须打开这两个"首选项"才能将 GCVF 导入 GrabCAD Print:

![](https://img-blog.csdnimg.cn/img_convert/161d0d182c6501e6a265cc22fca0922c.png)

然后您可以将 GCVF 文件导入到托盘上。
#### **第 22 步:我们终于有了洋红色立方体**

等?一个立方体?

![](https://img-blog.csdnimg.cn/img_convert/9fb32e86e83ca2b7eea526bf7543fcdd.png)

我以为我们正在制作一个 RECTANGLE,高 300 像素,宽 600 像素?

发生这种情况是因为......(请参阅下一步)
#### **第 23 步:X 和 Y 方向在 J750 上具有不同的 DPI**

回到 Voxel Utility,您可能已经注意到窗口中的这两个不可编辑的字段。

![](https://img-blog.csdnimg.cn/img_convert/72e8637eeb820fbbca98c525217e6bf3.png)

由于 PolyJet 技术的性质,像素在 X 方向上的堆叠紧密程度是 Y 方向的两倍:

![](https://img-blog.csdnimg.cn/img_convert/1254daafd2f46f44ec3c2425b32b9bc8.png)
#### **第 24 步:这就是为什么我们得到一个 1 英寸 x 1 英寸的立方体作为我们的结果**

我们怎么知道它是一个 1 英寸 x 1 英寸的立方体?

因为,如果你添加一个 CAD 零件,它每英寸和每一厘米都有切口*(你们都应该有),*你可以看到立方体很好地适合两个"英寸"切口之间。

![](https://img-blog.csdnimg.cn/img_convert/8aa97b6f99250873f98f02a2d77b5543.png)

*(这就是为什么我在原始尺寸中选择 300 x 600 的原因,这样就会发生这种情况。*
#### **第 25 步:结论**

在此过程中,您可能已经注意到以下几点:

**预览不以彩色显示。**

![](https://img-blog.csdnimg.cn/img_convert/06f3a8d41f56904f03990a4bba0517dd.png)

光是这个小立方体就有 941 个切片。尝试显示这 941 个切片中每个切片的数千个像素会导致大多数显卡崩溃。这就是为什么对于任何 .gcvf 文件来说,它都是简单的灰色预览。

2. **我们试图创造一个红砖。结果是一个洋红色的立方体。**

![](https://img-blog.csdnimg.cn/img_convert/64de89fd7c4ca484c1123590226e05e6.png)

没有"VeroRed"。在体素打印中,您需要将 J750 材质颜色的 RGB 体素彼此相邻放置,以便从远处获得某种颜色效果,就像电视一样。

此外,在调整大小时,请注意 300 DPI 与 600 DPI 问题。

3. **每一片都是一样**的

![](https://img-blog.csdnimg.cn/img_convert/10162ee37c392684a1b5c3ca3584be0e.png)

在这个例子中,我们使用 Matlab 'for' 循环对切片进行编号,使用相同的矩阵 every 循环。但要实现体素打印的*真正*力量,您显然会希望每个切片都是独一无二的,体素的形状、材料和排列会改变每一层。

编程超出了本教程的范围,但有很多很多 Matlab 帮助文档详细介绍了如何对 'for' 循环进行编程以应对日益增加的复杂性。但这应该足以让您开始使用 Voxel 打印,如果您需要任何进一步的帮助,请联系您当地的 Stratasys 经销商或 print@grabcad.com!
相关推荐
daily_233327 分钟前
数据结构——小小二叉树第三幕(链式结构的小拓展,二叉树的创建,深入理解二叉树的遍历)超详细!!!
数据结构·c++·算法
杨江1 小时前
ThingsBoard安装测试
服务器·数据库
愿天垂怜1 小时前
【C++】C++11引入的新特性(1)
java·c语言·数据结构·c++·算法·rust·哈希算法
淡写青春2091 小时前
计算机基础---进程间通信和线程间通信的方式
java·开发语言·数据结构
mit6.8241 小时前
[Redis#4] string | 常用命令 | + mysql use:cache | session
数据库·redis·后端·缓存
特种加菲猫1 小时前
初阶数据结构之栈的实现
开发语言·数据结构·笔记
bingw01142 小时前
华为机试HJ62 查找输入整数二进制中1的个数
数据结构·算法·华为
苏言の狗2 小时前
小R的二叉树探险 | 模拟
c语言·数据结构·算法·宽度优先
Beekeeper&&P...2 小时前
map和redis关系
数据库·redis·缓存