起因 link h2
沒什麼好多說,就是 TM 的撞機了。
換線材用的自定義 G-Code 中有使用到「after_toolchange」這個佔位符。
字面意思是「換刀後的位置」,而作用也確實是這樣。
M600 X10 Y{y_after_toolchange} Z15 R{new_filament_temp}
|------------------|
這裡
那我是怎麼撞機的呢?
因為這個佔位符實際給出來的值直接超出噴頭移動範圍。

如紅框所示,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 軸

嗯哼,被正確 Clamp 到 0,收工。
還好撞的是 Y 軸,影響最輕的那一個,要是撞 Z 那真的會哭出來。