aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/gcode.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2019-05-20 22:36:57 -0400
committerKevin O'Connor <kevin@koconnor.net>2019-05-26 11:19:15 -0400
commitd6b69938abcff61ca1c2323899ec74eac149f13b (patch)
tree55db94cd411d52172e4c096732c3320015e8b6d8 /klippy/gcode.py
parent500f37821dd0ceeac2ce2636093565e987c8ba40 (diff)
downloadkutter-d6b69938abcff61ca1c2323899ec74eac149f13b.tar.gz
kutter-d6b69938abcff61ca1c2323899ec74eac149f13b.tar.xz
kutter-d6b69938abcff61ca1c2323899ec74eac149f13b.zip
gcode: Don't apply the SET_GCODE_OFFSET to the next g-code command
The SET_GCODE_OFFSET command could cause unwanted behavior when an offset is applied to the following g-code command. (In particular, when the following command is an extrude only move - as in issue #1289.) Don't apply the offset immediately. Instead, add support for a MOVE=1 parameter which will schedule a move to apply the given offset. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/gcode.py')
-rw-r--r--klippy/gcode.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/klippy/gcode.py b/klippy/gcode.py
index 3cbb1ae4..56d5c9a8 100644
--- a/klippy/gcode.py
+++ b/klippy/gcode.py
@@ -601,6 +601,7 @@ class GCodeParser:
self.extrude_factor = new_extrude_factor
cmd_SET_GCODE_OFFSET_help = "Set a virtual offset to g-code positions"
def cmd_SET_GCODE_OFFSET(self, params):
+ move_delta = [0., 0., 0., 0.]
for axis, pos in self.axis2pos.items():
if axis in params:
offset = self.get_float(axis, params)
@@ -610,9 +611,19 @@ class GCodeParser:
else:
continue
delta = offset - self.homing_position[pos]
- self.last_position[pos] += delta
+ move_delta[pos] = delta
self.base_position[pos] += delta
self.homing_position[pos] = offset
+ # Move the toolhead the given offset if requested
+ if self.get_int('MOVE', params, 0):
+ speed = self.get_float('MOVE_SPEED', params,
+ self.speed * self.speed_factor, above=0.)
+ for pos, delta in enumerate(move_delta):
+ self.last_position[pos] += delta
+ try:
+ self.move_with_transform(self.last_position, speed)
+ except homing.EndstopError as e:
+ raise error(str(e))
def cmd_M206(self, params):
# Offset axes
offsets = { self.axis2pos[a]: self.get_float(a, params)