aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--klippy/extras/gcode_arcs.py11
-rw-r--r--test/klippy/gcode_arcs.test1
2 files changed, 5 insertions, 7 deletions
diff --git a/klippy/extras/gcode_arcs.py b/klippy/extras/gcode_arcs.py
index 3b0876ab..61b1a0fc 100644
--- a/klippy/extras/gcode_arcs.py
+++ b/klippy/extras/gcode_arcs.py
@@ -38,23 +38,20 @@ class ArcSupport:
if not asI and not asJ:
raise self.gcode.error("G2/G3 neither I nor J given")
asE = self.gcode.get_float("E", params, None)
+ if asE is not None and gcodestatus['absolute_extrude']:
+ raise self.gcode.error("G2/G3 only supports relative extrude mode")
asF = self.gcode.get_float("F", params, None)
clockwise = (params['#command'] == 'G2')
# Build list of linear coordinates to move to
coords = self.planArc(currentPos, [asX, asY, asZ], [asI, asJ],
clockwise)
- e_per_move = e_base = 0.
- if asE is not None:
- if gcodestatus['absolute_extrude']:
- e_base = currentPos[3]
- e_per_move = (asE - e_base) / len(coords)
# Convert coords into G1 commands
for coord in coords:
g1_params = {'X': coord[0], 'Y': coord[1], 'Z': coord[2]}
- if e_per_move:
- g1_params['E'] = e_base + e_per_move
+ if asE is not None:
+ g1_params['E'] = asE / len(coords)
if asF is not None:
g1_params['F'] = asF
self.gcode.cmd_G1(g1_params)
diff --git a/test/klippy/gcode_arcs.test b/test/klippy/gcode_arcs.test
index 2be4efc9..84e13b34 100644
--- a/test/klippy/gcode_arcs.test
+++ b/test/klippy/gcode_arcs.test
@@ -3,6 +3,7 @@ DICTIONARY atmega2560.dict
CONFIG gcode_arcs.cfg
# Home and move in arcs
+M83
G28
G1 X20 Y20 Z20
G2 X125 Y32 Z20 E1 I10.5 J10.5