diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2025-03-21 22:14:13 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2025-05-12 20:15:03 -0400 |
commit | bb281834b07cc5bc8c892e59bb701a9a079009b0 (patch) | |
tree | 0c86763f262351733bc0798869f172b21b0431a7 /klippy/kinematics/extruder.py | |
parent | 9dbfc76d9dae194a2d782a5d0ce3621405729b74 (diff) | |
download | kutter-bb281834b07cc5bc8c892e59bb701a9a079009b0.tar.gz kutter-bb281834b07cc5bc8c892e59bb701a9a079009b0.tar.xz kutter-bb281834b07cc5bc8c892e59bb701a9a079009b0.zip |
toolhead: Initial support for adding extra axes to toolhead moves
Add a new add_extra_axes() to support adding additional axes. Once
called, toolhead.get_position() will return a list object with more
than 4 items, and toolhead.move() requires the same size list.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/kinematics/extruder.py')
-rw-r--r-- | klippy/kinematics/extruder.py | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/klippy/kinematics/extruder.py b/klippy/kinematics/extruder.py index 8de8ded2..2b07089b 100644 --- a/klippy/kinematics/extruder.py +++ b/klippy/kinematics/extruder.py @@ -199,24 +199,25 @@ class PrinterExtruder: return self.trapq def stats(self, eventtime): return self.heater.stats(eventtime) - def check_move(self, move): - axis_r = move.axes_r[3] + def check_move(self, move, ea_index): if not self.heater.can_extrude: raise self.printer.command_error( "Extrude below minimum temp\n" "See the 'min_extrude_temp' config option for details") + axis_r = move.axes_r[ea_index] + axis_d = move.axes_d[ea_index] if (not move.axes_d[0] and not move.axes_d[1]) or axis_r < 0.: # Extrude only move (or retraction move) - limit accel and velocity - if abs(move.axes_d[3]) > self.max_e_dist: + if abs(axis_d) > self.max_e_dist: raise self.printer.command_error( "Extrude only move too long (%.3fmm vs %.3fmm)\n" "See the 'max_extrude_only_distance' config" - " option for details" % (move.axes_d[3], self.max_e_dist)) + " option for details" % (axis_d, self.max_e_dist)) inv_extrude_r = 1. / abs(axis_r) move.limit_speed(self.max_e_velocity * inv_extrude_r, self.max_e_accel * inv_extrude_r) elif axis_r > self.max_extrude_ratio: - if move.axes_d[3] <= self.nozzle_diameter * self.max_extrude_ratio: + if axis_d <= self.nozzle_diameter * self.max_extrude_ratio: # Permit extrusion if amount extruded is tiny return area = axis_r * self.filament_area @@ -226,13 +227,13 @@ class PrinterExtruder: "Move exceeds maximum extrusion (%.3fmm^2 vs %.3fmm^2)\n" "See the 'max_extrude_cross_section' config option for details" % (area, self.max_extrude_ratio * self.filament_area)) - def calc_junction(self, prev_move, move): - diff_r = move.axes_r[3] - prev_move.axes_r[3] + def calc_junction(self, prev_move, move, ea_index): + diff_r = move.axes_r[ea_index] - prev_move.axes_r[ea_index] if diff_r: return (self.instant_corner_v / abs(diff_r))**2 return move.max_cruise_v2 - def process_move(self, print_time, move): - axis_r = move.axes_r[3] + def process_move(self, print_time, move, ea_index): + axis_r = move.axes_r[ea_index] accel = move.accel * axis_r start_v = move.start_v * axis_r cruise_v = move.cruise_v * axis_r @@ -242,10 +243,10 @@ class PrinterExtruder: # Queue movement (x is extruder movement, y is pressure advance flag) self.trapq_append(self.trapq, print_time, move.accel_t, move.cruise_t, move.decel_t, - move.start_pos[3], 0., 0., + move.start_pos[ea_index], 0., 0., 1., can_pressure_advance, 0., start_v, cruise_v, accel) - self.last_position = move.end_pos[3] + self.last_position = move.end_pos[ea_index] def find_past_position(self, print_time): if self.extruder_stepper is None: return 0. @@ -285,11 +286,11 @@ class PrinterExtruder: class DummyExtruder: def __init__(self, printer): self.printer = printer - def check_move(self, move): + def check_move(self, move, ea_index): raise move.move_error("Extrude when no extruder present") def find_past_position(self, print_time): return 0. - def calc_junction(self, prev_move, move): + def calc_junction(self, prev_move, move, ea_index): return move.max_cruise_v2 def get_name(self): return "" |