diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2019-05-20 22:36:57 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2019-05-26 11:19:15 -0400 |
commit | d6b69938abcff61ca1c2323899ec74eac149f13b (patch) | |
tree | 55db94cd411d52172e4c096732c3320015e8b6d8 /klippy/gcode.py | |
parent | 500f37821dd0ceeac2ce2636093565e987c8ba40 (diff) | |
download | kutter-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.py | 13 |
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) |