|
|
@ -2224,11 +2224,15 @@ static void clean_up_after_endstop_or_probe_move() { |
|
|
|
void set_bed_leveling_enabled(bool enable=true) { |
|
|
|
#if ENABLED(MESH_BED_LEVELING) |
|
|
|
|
|
|
|
if (!enable && mbl.active()) |
|
|
|
current_position[Z_AXIS] += |
|
|
|
mbl.get_z(RAW_CURRENT_POSITION(X_AXIS), RAW_CURRENT_POSITION(Y_AXIS)) - (MESH_HOME_SEARCH_Z); |
|
|
|
if (enable != mbl.active()) { |
|
|
|
|
|
|
|
mbl.set_active(enable && mbl.has_mesh()); // was set_has_mesh(). Is this not correct?
|
|
|
|
if (!enable) |
|
|
|
planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]); |
|
|
|
|
|
|
|
mbl.set_active(enable && mbl.has_mesh()); |
|
|
|
|
|
|
|
if (enable) planner.unapply_leveling(current_position); |
|
|
|
} |
|
|
|
|
|
|
|
#elif HAS_ABL |
|
|
|
|
|
|
@ -3162,8 +3166,10 @@ inline void gcode_G4() { |
|
|
|
#elif ENABLED(MESH_BED_LEVELING) |
|
|
|
SERIAL_ECHOPGM("Mesh Bed Leveling"); |
|
|
|
if (mbl.active()) { |
|
|
|
float lz = current_position[Z_AXIS]; |
|
|
|
planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], lz); |
|
|
|
SERIAL_ECHOLNPGM(" (enabled)"); |
|
|
|
SERIAL_ECHOPAIR("MBL Adjustment Z", mbl.get_z(RAW_CURRENT_POSITION(X_AXIS), RAW_CURRENT_POSITION(Y_AXIS))); |
|
|
|
SERIAL_ECHOPAIR("MBL Adjustment Z", lz); |
|
|
|
} |
|
|
|
SERIAL_EOL; |
|
|
|
#endif |
|
|
@ -3321,13 +3327,15 @@ inline void gcode_G28() { |
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE) |
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("MBL was active"); |
|
|
|
#endif |
|
|
|
// Save known Z position if already homed
|
|
|
|
// Use known Z position if already homed
|
|
|
|
if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) { |
|
|
|
set_bed_leveling_enabled(false); |
|
|
|
pre_home_z = current_position[Z_AXIS]; |
|
|
|
pre_home_z += mbl.get_z(RAW_CURRENT_POSITION(X_AXIS), RAW_CURRENT_POSITION(Y_AXIS)); |
|
|
|
} |
|
|
|
mbl.set_active(false); |
|
|
|
current_position[Z_AXIS] = pre_home_z; |
|
|
|
else { |
|
|
|
mbl.set_active(false); |
|
|
|
current_position[Z_AXIS] = pre_home_z; |
|
|
|
} |
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE) |
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("Set Z to pre_home_z", current_position); |
|
|
|
#endif |
|
|
@ -3703,8 +3711,8 @@ inline void gcode_G28() { |
|
|
|
|
|
|
|
case MeshReset: |
|
|
|
if (mbl.active()) { |
|
|
|
current_position[Z_AXIS] += |
|
|
|
mbl.get_z(RAW_CURRENT_POSITION(X_AXIS), RAW_CURRENT_POSITION(Y_AXIS)) - MESH_HOME_SEARCH_Z; |
|
|
|
current_position[Z_AXIS] -= MESH_HOME_SEARCH_Z; |
|
|
|
planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]); |
|
|
|
mbl.reset(); |
|
|
|
SYNC_PLAN_POSITION_KINEMATIC(); |
|
|
|
} |
|
|
@ -7640,9 +7648,12 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n |
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE) |
|
|
|
if (DEBUGGING(LEVELING)) SERIAL_ECHOPAIR("Z before MBL: ", current_position[Z_AXIS]); |
|
|
|
#endif |
|
|
|
float xpos = RAW_CURRENT_POSITION(X_AXIS), |
|
|
|
ypos = RAW_CURRENT_POSITION(Y_AXIS); |
|
|
|
current_position[Z_AXIS] += mbl.get_z(xpos + xydiff[X_AXIS], ypos + xydiff[Y_AXIS]) - mbl.get_z(xpos, ypos); |
|
|
|
float x2 = current_position[X_AXIS] + xydiff[X_AXIS], |
|
|
|
y2 = current_position[Y_AXIS] + xydiff[Y_AXIS], |
|
|
|
z1 = current_position[Z_AXIS], z2 = z1; |
|
|
|
planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], z1); |
|
|
|
planner.apply_leveling(x2, y2, z2); |
|
|
|
current_position[Z_AXIS] += z2 - z1; |
|
|
|
#if ENABLED(DEBUG_LEVELING_FEATURE) |
|
|
|
if (DEBUGGING(LEVELING)) |
|
|
|
SERIAL_ECHOLNPAIR(" after: ", current_position[Z_AXIS]); |
|
|
|