From e9ef23dfd4556633e3b506469cc3fc4e46edff8a Mon Sep 17 00:00:00 2001 From: jbubik Date: Tue, 14 Mar 2023 02:19:24 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Polargraph=20without=20Z?= =?UTF-8?q?=20(#25514)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/mmu/mmu2.cpp | 3 +- Marlin/src/inc/SanityCheck.h | 6 +-- Marlin/src/lcd/HD44780/marlinui_HD44780.cpp | 13 +++--- Marlin/src/lcd/menu/menu_advanced.cpp | 2 +- Marlin/src/libs/nozzle.cpp | 51 +++++++++++---------- Marlin/src/module/polargraph.cpp | 2 +- 6 files changed, 41 insertions(+), 36 deletions(-) diff --git a/Marlin/src/feature/mmu/mmu2.cpp b/Marlin/src/feature/mmu/mmu2.cpp index 4f86578a60a7f..7b6a48954b61c 100644 --- a/Marlin/src/feature/mmu/mmu2.cpp +++ b/Marlin/src/feature/mmu/mmu2.cpp @@ -815,8 +815,7 @@ void MMU2::manage_response(const bool move_axes, const bool turn_off_nozzle) { resume_hotend_temp = thermalManager.degTargetHotend(active_extruder); resume_position = current_position; - if (move_axes && all_axes_homed()) - nozzle.park(0, park_point /*= NOZZLE_PARK_POINT*/); + if (move_axes && all_axes_homed()) nozzle.park(0, park_point); if (turn_off_nozzle) thermalManager.setTargetHotend(0, active_extruder); diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 5f20b205a0ff9..a03a489a013cb 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1148,11 +1148,11 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #if ENABLED(NOZZLE_PARK_FEATURE) constexpr float npp[] = NOZZLE_PARK_POINT; - static_assert(COUNT(npp) == XYZ, "NOZZLE_PARK_POINT requires X, Y, and Z values."); + static_assert(COUNT(npp) == _MIN(NUM_AXES, XYZ), "NOZZLE_PARK_POINT requires coordinates for enabled axes, but only up to X,Y,Z."); constexpr xyz_pos_t npp_xyz = NOZZLE_PARK_POINT; static_assert(WITHIN(npp_xyz.x, X_MIN_POS, X_MAX_POS), "NOZZLE_PARK_POINT.X is out of bounds (X_MIN_POS, X_MAX_POS)."); - static_assert(WITHIN(npp_xyz.y, Y_MIN_POS, Y_MAX_POS), "NOZZLE_PARK_POINT.Y is out of bounds (Y_MIN_POS, Y_MAX_POS)."); - static_assert(WITHIN(npp_xyz.z, Z_MIN_POS, Z_MAX_POS), "NOZZLE_PARK_POINT.Z is out of bounds (Z_MIN_POS, Z_MAX_POS)."); + static_assert(TERN1(HAS_Y_AXIS, WITHIN(npp_xyz.y, Y_MIN_POS, Y_MAX_POS)), "NOZZLE_PARK_POINT.Y is out of bounds (Y_MIN_POS, Y_MAX_POS)."); + static_assert(TERN1(HAS_Z_AXIS, WITHIN(npp_xyz.z, Z_MIN_POS, Z_MAX_POS)), "NOZZLE_PARK_POINT.Z is out of bounds (Z_MIN_POS, Z_MAX_POS)."); #endif /** diff --git a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp index 9093fa3eab9e1..416c07c8f72b6 100644 --- a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp +++ b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp @@ -521,7 +521,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const else if (axis_should_home(axis)) while (const char c = *value++) lcd_put_lchar(c <= '.' ? c : '?'); else if (NONE(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING) && !axis_is_trusted(axis)) - lcd_put_u8str(axis == Z_AXIS ? F(" ") : F(" ")); + lcd_put_u8str(TERN0(HAS_Z_AXIS, axis == Z_AXIS) ? F(" ") : F(" ")); else lcd_put_u8str(value); } @@ -998,11 +998,12 @@ void MarlinUI::draw_status_screen() { #endif // LCD_WIDTH >= 20 - lcd_moveto(LCD_WIDTH - 8, 1); - _draw_axis_value(Z_AXIS, ftostr52sp(LOGICAL_Z_POSITION(current_position.z)), blink); - - #if HAS_LEVELING && !HAS_HEATED_BED - lcd_put_lchar(planner.leveling_active || blink ? '_' : ' '); + #if HAS_Z_AXIS + lcd_moveto(LCD_WIDTH - 8, 1); + _draw_axis_value(Z_AXIS, ftostr52sp(LOGICAL_Z_POSITION(current_position.z)), blink); + #if HAS_LEVELING && !HAS_HEATED_BED + lcd_put_lchar(planner.leveling_active || blink ? '_' : ' '); + #endif #endif #endif // LCD_HEIGHT > 2 diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index 0e24d0ed8087c..71188a86883de 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -597,7 +597,7 @@ void menu_backlash(); ; LOOP_LOGICAL_AXES(a) { - if (a == C_AXIS || TERN0(HAS_EXTRUDERS, a == E_AXIS)) + if (TERN0(HAS_C_AXIS, a == C_AXIS) || TERN0(HAS_EXTRUDERS, a == E_AXIS)) EDIT_ITEM_FAST_N(float52sign, a, MSG_VN_JERK, &planner.max_jerk[a], 0.1f, max_jerk_edit[a]); else EDIT_ITEM_FAST_N(float3, a, MSG_VN_JERK, &planner.max_jerk[a], 1.0f, max_jerk_edit[a]); diff --git a/Marlin/src/libs/nozzle.cpp b/Marlin/src/libs/nozzle.cpp index 575e74a814720..74f61c33d0186 100644 --- a/Marlin/src/libs/nozzle.cpp +++ b/Marlin/src/libs/nozzle.cpp @@ -225,38 +225,43 @@ Nozzle nozzle; #if ENABLED(NOZZLE_PARK_FEATURE) - float Nozzle::park_mode_0_height(const_float_t park_z) { - // Apply a minimum raise, if specified. Use park.z as a minimum height instead. - return _MAX(park_z, // Minimum height over 0 based on input - _MIN(Z_MAX_POS, // Maximum height is fixed - #ifdef NOZZLE_PARK_Z_RAISE_MIN - NOZZLE_PARK_Z_RAISE_MIN + // Minimum raise... - #endif - current_position.z // ...over current position - ) - ); - } + #if HAS_Z_AXIS + float Nozzle::park_mode_0_height(const_float_t park_z) { + // Apply a minimum raise, if specified. Use park.z as a minimum height instead. + return _MAX(park_z, // Minimum height over 0 based on input + _MIN(Z_MAX_POS, // Maximum height is fixed + #ifdef NOZZLE_PARK_Z_RAISE_MIN + NOZZLE_PARK_Z_RAISE_MIN + // Minimum raise... + #endif + current_position.z // ...over current position + ) + ); + } + #endif // HAS_Z_AXIS void Nozzle::park(const uint8_t z_action, const xyz_pos_t &park/*=NOZZLE_PARK_POINT*/) { - constexpr feedRate_t fr_xy = NOZZLE_PARK_XY_FEEDRATE, fr_z = NOZZLE_PARK_Z_FEEDRATE; + #if HAS_Z_AXIS + constexpr feedRate_t fr_z = NOZZLE_PARK_Z_FEEDRATE; - switch (z_action) { - case 1: // Go to Z-park height - do_blocking_move_to_z(park.z, fr_z); - break; + switch (z_action) { + case 1: // Go to Z-park height + do_blocking_move_to_z(park.z, fr_z); + break; - case 2: // Raise by Z-park height - do_blocking_move_to_z(_MIN(current_position.z + park.z, Z_MAX_POS), fr_z); - break; + case 2: // Raise by Z-park height + do_blocking_move_to_z(_MIN(current_position.z + park.z, Z_MAX_POS), fr_z); + break; - default: // Raise by NOZZLE_PARK_Z_RAISE_MIN, use park.z as a minimum height - do_blocking_move_to_z(park_mode_0_height(park.z), fr_z); - break; - } + default: // Raise by NOZZLE_PARK_Z_RAISE_MIN, use park.z as a minimum height + do_blocking_move_to_z(park_mode_0_height(park.z), fr_z); + break; + } + #endif // HAS_Z_AXIS #ifndef NOZZLE_PARK_MOVE #define NOZZLE_PARK_MOVE 0 #endif + constexpr feedRate_t fr_xy = NOZZLE_PARK_XY_FEEDRATE; switch (NOZZLE_PARK_MOVE) { case 0: do_blocking_move_to_xy(park, fr_xy); break; case 1: do_blocking_move_to_x(park.x, fr_xy); break; diff --git a/Marlin/src/module/polargraph.cpp b/Marlin/src/module/polargraph.cpp index d55d36a6d6545..ef6a4c0db463f 100644 --- a/Marlin/src/module/polargraph.cpp +++ b/Marlin/src/module/polargraph.cpp @@ -43,7 +43,7 @@ xy_pos_t draw_area_min, draw_area_max; void inverse_kinematics(const xyz_pos_t &raw) { const float x1 = raw.x - draw_area_min.x, x2 = draw_area_max.x - raw.x, y = raw.y - draw_area_max.y; - delta.set(HYPOT(x1, y), HYPOT(x2, y), raw.z); + delta.set(HYPOT(x1, y), HYPOT(x2, y) OPTARG(HAS_Z_AXIS, raw.z)); } #endif // POLARGRAPH