From a23ecf0d2f96d9c7547b8c545fb39e9396d271dd Mon Sep 17 00:00:00 2001
From: Bob Kuhn <bob.kuhn@att.net>
Date: Fri, 4 Feb 2022 19:00:35 -0600
Subject: [PATCH] =?UTF-8?q?=F0=9F=A9=B9=20Prevent=20Z=20error=20with=20UBL?=
 =?UTF-8?q?=20+=20Park=20unscaled=20E=20move=20(#23568)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Marlin/src/feature/pause.cpp | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp
index 08f540f2eed..147164c1662 100644
--- a/Marlin/src/feature/pause.cpp
+++ b/Marlin/src/feature/pause.cpp
@@ -39,6 +39,10 @@
 #include "../module/printcounter.h"
 #include "../module/temperature.h"
 
+#if ENABLED(AUTO_BED_LEVELING_UBL)
+  #include "bedlevel/bedlevel.h"
+#endif
+
 #if ENABLED(FWRETRACT)
   #include "fwretract.h"
 #endif
@@ -440,7 +444,15 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool
   // Initial retract before move to filament change position
   if (retract && thermalManager.hotEnoughToExtrude(active_extruder)) {
     DEBUG_ECHOLNPGM("... retract:", retract);
+
+    #if ENABLED(AUTO_BED_LEVELING_UBL)
+      const bool leveling_was_enabled = planner.leveling_active; // save leveling state
+      set_bed_leveling_enabled(false);  // turn off leveling
+    #endif
+
     unscaled_e_move(retract, PAUSE_PARK_RETRACT_FEEDRATE);
+
+    TERN_(AUTO_BED_LEVELING_UBL, set_bed_leveling_enabled(leveling_was_enabled)); // restore leveling
   }
 
   // If axes don't need to home then the nozzle can park
@@ -640,9 +652,16 @@ void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_
     prepare_internal_move_to_destination(NOZZLE_PARK_Z_FEEDRATE);
   }
 
+  #if ENABLED(AUTO_BED_LEVELING_UBL)
+    const bool leveling_was_enabled = planner.leveling_active; // save leveling state
+    set_bed_leveling_enabled(false);  // turn off leveling
+  #endif
+
   // Unretract
   unscaled_e_move(PAUSE_PARK_RETRACT_LENGTH, feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE));
 
+  TERN_(AUTO_BED_LEVELING_UBL, set_bed_leveling_enabled(leveling_was_enabled)); // restore leveling
+
   // Intelligent resuming
   #if ENABLED(FWRETRACT)
     // If retracted before goto pause