@@ -1028,7 +1028,7 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
1028
1028
if (!too_cold (active_extruder)) {
1029
1029
destination = current_position; // Remember the old position
1030
1030
1031
- const bool ok = TERN1 (TOOLCHANGE_PARK, all_axes_homed () && toolchange_settings.enable_park );
1031
+ const bool ok = TERN0 (TOOLCHANGE_PARK, all_axes_homed () && toolchange_settings.enable_park );
1032
1032
1033
1033
#if HAS_FAN && TOOLCHANGE_FS_FAN >= 0
1034
1034
// Store and stop fan. Restored on any exit.
@@ -1080,7 +1080,20 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
1080
1080
}
1081
1081
#endif
1082
1082
1083
+ // Clone previous position
1083
1084
extruder_cutting_recover (destination.e ); // Cutting recover
1085
+
1086
+ // Retract if previously retracted
1087
+ #if ENABLED(FWRETRACT)
1088
+ if (fwretract.retracted [active_extruder])
1089
+ unscaled_e_move (-fwretract.settings .retract_length , fwretract.settings .retract_feedrate_mm_s );
1090
+ #endif
1091
+
1092
+ // If resume_position is negative
1093
+ if (current_position.e < 0 ) unscaled_e_move (current_position.e , MMM_TO_MMS (toolchange_settings.retract_speed ));
1094
+
1095
+ planner.synchronize ();
1096
+ planner.set_e_position_mm (current_position.e ); // Extruder primed and ready
1084
1097
}
1085
1098
}
1086
1099
@@ -1597,6 +1610,9 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
1597
1610
unscaled_e_move (-fwretract.settings .retract_length , fwretract.settings .retract_feedrate_mm_s );
1598
1611
#endif
1599
1612
1613
+ // If resume_position is negative
1614
+ if (resume_current_e < 0 ) unscaled_e_move (resume_current_e, MMM_TO_MMS (toolchange_settings.retract_speed ));
1615
+
1600
1616
// If no available extruder
1601
1617
if (EXTRUDERS < 2 || active_extruder >= EXTRUDERS - 2 || active_extruder == migration.last )
1602
1618
migration.automode = false ;
0 commit comments