问题标签 [3d-printing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 使用 Slic3r 进行 3D 打印时,挤出订单的 Perl 小变化
一个流行的开源 3D 打印切片器软件Slic3r是用 Perl 编写的。我需要对一个大学项目的源代码做一些小改动,但我对 Perl 完全不熟悉。
这是双重挤压的样子的漂亮图像。本质上,当您更换喷嘴/材料时,就会产生问题。您需要一个擦拭塔来清除喷嘴上的口水,并且您必须处理再加热/冷却和其他耗时的任务。
这就是为什么我所知道的所有切片程序都尽量减少挤出机的变化。例如,如果第 3 层和第 4 层都需要两种材料,则第 3 层将打印挤出机/材料 1,然后打印挤出机/材料 2。在第 4 层上,您将打印挤出机 2,然后打印挤出机 1。
但是,我需要始终以与挤出机编号相同的顺序打印;每层都应该从挤出机 1 开始,然后是挤出机 2,然后是 3,以此类推。
我相信我已经在 Slic3r 源代码中找到了重要的代码片段。它在 lib/Slic3r/Print/ GCode.pm中,也在 Github上,从第 622 行开始。
这是代码:
我猜@extruders 只是一个列表,可以是 [1]、[1, 2]、[1,2,3] 或更多。我想修改这个块,以便我们总是按数字顺序(1、2、3)编写挤出机命令。
如果您想了解更多关于为什么?的详细信息,我很乐意告诉您比您想知道的更多关于FFF 印刷、印刷热交换器等的信息。
编辑 事实上,注释掉if语句非常有效。重新编译后,slic3r 工作正常,Gcode 似乎是正确的。因此,我想这是软件中唯一提到订单的地方。带有此更改的 Slic3r 代码可在我在 Github的 fork 上找到,以防有人遇到同样的问题。谢谢您,zdim,您的反馈!
c# - STL 文件验证
我有一个 ASCII stl 文件,我需要通过以下标准为 3D 打印机验证此文件。
首先我想展示文件的结构:
上述格式的 ASCII stl 文件中有更多的方面(三角形)。三个顶点代表 3D 中的三个点,它们创建了一个 2D 三角形。然而,在实践中,所有的面都是简单的三角形。这些三角形创建一个或多个壳对象(一个简单的 3D 对象)。
我需要的是检查外壳的数量。换句话说,我想计算用这些三角形创建了多少个分离的对象。
我在MakePrintable在线 stl 文件修复软件上上传了我的 stl 文件,我从我的文件中获得了以下详细信息: 三角形计数 x 3 = 顶点计数(三个顶点(3D 点)创建一个三角形,就像我写的那样)
所以,我认为可以计算 shell 的数量,但我不知道,而且这个软件不是开源的(所以我也不能从这里复制 shell 计数器逻辑:))。如果有人可以帮助我,请给我一个答案。
javascript - 3d 打印 js-slicer (SLAcer.js) 的二进制处理
介绍
大家好,我目前正在开发一个基于 JavaScript 的 3d 切片工具(SLAcer.js - btw.),它可以为我便宜的 dlp 打印机(SparkMaker)生成方便的打印文件。打印文件由一些 G 代码和简单的二进制层/图像组成(参见此处)。
我已经能够生成 G-Code 和包含二进制层相关信息的 Uint8Array。当前,所有 G 代码和二进制层都连接为字符串(可能是第一个问题),最后可以作为 zip 文件的一部分作为打印文件 (.wow) 下载。(项目默认 JSZip 框架)(见这里)
我苦苦挣扎的地方是:
我无法为二进制层获得正确的 TextEncoding 以匹配原始二进制层。
已经尝试了几件事,包括:
也试过:
令我惊讶的是,当将每个 Uint8Array 导出为单独的二进制 txt 文件时,它们几乎完全匹配所需/原始模式
级联:
概括
想要的文件内容(文本和原始二进制文件 - utf8):
这听起来很容易,但就正确的编码而言,它不是:
- 由 SLAcer 切片的文件(二进制层不同)
- 单层文件(几乎匹配原始的第一层模式)
- 由原始软件切片的文件 希望有人可以帮助我:)
3d - 如何获得 dxf、stl 的 xyz 坐标
我想获得用 .dxf、.stl 编写的 3d 对象的 xyz 点来制作我的 3d 打印机软件。
我尝试了 python dxf 解析器,但它无法获取 3d 对象的 xyz 坐标。
任何聪明的人都知道我该怎么做?
graphics - 为什么 STL 文件需要法线向量?
STL 是用于 3d 打印的最流行的 3d 模型文件格式。它记录构成 3d 形状的三角形表面。
我阅读了 STL 文件格式的规范。这是一种相当简单的格式。每个三角形由 12 个浮点数表示。前 3 个定义法线向量,接下来的 9 个定义三个顶点。但这里有一个问题。三个顶点足以定义一个三角形。法线向量可以通过取两个向量的叉积来计算(每个向量都从一个顶点指向另一个顶点)。
我知道法线向量在渲染中很有用,并且通过包含法线向量,程序不必在每次加载相同的模型时都计算法线向量。但是我想知道如果创建软件故意包含错误的法向量会发生什么?它会在渲染软件中产生错误的结果吗?
另一方面,3 个顶点说明了三角形的一切。包含法线向量将允许信息中存在逻辑冲突,并将文件大小增加 33%。如有必要,渲染软件可以在合理的时间内计算法向量。那么格式为什么要包含它呢?该格式创建于 1987 年,用于立体光刻 3D 打印。那时计算法向向量对计算机来说成本高吗?
我在一个线程中读到 Autodesk Meshmixer 会根据顶点忽略法线向量和图形三角形。提供错误的法线向量似乎不会改变结果。 为什么立体光刻 (.STL) 文件要求每个三角形都有一个法线向量?
c++ - 将外部支持者生成网格以进行 3D 打印
序幕
这是我试图重新向封闭的Generating 支持者询问 3D 打印,因为这是一个有趣的问题,但缺乏重要的细节......这是作为问答的目的,目前我正在研究答案的代码,但随时回答(我接受最佳答案)。
问题描述
好的,这里有一些关于问题的基本信息:
由于这是一个巨大的问题,我将专注于通用网格/支持模式合并几何问题。
简而言之,如果我们想要打印任何网格,我们只能在它连接到起始平面的角度达到约 45 度(对于不同的打印技术为 +/-)时才能做到。因此,如果我们有未连接到该平面的部件,我们需要创建一个将其保持/连接到它的桥。像这样的东西(图片取自上面链接的页面):
粗糙的我们需要添加尽可能少的材料,并且仍然足够坚固以将我们的网格固定在适当的位置而不会弯曲。最重要的是,我们需要削弱网格附近的支撑,以便在打印后轻松将其折断。
不要忘记形状和位置取决于许多因素,例如使用的材料和技术、热流。
问题:
为了将这个巨大的话题缩小到可以回答的问题,让我们只关注这个问题:
如何将3D三角网格(如STL的边界表示)与从定义平面垂直连接的预定义支撑图案(如 3 侧棱镜)合并?
使用简单的C++。
java - 如何与 3D 打印机正确通信
我必须编写一个 java 程序,通过网络接收 G-Code 命令并通过串行通信将它们发送到 3D 打印机。原则上一切似乎都很好,只要打印机需要超过 300 毫秒来执行命令。如果执行时间比这短,打印机接收下一个命令需要太多时间,导致命令执行之间出现延迟(打印机喷嘴静止约 100-200 毫秒)。这可能会成为 3D 打印中的一个问题,因此我必须消除这种延迟。
为了比较:像 Repetier Host 或 Cura 这样的软件可以通过 seial 发送相同的命令,在命令执行之间没有任何延迟,所以它必须以某种方式成为可能。
我使用jSerialComm库进行串行通信。
这是向打印机发送命令的线程:
这是printer.serialWrite:(Arduino Java Lib的“灵感”)
printer
是Printer
实现 的类的对象com.fazecast.jSerialComm.SerialPortDataListener
打印机相关功能
Printer.bufferAvailable
被声明为 volatile 我还尝试在另一个线程中阻塞 jserialcomm 的函数,结果相同。我的瓶颈在哪里?我的代码中是否存在瓶颈,或者 jserialcomm 是否会产生太多开销?
对于没有 3d 打印经验的人:当打印机接收到有效命令时,它将将该命令放入内部缓冲区,以最大程度地减少延迟。只要内部缓冲区中有可用空间,它就会以ok
. 当缓冲区已满时,将ok
延迟直到再次有空闲空间。所以基本上你只需要发送一个命令,等待确定,立即发送另一个。
c++ - QtSerialPort 未写入串行端口
我正在尝试使用 QtSerialPort 将 Gcode 命令发送到 3d 打印机。我能够连接并读取打印机发出的启动 gcode,但我无法编写 Gcode 来让打印机执行某些操作。我已经阅读了很多人的代码,据我所知,我的代码看起来并没有错,但我肯定错过了一些东西。
这是我用来连接到 3d 打印机的:
这是我要写入串行端口的内容:
这没有给我任何错误,但打印机没有反应。我尝试了 Qt 串行控制台示例并发出“G28”,打印机反应正确。在同一个程序上,我添加了一个执行上述代码以编写命令的按钮,但它什么也没做。这告诉我问题可能出在我如何写入端口上。有人对我做错了什么有任何想法吗?提前致谢。
g-code - 我可以创建一个在打印一次后自毁的 gcode 吗?
我可以创建一个在打印一次后自毁的 gcode 吗?例如,我将创建的 gcode 发送到远程区域的打印机进行打印,但我希望他们只打印一次。我可以添加一个自毁代码,以便在运行一次后将其删除吗?