From cd9868f442d07ff2de8491c064422f044c6e8f80 Mon Sep 17 00:00:00 2001 From: Roxy-3D Date: Tue, 21 Aug 2018 19:12:26 -0500 Subject: [PATCH] Make position_is_reachable() smarter about IDEX machines` On many IDEX machines the allowed travel of the X1 carraige and X2 carraige does not perfectly overlap. This helps the issue. But more work needs to be done at the higher level. (For example the X1_MAX_POS should probably be factored into G26's mesh validation pattern.) --- Marlin/src/module/motion.h | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 78646a9f45..a94d90f91b 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -267,9 +267,21 @@ void homeaxis(const AxisEnum axis); // Return true if the given position is within the machine bounds. inline bool position_is_reachable(const float &rx, const float &ry) { - // Add 0.001 margin to deal with float imprecision - return WITHIN(rx, X_MIN_POS - 0.001f, X_MAX_POS + 0.001f) - && WITHIN(ry, Y_MIN_POS - 0.001f, Y_MAX_POS + 0.001f); + #if ENABLED(DUAL_X_CARRIAGE) + if (active_extruder == 0) { + // Add 0.001 margin to deal with float imprecision + return WITHIN(rx, X1_MIN_POS - 0.001f, X1_MAX_POS + 0.001f) + && WITHIN(ry, Y_MIN_POS - 0.001f, Y_MAX_POS + 0.001f); + } else { + // Add 0.001 margin to deal with float imprecision + return WITHIN(rx, X2_MIN_POS - 0.001f, X2_MAX_POS + 0.001f) + && WITHIN(ry, Y_MIN_POS - 0.001f, Y_MAX_POS + 0.001f); + } + #else + // Add 0.001 margin to deal with float imprecision + return WITHIN(rx, X_MIN_POS - 0.001f, X_MAX_POS + 0.001f) + && WITHIN(ry, Y_MIN_POS - 0.001f, Y_MAX_POS + 0.001f); + #endif } #if HAS_BED_PROBE