diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index 85c82aecc0..2eb0733330 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -517,8 +517,11 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS]; delta_mm[Z_AXIS] = (target[Z_AXIS]-position[Z_AXIS])/axis_steps_per_unit[Z_AXIS]; delta_mm[E_AXIS] = (target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS]; - block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + - square(delta_mm[Z_AXIS]) + square(delta_mm[E_AXIS])); + if ( block->steps_x == 0 && block->steps_y == 0 && block->steps_z == 0 ) { + block->millimeters = delta_mm[E_AXIS]; + } else { + block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + square(delta_mm[Z_AXIS])); + } float inverse_millimeters = 1.0/block->millimeters; // Inverse millimeters to remove multiple divides // Calculate speed in mm/second for each axis. No divide by zero due to previous checks. @@ -527,9 +530,6 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa block->nominal_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0 block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0 - - - if (block->steps_e == 0) { if(feed_rate