diff --git a/Marlin/src/gcode/parser.h b/Marlin/src/gcode/parser.h index a92e6831d11d..be4e35675bf1 100644 --- a/Marlin/src/gcode/parser.h +++ b/Marlin/src/gcode/parser.h @@ -292,6 +292,17 @@ class GCodeParser { // Units modes: Inches, Fahrenheit, Kelvin + static constexpr bool axis_is_rotational(const AxisEnum axis) { + return (false + || TERN0(AXIS4_ROTATES, axis == I_AXIS) + || TERN0(AXIS5_ROTATES, axis == J_AXIS) + || TERN0(AXIS6_ROTATES, axis == K_AXIS) + || TERN0(AXIS7_ROTATES, axis == U_AXIS) + || TERN0(AXIS8_ROTATES, axis == V_AXIS) + || TERN0(AXIS9_ROTATES, axis == W_AXIS) + ); + } + #if ENABLED(INCH_MODE_SUPPORT) static float mm_to_linear_unit(const_float_t mm) { return mm / linear_unit_factor; } static float mm_to_volumetric_unit(const_float_t mm) { return mm / (volumetric_enabled ? volumetric_unit_factor : linear_unit_factor); } @@ -308,19 +319,8 @@ class GCodeParser { volumetric_unit_factor = POW(linear_unit_factor, 3); } - static constexpr bool is_rotational(const AxisEnum axis) { - return (false - || TERN0(AXIS4_ROTATES, axis == I_AXIS) - || TERN0(AXIS5_ROTATES, axis == J_AXIS) - || TERN0(AXIS6_ROTATES, axis == K_AXIS) - || TERN0(AXIS7_ROTATES, axis == U_AXIS) - || TERN0(AXIS8_ROTATES, axis == V_AXIS) - || TERN0(AXIS9_ROTATES, axis == W_AXIS) - ); - } - static float axis_unit_factor(const AxisEnum axis) { - if (is_rotational(axis)) return 1.0f; + if (axis_is_rotational(axis)) return 1.0f; #if HAS_EXTRUDERS if (axis >= E_AXIS && volumetric_enabled) return volumetric_unit_factor; #endif @@ -333,6 +333,8 @@ class GCodeParser { #else + static float axis_unit_factor(const AxisEnum) { return 1.0f; } + static float mm_to_linear_unit(const_float_t mm) { return mm; } static float mm_to_volumetric_unit(const_float_t mm) { return mm; } diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index 3236473d5903..187dc21e9447 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -79,8 +79,8 @@ static void _lcd_move_xyz(const AxisEnum axis) { ui.encoderPosition = 0; if (ui.should_draw()) { const float pos = ui.manual_move.axis_value(axis); - if (parser.using_inch_units() && !parser.is_rotational(axis)) { - const float imp_pos = LINEAR_UNIT(pos); + if (parser.axis_unit_factor(axis) != 1.0f) { + const float imp_pos = parser.axis_value_to_mm(axis, pos); MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_MOVE_N), ftostr63(imp_pos)); } else @@ -152,21 +152,18 @@ void _goto_manual_move(const_float_t scale) { void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int8_t eindex=active_extruder) { _manual_move_func_ptr = func; START_MENU(); - if (LCD_HEIGHT >= 4) { - switch (axis) { - #define _CASE_MOVE(N) case N##_AXIS: - MAIN_AXIS_MAP(_CASE_MOVE) - STATIC_ITEM_N(axis, MSG_MOVE_N, SS_DEFAULT|SS_INVERT); - break; - default: - TERN_(MANUAL_E_MOVES_RELATIVE, manual_move_e_origin = current_position.e); - STATIC_ITEM(MSG_MOVE_E, SS_DEFAULT|SS_INVERT); - break; + + if (LCD_HEIGHT >= 4) { // Space for a title? + if (axis < NUM_AXES) + STATIC_ITEM_N(axis, MSG_MOVE_N, SS_DEFAULT|SS_INVERT); + else { + TERN_(MANUAL_E_MOVES_RELATIVE, manual_move_e_origin = current_position.e); + STATIC_ITEM(MSG_MOVE_E, SS_DEFAULT|SS_INVERT); } } BACK_ITEM(MSG_MOVE_AXIS); - if (parser.is_rotational(axis)) { + if (parser.axis_is_rotational(axis)) { SUBMENU(MSG_MOVE_10DEG, []{ _goto_manual_move(10); }); SUBMENU(MSG_MOVE_1DEG, []{ _goto_manual_move(1.000f); }); SUBMENU(MSG_MOVE_01DEG, []{ _goto_manual_move(0.100f); });