diff --git a/Marlin/Conditionals_post.h b/Marlin/Conditionals_post.h index 5280da81a..b303b65aa 100644 --- a/Marlin/Conditionals_post.h +++ b/Marlin/Conditionals_post.h @@ -731,15 +731,12 @@ * Set granular options based on the specific type of leveling */ - #if ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(DELTA) - #define UBL_DELTA - #endif - + #define UBL_DELTA (ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(DELTA)) #define ABL_PLANAR (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_3POINT)) #define ABL_GRID (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR)) #define HAS_ABL (ABL_PLANAR || ABL_GRID || ENABLED(AUTO_BED_LEVELING_UBL)) #define HAS_LEVELING (HAS_ABL || ENABLED(MESH_BED_LEVELING)) - #define PLANNER_LEVELING (ABL_PLANAR || ABL_GRID || ENABLED(MESH_BED_LEVELING) || ENABLED(UBL_DELTA)) + #define PLANNER_LEVELING (ABL_PLANAR || ABL_GRID || ENABLED(MESH_BED_LEVELING) || UBL_DELTA) #define HAS_PROBING_PROCEDURE (HAS_ABL || ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)) #if HAS_PROBING_PROCEDURE #define PROBE_BED_WIDTH abs(RIGHT_PROBE_BED_POSITION - (LEFT_PROBE_BED_POSITION)) @@ -823,8 +820,7 @@ /** * DELTA_SEGMENT_MIN_LENGTH for UBL_DELTA */ - - #if ENABLED(UBL_DELTA) + #if UBL_DELTA #ifndef DELTA_SEGMENT_MIN_LENGTH #if IS_SCARA #define DELTA_SEGMENT_MIN_LENGTH 0.25 // SCARA minimum segment size is 0.25mm diff --git a/Marlin/G26_Mesh_Validation_Tool.cpp b/Marlin/G26_Mesh_Validation_Tool.cpp index 4f231c2ae..0cf414735 100644 --- a/Marlin/G26_Mesh_Validation_Tool.cpp +++ b/Marlin/G26_Mesh_Validation_Tool.cpp @@ -278,8 +278,7 @@ // If this mesh location is outside the printable_radius, skip it. - if ( ! position_is_reachable_raw_xy( circle_x, circle_y )) - continue; + if (!position_is_reachable_raw_xy(circle_x, circle_y)) continue; xi = location.x_index; // Just to shrink the next few lines and make them easier to understand yi = location.y_index; @@ -329,9 +328,7 @@ ye = circle_y + sin_table[tmp_div_30 + 1]; #if IS_KINEMATIC // Check to make sure this segment is entirely on the bed, skip if not. - if (( ! position_is_reachable_raw_xy( x , y )) || - ( ! position_is_reachable_raw_xy( xe, ye ))) - continue; + if (!position_is_reachable_raw_xy(x, y) || !position_is_reachable_raw_xy(xe, ye)) continue; #else // not, we need to skip x = constrain(x, X_MIN_POS + 1, X_MAX_POS - 1); // This keeps us from bumping the endstops y = constrain(y, Y_MIN_POS + 1, Y_MAX_POS - 1); @@ -459,8 +456,7 @@ sy = ey = constrain(pgm_read_float(&ubl.mesh_index_to_ypos[j]), Y_MIN_POS + 1, Y_MAX_POS - 1); ex = constrain(ex, X_MIN_POS + 1, X_MAX_POS - 1); - if (( position_is_reachable_raw_xy( sx, sy )) && - ( position_is_reachable_raw_xy( ex, ey ))) { + if (position_is_reachable_raw_xy(sx, sy) && position_is_reachable_raw_xy(ex, ey)) { if (ubl.g26_debug_flag) { SERIAL_ECHOPAIR(" Connecting with horizontal line (sx=", sx); @@ -494,8 +490,7 @@ sy = constrain(sy, Y_MIN_POS + 1, Y_MAX_POS - 1); ey = constrain(ey, Y_MIN_POS + 1, Y_MAX_POS - 1); - if (( position_is_reachable_raw_xy( sx, sy )) && - ( position_is_reachable_raw_xy( ex, ey ))) { + if (position_is_reachable_raw_xy(sx, sy) && position_is_reachable_raw_xy(ex, ey)) { if (ubl.g26_debug_flag) { SERIAL_ECHOPAIR(" Connecting with vertical line (sx=", sx); diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 64ad8b4de..05ce02c95 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -2427,9 +2427,12 @@ static void clean_up_after_endstop_or_probe_move() { #elif ENABLED(AUTO_BED_LEVELING_UBL) - #if ENABLED(UBL_DELTA) - if (( ubl.state.active ) && ( ! enable )) { // leveling from on to off - planner.unapply_leveling(current_position); + #if PLANNER_LEVELING + if (ubl.state.active != enable) { + if (!enable) // leveling from on to off + planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]); + else + planner.unapply_leveling(current_position); } #endif @@ -11104,7 +11107,7 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { #endif // AUTO_BED_LEVELING_BILINEAR -#if IS_KINEMATIC && DISABLED(UBL_DELTA) +#if IS_KINEMATIC && !UBL_DELTA /** * Prepare a linear move in a DELTA or SCARA setup. @@ -11124,7 +11127,7 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { } // Fail if attempting move outside printable radius - if ( ! position_is_reachable_xy( ltarget[X_AXIS], ltarget[Y_AXIS] )) return true; + if (!position_is_reachable_xy(ltarget[X_AXIS], ltarget[Y_AXIS])) return true; // Get the cartesian distances moved in XYZE float difference[XYZE]; @@ -11225,7 +11228,7 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { return false; } -#else // !IS_KINEMATIC +#else // !IS_KINEMATIC || UBL_DELTA /** * Prepare a linear move in a Cartesian setup. @@ -11263,7 +11266,7 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { return false; } -#endif // !IS_KINEMATIC +#endif // !IS_KINEMATIC || UBL_DELTA #if ENABLED(DUAL_X_CARRIAGE) @@ -11375,21 +11378,21 @@ void prepare_move_to_destination() { #endif - #if IS_KINEMATIC - #if ENABLED(UBL_DELTA) - if (ubl_prepare_linear_move_to(destination,feedrate_mm_s)) return; - #else - if (prepare_kinematic_move_to(destination)) return; - #endif - #else - #if ENABLED(DUAL_X_CARRIAGE) - if (prepare_move_to_destination_dualx()) return; - #elif ENABLED(UBL_DELTA) // will work for CARTESIAN too (smaller segments follow mesh more closely) - if (ubl_prepare_linear_move_to(destination,feedrate_mm_s)) return; + if ( + #if IS_KINEMATIC + #if UBL_DELTA + ubl_prepare_linear_move_to(destination, feedrate_mm_s) + #else + prepare_kinematic_move_to(destination) + #endif + #elif ENABLED(DUAL_X_CARRIAGE) + prepare_move_to_destination_dualx() + #elif UBL_DELTA // will work for CARTESIAN too (smaller segments follow mesh more closely) + ubl_prepare_linear_move_to(destination, feedrate_mm_s) #else - if (prepare_move_to_destination_cartesian()) return; + prepare_move_to_destination_cartesian() #endif - #endif + ) return; set_current_to_destination(); } diff --git a/Marlin/SanityCheck.h b/Marlin/SanityCheck.h index 006bf6829..3aa307298 100644 --- a/Marlin/SanityCheck.h +++ b/Marlin/SanityCheck.h @@ -248,11 +248,9 @@ #if ENABLED(DELTA) #if DISABLED(USE_XMAX_PLUG) && DISABLED(USE_YMAX_PLUG) && DISABLED(USE_ZMAX_PLUG) #error "You probably want to use Max Endstops for DELTA!" - #endif - #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) && DISABLED(UBL_DELTA) - #error "ENABLE_LEVELING_FADE_HEIGHT for DELTA requires UBL_DELTA and AUTO_BED_LEVELING_UBL." - #endif - #if ABL_GRID + #elif ENABLED(ENABLE_LEVELING_FADE_HEIGHT) && DISABLED(AUTO_BED_LEVELING_BILINEAR) && !UBL_DELTA + #error "ENABLE_LEVELING_FADE_HEIGHT on DELTA requires AUTO_BED_LEVELING_BILINEAR or AUTO_BED_LEVELING_UBL." + #elif ABL_GRID #if (GRID_MAX_POINTS_X & 1) == 0 || (GRID_MAX_POINTS_Y & 1) == 0 #error "DELTA requires GRID_MAX_POINTS_X and GRID_MAX_POINTS_Y to be odd numbers." #elif GRID_MAX_POINTS_X < 3 @@ -431,20 +429,11 @@ static_assert(1 >= 0 * Unified Bed Leveling */ #if ENABLED(AUTO_BED_LEVELING_UBL) - #if IS_KINEMATIC - #if ENABLED(DELTA) - #if DISABLED(UBL_DELTA) - #error "AUTO_BED_LEVELING_UBL requires UBL_DELTA for DELTA printers." - #endif - #else // SCARA - #error "AUTO_BED_LEVELING_UBL not supported for SCARA printers." - #endif - #endif - #if DISABLED(NEWPANEL) + #if IS_SCARA + #error "AUTO_BED_LEVELING_UBL does not yet support SCARA printers." + #elif DISABLED(NEWPANEL) #error "AUTO_BED_LEVELING_UBL requires an LCD controller." #endif -#elif ENABLED(UBL_DELTA) - #error "UBL_DELTA requires AUTO_BED_LEVELING_UBL." #endif /** @@ -603,10 +592,8 @@ static_assert(1 >= 0 /** * Delta and SCARA have limited bed leveling options */ - #if IS_KINEMATIC - #if DISABLED(AUTO_BED_LEVELING_BILINEAR) && DISABLED(UBL_DELTA) - #error "Only AUTO_BED_LEVELING_BILINEAR or AUTO_BED_LEVELING_UBL with UBL_DELTA support DELTA and SCARA bed leveling." - #endif + #if IS_SCARA && DISABLED(AUTO_BED_LEVELING_BILINEAR) + #error "Only AUTO_BED_LEVELING_BILINEAR currently supports SCARA bed leveling." #endif /** diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index 8c641fc26..21a98a304 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -534,12 +534,12 @@ void Planner::check_axes_activity() { */ void Planner::apply_leveling(float &lx, float &ly, float &lz) { - #if ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(UBL_DELTA) // probably should also be enabled for UBL without UBL_DELTA + #if ENABLED(AUTO_BED_LEVELING_UBL) && UBL_DELTA // probably should also be enabled for UBL without UBL_DELTA if (!ubl.state.active) return; #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) // if z_fade_height enabled (nonzero) and raw_z above it, no leveling required if ((planner.z_fade_height) && (planner.z_fade_height <= RAW_Z_POSITION(lz))) return; - lz += ubl.state.z_offset + ( ubl.get_z_correction(lx,ly) * ubl.fade_scaling_factor_for_z(lz)); + lz += ubl.state.z_offset + ubl.get_z_correction(lx,ly) * ubl.fade_scaling_factor_for_z(lz); #else // no fade lz += ubl.state.z_offset + ubl.get_z_correction(lx,ly); #endif // FADE @@ -598,13 +598,13 @@ void Planner::check_axes_activity() { void Planner::unapply_leveling(float logical[XYZ]) { - #if ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(UBL_DELTA) + #if ENABLED(AUTO_BED_LEVELING_UBL) && UBL_DELTA - if ( ubl.state.active ) { + if (ubl.state.active) { - float z_leveled = RAW_Z_POSITION(logical[Z_AXIS]); - float z_ublmesh = ubl.get_z_correction(logical[X_AXIS],logical[Y_AXIS]); - float z_unlevel = z_leveled - ubl.state.z_offset - z_ublmesh; + const float z_leveled = RAW_Z_POSITION(logical[Z_AXIS]), + z_ublmesh = ubl.get_z_correction(logical[X_AXIS], logical[Y_AXIS]); + float z_unlevel = z_leveled - ubl.state.z_offset - z_ublmesh; #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) @@ -616,9 +616,9 @@ void Planner::check_axes_activity() { // so U(1-M/H)==L-O-M // so U==(L-O-M)/(1-M/H) for U