diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index b2f909de08..e86c88978a 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1534,14 +1534,15 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i #endif #if ENABLED(LCD_BED_TRAMMING) - #ifndef BED_TRAMMING_INSET_LFRB - #error "LCD_BED_TRAMMING requires BED_TRAMMING_INSET_LFRB values." - #elif ENABLED(BED_TRAMMING_USE_PROBE) + #if ENABLED(BED_TRAMMING_USE_PROBE) #if !HAS_BED_PROBE #error "BED_TRAMMING_USE_PROBE requires a real probe." #elif ENABLED(SENSORLESS_PROBING) #error "BED_TRAMMING_USE_PROBE is incompatible with SENSORLESS_PROBING." #endif + #else + #ifndef BED_TRAMMING_INSET_LFRB + #error "LCD_BED_TRAMMING requires BED_TRAMMING_INSET_LFRB values." #endif #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 4c5f91e032..f3515bc752 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -199,7 +199,7 @@ typedef struct { } select_t; select_t select_page{0}, select_print{0}; -#if ENABLED(LCD_BED_TRAMMING) +#if ENABLED(LCD_BED_TRAMMING) && DISABLED(BED_TRAMMING_USE_PROBE) constexpr float bed_tramming_inset_lfbr[] = BED_TRAMMING_INSET_LFRB; #endif @@ -2388,6 +2388,11 @@ void setFlow() { setPIntOnClick(FLOW_EDIT_MIN, FLOW_EDIT_MAX, []{ planner.refres #if ENABLED(LCD_BED_TRAMMING) void tramXY(const uint8_t point, float &x, float &y) { + #if ENABLED(BED_TRAMMING_USE_PROBE) + float bed_tramming_inset_lfbr[] = {X_MIN_BED + probe.min_x(), Y_MIN_BED + probe.min_y(), + X_MAX_BED - probe.max_x(), Y_MAX_BED - probe.max_y() }; + #endif + switch (point) { case 0: LCD_MESSAGE(MSG_TRAM_FL); diff --git a/Marlin/src/lcd/extui/dgus_e3s1pro/DGUSReturnKeyCodeHandler.cpp b/Marlin/src/lcd/extui/dgus_e3s1pro/DGUSReturnKeyCodeHandler.cpp index f6d2e2bb89..92a7ad2928 100644 --- a/Marlin/src/lcd/extui/dgus_e3s1pro/DGUSReturnKeyCodeHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_e3s1pro/DGUSReturnKeyCodeHandler.cpp @@ -395,7 +395,12 @@ void DGUSReturnKeyCodeHandler::Command_SettingsMenu(DGUS_VP &vp, void *data) { } static void _gotoTrammingPoint(unsigned char point) { - constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB; + #if ENABLED(BED_TRAMMING_USE_PROBE) + float lfrb[4] = {X_MIN_BED + probe.min_x(), Y_MIN_BED + probe.min_y(), + X_MAX_BED - probe.max_x(), Y_MAX_BED - probe.max_y() }; + #else + constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB; + #endif float x, y; switch (point) { diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp index b8ef8bcacc..b9cba29fd3 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp @@ -38,6 +38,9 @@ #if ENABLED(ADVANCED_PAUSE_FEATURE) #include "../../../feature/pause.h" #endif +#if ENABLED(BED_TRAMMING_USE_PROBE) + #include "../../../module/probe.h" +#endif #if ENABLED(POWER_LOSS_RECOVERY) #include "../../../feature/powerloss.h" #endif @@ -464,7 +467,14 @@ void DGUSRxHandler::moveToPoint(DGUS_VP &vp, void *data_ptr) { } const uint8_t point = ((uint8_t*)data_ptr)[1]; - constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB; + + #if ENABLED(BED_TRAMMING_USE_PROBE) + float lfrb[4] = {X_MIN_BED + probe.min_x(), Y_MIN_BED + probe.min_y(), + X_MAX_BED - probe.max_x(), Y_MAX_BED - probe.max_y() }; + #else + constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB; + #endif + float x, y; switch (point) { diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index ec9b05318c..a2cb354ac7 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -933,6 +933,7 @@ namespace ExtUI { #if HAS_BED_PROBE float getProbeOffset_mm(const axis_t axis) { return probe.offset.pos[axis]; } void setProbeOffset_mm(const_float_t val, const axis_t axis) { probe.offset.pos[axis] = val; } + float[4] getBedProbeLimits() {return {probe.min_x(), probe.min_y(), probe.max_x(), probe.max_y()};} #endif #if ENABLED(BACKLASH_GCODE) diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index 8202f7be8d..d71a92879c 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -367,6 +367,7 @@ namespace ExtUI { #if HAS_BED_PROBE float getProbeOffset_mm(const axis_t); void setProbeOffset_mm(const_float_t, const axis_t); + float[4] getBedProbeLimits(); #endif // Backlash Control diff --git a/Marlin/src/lcd/menu/menu_bed_tramming.cpp b/Marlin/src/lcd/menu/menu_bed_tramming.cpp index b6b3e72124..34e5142811 100644 --- a/Marlin/src/lcd/menu/menu_bed_tramming.cpp +++ b/Marlin/src/lcd/menu/menu_bed_tramming.cpp @@ -94,16 +94,22 @@ static_assert(COUNT(lco) == 4 || lcodiff == 1 || lcodiff == 3, "The first two BE constexpr int nr_edge_points = tramming_3_points ? 3 : 4; constexpr int available_points = nr_edge_points + ENABLED(BED_TRAMMING_INCLUDE_CENTER); constexpr int center_index = TERN(BED_TRAMMING_INCLUDE_CENTER, available_points - 1, -1); -constexpr float inset_lfrb[4] = BED_TRAMMING_INSET_LFRB; -constexpr xy_pos_t lf { (X_MIN_BED) + inset_lfrb[0], (Y_MIN_BED) + inset_lfrb[1] }, +#if DISABLED(BED_TRAMMING_USE_PROBE) + constexpr float inset_lfrb[4] = BED_TRAMMING_INSET_LFRB; + constexpr xy_pos_t lf { (X_MIN_BED) + inset_lfrb[0], (Y_MIN_BED) + inset_lfrb[1] }, rb { (X_MAX_BED) - inset_lfrb[2], (Y_MAX_BED) - inset_lfrb[3] }; - +#endif static int8_t bed_corner; /** * Move to the next corner coordinates */ static void _lcd_goto_next_corner() { + #if ENABLED(BED_TRAMMING_USE_PROBE) + xy_pos_t lf = {X_MIN_BED + probe.min_x(), Y_MIN_BED + probe.min_y() }, + rb = {X_MAX_BED - probe.max_x(), Y_MAX_BED - probe.max_y() }; + #endif + xy_pos_t corner_point = lf; // Left front if (tramming_3_points) { @@ -165,11 +171,6 @@ static void _lcd_goto_next_corner() { #if ENABLED(BED_TRAMMING_USE_PROBE) - #define VALIDATE_POINT(X, Y, STR) static_assert(Probe::build_time::can_reach((X), (Y)), \ - "BED_TRAMMING_INSET_LFRB " STR " inset is not reachable with the default NOZZLE_TO_PROBE offset and PROBING_MARGIN.") - VALIDATE_POINT(lf.x, Y_CENTER, "left"); VALIDATE_POINT(X_CENTER, lf.y, "front"); - VALIDATE_POINT(rb.x, Y_CENTER, "right"); VALIDATE_POINT(X_CENTER, rb.y, "back"); - #ifndef PAGE_CONTAINS #define PAGE_CONTAINS(...) true #endif