aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/kinematics/extruder.py
diff options
context:
space:
mode:
Diffstat (limited to 'klippy/kinematics/extruder.py')
-rw-r--r--klippy/kinematics/extruder.py27
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 ""