From 4115a77342239bfbef3be2463e3ba6b5c3616167 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Sun, 16 Aug 2020 22:02:23 -0400 Subject: [PATCH] gcode: Automatically call reset_last_position() on a toolhead set_position() Generate a "toolhead:set_position" event on a call to toolhead.set_position() and use that event to automatically call gcode.reset_last_position(). Signed-off-by: Kevin O'Connor --- klippy/extras/force_move.py | 2 -- klippy/extras/homing_override.py | 1 - klippy/extras/probe.py | 1 - klippy/extras/tuning_tower.py | 1 - klippy/extras/z_tilt.py | 1 - klippy/gcode.py | 3 ++- klippy/kinematics/cartesian.py | 2 -- klippy/toolhead.py | 1 + 8 files changed, 3 insertions(+), 9 deletions(-) diff --git a/klippy/extras/force_move.py b/klippy/extras/force_move.py index 394da525..eb2577df 100644 --- a/klippy/extras/force_move.py +++ b/klippy/extras/force_move.py @@ -132,8 +132,6 @@ class ForceMove: z = gcmd.get_float('Z', curpos[2]) logging.info("SET_KINEMATIC_POSITION pos=%.3f,%.3f,%.3f", x, y, z) toolhead.set_position([x, y, z, curpos[3]], homing_axes=(0, 1, 2)) - gcode = self.printer.lookup_object('gcode') - gcode.reset_last_position() def load_config(config): return ForceMove(config) diff --git a/klippy/extras/homing_override.py b/klippy/extras/homing_override.py index 1561aabc..c5503b13 100644 --- a/klippy/extras/homing_override.py +++ b/klippy/extras/homing_override.py @@ -51,7 +51,6 @@ class HomingOverride: pos[axis] = loc homing_axes.append(axis) toolhead.set_position(pos, homing_axes=homing_axes) - self.gcode.reset_last_position() # Perform homing kwparams = { 'printer': self.template.create_status_wrapper() } kwparams['params'] = gcmd.get_command_parameters() diff --git a/klippy/extras/probe.py b/klippy/extras/probe.py index 02d1b5b9..539a6572 100644 --- a/klippy/extras/probe.py +++ b/klippy/extras/probe.py @@ -123,7 +123,6 @@ class PrinterProbe: pos = toolhead.get_position() self.gcode.respond_info("probe at %.3f,%.3f is z=%.6f" % (pos[0], pos[1], pos[2])) - self.gcode.reset_last_position() return pos[:3] def _move(self, coord, speed): toolhead = self.printer.lookup_object('toolhead') diff --git a/klippy/extras/tuning_tower.py b/klippy/extras/tuning_tower.py index dcdc67fe..753e5433 100644 --- a/klippy/extras/tuning_tower.py +++ b/klippy/extras/tuning_tower.py @@ -35,7 +35,6 @@ class TuningTower: self.command_fmt = "%s %s=%%.9f" % (command, parameter) self.normal_transform = self.gcode.set_move_transform(self, force=True) self.last_z = -99999999.9 - self.gcode.reset_last_position() self.get_position() gcmd.respond_info("Starting tuning test (start=%.6f factor=%.6f)" % (self.start, self.factor)) diff --git a/klippy/extras/z_tilt.py b/klippy/extras/z_tilt.py index 577b7e70..c4c58c9e 100644 --- a/klippy/extras/z_tilt.py +++ b/klippy/extras/z_tilt.py @@ -65,7 +65,6 @@ class ZAdjustHelper: last_stepper.set_trapq(toolhead.get_trapq()) curpos[2] += first_stepper_offset toolhead.set_position(curpos) - gcode.reset_last_position() class RetryHelper: def __init__(self, config, error_msg_extra = ""): diff --git a/klippy/gcode.py b/klippy/gcode.py index 9bacfbfa..03d109a5 100644 --- a/klippy/gcode.py +++ b/klippy/gcode.py @@ -76,6 +76,8 @@ class GCodeParser: printer.register_event_handler("klippy:shutdown", self._handle_shutdown) printer.register_event_handler("klippy:disconnect", self._handle_disconnect) + printer.register_event_handler("toolhead:set_position", + self.reset_last_position) printer.register_event_handler("extruder:activate_extruder", self._handle_activate_extruder) # Command handling @@ -421,7 +423,6 @@ class GCodeParser: homing_state.home_axes(axes) for axis in homing_state.get_axes(): self.base_position[axis] = self.homing_position[axis] - self.reset_last_position() def cmd_M400(self, gcmd): # Wait for current moves to finish self.toolhead.wait_moves() diff --git a/klippy/kinematics/cartesian.py b/klippy/kinematics/cartesian.py index df57edce..3dfd8fc5 100644 --- a/klippy/kinematics/cartesian.py +++ b/klippy/kinematics/cartesian.py @@ -136,10 +136,8 @@ class CartKinematics: self.limits[dc_axis] = dc_rail.get_range() cmd_SET_DUAL_CARRIAGE_help = "Set which carriage is active" def cmd_SET_DUAL_CARRIAGE(self, gcmd): - gcode = self.printer.lookup_object('gcode') carriage = gcmd.get_int('CARRIAGE', minval=0, maxval=1) self._activate_carriage(carriage) - gcode.reset_last_position() def load_kinematics(toolhead, config): return CartKinematics(toolhead, config) diff --git a/klippy/toolhead.py b/klippy/toolhead.py index 68c4dfdc..cd083a50 100644 --- a/klippy/toolhead.py +++ b/klippy/toolhead.py @@ -400,6 +400,7 @@ class ToolHead: self.trapq_free_moves(self.trapq, self.reactor.NEVER) self.commanded_pos[:] = newpos self.kin.set_position(newpos, homing_axes) + self.printer.send_event("toolhead:set_position") def move(self, newpos, speed): move = Move(self, self.commanded_pos, newpos, speed) if not move.move_d: