评论
每次加载新的 G 代码文件时,都需要创建一个新的刀具路径实例。您需要做的就是确保您的代码不再引用旧实例(例如 Three.js 提供了 // https://github.com/cncjs/cncjs/blob/master/src/web/widgets/Visualizer/Visualizer.jsx#L69-L78
pivotPoint = new PivotPoint3({ x: 0, y: 0, z: 0 }, (x, y, z) => {
// This callback will be called everytime you set a new center point
each(this.group.children, (o) => {
o.translateX(x);
o.translateY(y);
o.translateZ(z);
});
// Update the scene
this.updateScene();
});
我不知道您的 2dcanvas 库是否有简单地更改偏移量的方法,但这将是一个好方法,尤其是当您不想在运行时修改大型数组时。 我可以 |
对不起,我误解了你的意思。 给定如下的 G 代码程序:
将以 mm 为单位生成这样的刀具路径
为了确定边界框,我们可以通过忽略数组的第一项来排除初始位置 (0, 0, 0)。也就是说,起始位置应该是 (0, 0, 0.25) (即 我可以修复gcode-toolpath |
我记得为什么在刀具路径中指定了初始位置,G0/G1/G2/G3 命令的第一行可能只在一个轴上移动,但是需要有两个 3D 点 (x,y,z) 来定义一个3D 空间中的线。 我同意使用当前工作位置比 (0, 0, 0) 好得多。只过滤G1/G2/G3线来确定工件的边界框怎么样? |
你的第一个答案符合我的问题。我已经在使用您首先建议的技术 – 创建新的工具路径实例并翻译画布。我希望通过在每次调用时避免“new”和垃圾收集的开销来提高效率,但我认为与解析创建的对象相比这是一个小因素。 查看初始移动很重要,因为它告诉您机器的起始位置相对于工件是否正确。 刀具路径的补丁很简单:
|
|
不错的解决方案。谢谢! |
@cheton–
一道设计题:
我在 cncjs-shopfloor-tablet 中添加了一个轻量级的 2D gcode 预览器。它建立在 gcode-interpreter / gcode-toolpath / gcode-parser 之上,使用 addLine 和 addArcCurve 方法来确定边界框并渲染到 2dcanvas 上。
问题是我想将 gcode-toolpath 的起始位置设置为当前机器位置,而不是让它在第一次调用时从 0,0,0 开始,在后续调用中从最后一个位置开始。作为第一次尝试,我更改了 gcode-toolpath,这样,如果其选项参数包含“position”属性,则位置从那里开始。
第一次运行良好,但为了让它在您稍后加载第二个 gcode 文件时运行,有必要创建一个新的 gcode 工具路径实例,让垃圾收集器担心旧的不再引用的实例。这是可行的,但似乎效率低下。有没有更好的设计模式?
我想从 Toolpath 导出一个 setPosition 方法,但我认为这样做需要更改 Toolpath 的构造函数以返回“this”而不是“new Interpreter(…)”。
您推荐的解决方案是什么?