diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index ecd9f9e381..7f49d8b5b9 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -1427,6 +1427,7 @@ inline void sync_plan_position() { #endif plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); } +inline void sync_plan_position_e() { plan_set_e_position(current_position[E_AXIS]); } inline void set_current_to_destination() { memcpy(current_position, destination, sizeof(current_position)); } inline void set_destination_to_current() { memcpy(destination, current_position, sizeof(destination)); } @@ -3642,8 +3643,9 @@ inline void gcode_G28() { * G92: Set current position to given X Y Z E */ inline void gcode_G92() { - if (!code_seen(axis_codes[E_AXIS])) - st_synchronize(); + bool didE = code_seen(axis_codes[E_AXIS]); + + if (!didE) st_synchronize(); bool didXYZ = false; for (int i = 0; i < NUM_AXIS; i++) { @@ -3653,14 +3655,11 @@ inline void gcode_G92() { current_position[i] = v; - if (i == E_AXIS) - plan_set_e_position(v); - else { + if (i != E_AXIS) { position_shift[i] += v - p; // Offset the coordinate space update_software_endstops((AxisEnum)i); - didXYZ = true; - } + } } } if (didXYZ) { @@ -3670,6 +3669,9 @@ inline void gcode_G92() { sync_plan_position(); #endif } + else if (didE) { + sync_plan_position_e(); + } } #if ENABLED(ULTIPANEL)