diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index ae15b6064..f9ad8a916 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -6553,7 +6553,7 @@ inline void gcode_M17() { #endif void do_pause_e_move(const float &length, const float fr) { - current_position[E_AXIS] += length; + current_position[E_AXIS] += length * 100.0 / flow_percentage[active_extruder] / volumetric_multiplier[active_extruder]; set_destination_from_current(); RUNPLAN(fr); stepper.synchronize(); @@ -12962,7 +12962,7 @@ void prepare_move_to_destination() { SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP); } #if ENABLED(PREVENT_LENGTHY_EXTRUDE) - if (destination[E_AXIS] - current_position[E_AXIS] > EXTRUDE_MAXLENGTH) { + if (fabs(destination[E_AXIS] - current_position[E_AXIS]) > EXTRUDE_MAXLENGTH / volumetric_multiplier[active_extruder]) { current_position[E_AXIS] = destination[E_AXIS]; // Behave as if the move really took place, but ignore E part SERIAL_ECHO_START(); SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP); diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index ddf47d006..443cb4113 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -736,7 +736,8 @@ void Planner::_buffer_line(const float &a, const float &b, const float &c, const SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP); } #if ENABLED(PREVENT_LENGTHY_EXTRUDE) - if (labs(de) > (int32_t)axis_steps_per_mm[E_AXIS_N] * (EXTRUDE_MAXLENGTH)) { // It's not important to get max. extrusion length in a precision < 1mm, so save some cycles and cast to int + int32_t de_mm = labs(de * volumetric_multiplier[active_extruder]); + if (de_mm > (int32_t)axis_steps_per_mm[E_AXIS_N] * (EXTRUDE_MAXLENGTH)) { // It's not important to get max. extrusion length in a precision < 1mm, so save some cycles and cast to int position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part de = 0; // no difference #if ENABLED(LIN_ADVANCE)