起因 link h2

沒什麼好多說,就是 TM 的撞機了。

換線材用的自定義 G-Code 中有使用到「after_toolchange」這個佔位符。

字面意思是「換刀後的位置」,而作用也確實是這樣。

M600 X10 Y{y_after_toolchange} Z15 R{new_filament_temp}
          |------------------|
                  這裡

那我是怎麼撞機的呢?

因為這個佔位符實際給出來的值直接超出噴頭移動範圍。

placeholder_trap_A

如紅框所示,Y 座標直接起飛出去。

處理 link h2

中間排查我就省略了,直接說原因跟解決方案。

原因是這個「after_toolchange」是基於 Orca Slicer 自身的空間座標系

而不是打印盤的座標系

所以給出的是相對於第一個打印盤的座標原點的值。

而解法也很簡單

Y{min(max(y_after_toolchange, print_bed_min[1]), print_bed_max[1])}

把它 Math Clamp 起來就行了。

這邊的 print_bed_min, print_bed_max 則是所設定的可打印範圍

index 0, 1 分別是 X 軸跟 Y 軸

placeholder_trap_B

嗯哼,被正確 Clamp 到 0,收工。


還好撞的是 Y 軸,影響最輕的那一個,要是撞 Z 那真的會哭出來。