diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 9c9ad8faef..764a342869 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -1527,11 +1527,11 @@ // Updated G92 behavior shifts the workspace #define HAS_POSITION_SHIFT DISABLED(NO_WORKSPACE_OFFSETS) // The home offset also shifts the coordinate space -#define HAS_HOME_OFFSET (DISABLED(NO_WORKSPACE_OFFSETS) && DISABLED(DELTA)) -// Either offset yields extra calculations on all moves -#define HAS_WORKSPACE_OFFSET (HAS_POSITION_SHIFT || HAS_HOME_OFFSET) -// M206 doesn't apply to DELTA -#define HAS_M206_COMMAND (HAS_HOME_OFFSET && DISABLED(DELTA)) +#define HAS_HOME_OFFSET (DISABLED(NO_WORKSPACE_OFFSETS) && (IS_SCARA || IS_CARTESIAN)) +// Cumulative offset to workspace to save some calculation +#define HAS_WORKSPACE_OFFSET (HAS_POSITION_SHIFT && HAS_HOME_OFFSET) +// M206 sets the home offset for Cartesian machines +#define HAS_M206_COMMAND (HAS_HOME_OFFSET && !IS_SCARA) // LCD timeout to status screen default is 15s #ifndef LCD_TIMEOUT_TO_STATUS diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 95c5522a08..9463f11129 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -138,20 +138,18 @@ float cartes[XYZ]; * The workspace can be offset by some commands, or * these offsets may be omitted to save on computation. */ -#if HAS_WORKSPACE_OFFSET - #if HAS_POSITION_SHIFT - // The distance that XYZ has been offset by G92. Reset by G28. - float position_shift[XYZ] = { 0 }; - #endif - #if HAS_HOME_OFFSET - // This offset is added to the configured home position. - // Set by M206, M428, or menu item. Saved to EEPROM. - float home_offset[XYZ] = { 0 }; - #endif - #if HAS_HOME_OFFSET && HAS_POSITION_SHIFT - // The above two are combined to save on computes - float workspace_offset[XYZ] = { 0 }; - #endif +#if HAS_POSITION_SHIFT + // The distance that XYZ has been offset by G92. Reset by G28. + float position_shift[XYZ] = { 0 }; +#endif +#if HAS_HOME_OFFSET + // This offset is added to the configured home position. + // Set by M206, M428, or menu item. Saved to EEPROM. + float home_offset[XYZ] = { 0 }; +#endif +#if HAS_HOME_OFFSET && HAS_POSITION_SHIFT + // The above two are combined to save on computes + float workspace_offset[XYZ] = { 0 }; #endif #if OLDSCHOOL_ABL @@ -1518,7 +1516,7 @@ void homeaxis(const AxisEnum axis) { * at the same positions relative to the machine. */ void update_software_endstops(const AxisEnum axis) { - #if HAS_HOME_OFFSET && HAS_POSITION_SHIFT + #if HAS_HOME_OFFSET workspace_offset[axis] = home_offset[axis] + position_shift[axis]; #endif diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 69981b8141..299e0ae814 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -211,14 +211,10 @@ void homeaxis(const AxisEnum axis); void sensorless_homing_per_axis(const AxisEnum axis, const bool enable=true); #endif -// -// Macros -// - /** * Workspace offsets */ -#if HAS_WORKSPACE_OFFSET +#if HAS_HOME_OFFSET || HAS_POSITION_SHIFT #if HAS_HOME_OFFSET extern float home_offset[XYZ]; #endif @@ -230,7 +226,7 @@ void homeaxis(const AxisEnum axis); #define WORKSPACE_OFFSET(AXIS) workspace_offset[AXIS] #elif HAS_HOME_OFFSET #define WORKSPACE_OFFSET(AXIS) home_offset[AXIS] - #elif HAS_POSITION_SHIFT + #else #define WORKSPACE_OFFSET(AXIS) position_shift[AXIS] #endif #define NATIVE_TO_LOGICAL(POS, AXIS) ((POS) + WORKSPACE_OFFSET(AXIS))