Make USE_DELTA_IK_INTERPOLATION compatible with ABL
This commit is contained in:
		@@ -456,6 +456,18 @@ static uint8_t target_extruder;
 | 
				
			|||||||
  #define XY_PROBE_FEEDRATE_MM_S PLANNER_XY_FEEDRATE()
 | 
					  #define XY_PROBE_FEEDRATE_MM_S PLANNER_XY_FEEDRATE()
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
 | 
				
			||||||
 | 
					  #define ADJUST_DELTA(V) \
 | 
				
			||||||
 | 
					    if (planner.abl_enabled) { \
 | 
				
			||||||
 | 
					      const float zadj = bilinear_z_offset(V); \
 | 
				
			||||||
 | 
					      delta[A_AXIS] += zadj; \
 | 
				
			||||||
 | 
					      delta[B_AXIS] += zadj; \
 | 
				
			||||||
 | 
					      delta[C_AXIS] += zadj; \
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#elif IS_KINEMATIC
 | 
				
			||||||
 | 
					  #define ADJUST_DELTA(V) NOOP
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if ENABLED(Z_DUAL_ENDSTOPS)
 | 
					#if ENABLED(Z_DUAL_ENDSTOPS)
 | 
				
			||||||
  float z_endstop_adj = 0;
 | 
					  float z_endstop_adj = 0;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -8758,7 +8770,10 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) {
 | 
				
			|||||||
      #define DELTA_NEXT(ADDEND) LOOP_XYZ(i) DELTA_VAR[i] += ADDEND;
 | 
					      #define DELTA_NEXT(ADDEND) LOOP_XYZ(i) DELTA_VAR[i] += ADDEND;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Get the starting delta if interpolation is possible
 | 
					      // Get the starting delta if interpolation is possible
 | 
				
			||||||
      if (segments >= 2) DELTA_IK();
 | 
					      if (segments >= 2) {
 | 
				
			||||||
 | 
					        DELTA_IK();
 | 
				
			||||||
 | 
					        ADJUST_DELTA(DELTA_VAR); // Adjust Z if bed leveling is enabled
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Loop using decrement
 | 
					      // Loop using decrement
 | 
				
			||||||
      for (uint16_t s = segments + 1; --s;) {
 | 
					      for (uint16_t s = segments + 1; --s;) {
 | 
				
			||||||
@@ -8775,6 +8790,7 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
          // Get the exact delta for the move after this
 | 
					          // Get the exact delta for the move after this
 | 
				
			||||||
          DELTA_IK();
 | 
					          DELTA_IK();
 | 
				
			||||||
 | 
					          ADJUST_DELTA(DELTA_VAR); // Adjust Z if bed leveling is enabled
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          // Move to the interpolated delta position first
 | 
					          // Move to the interpolated delta position first
 | 
				
			||||||
          planner.buffer_line(
 | 
					          planner.buffer_line(
 | 
				
			||||||
@@ -8795,6 +8811,7 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) {
 | 
				
			|||||||
          DELTA_NEXT(segment_distance[i]);
 | 
					          DELTA_NEXT(segment_distance[i]);
 | 
				
			||||||
          DELTA_VAR[E_AXIS] += segment_distance[E_AXIS];
 | 
					          DELTA_VAR[E_AXIS] += segment_distance[E_AXIS];
 | 
				
			||||||
          DELTA_IK();
 | 
					          DELTA_IK();
 | 
				
			||||||
 | 
					          ADJUST_DELTA(DELTA_VAR); // Adjust Z if bed leveling is enabled
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Move to the non-interpolated position
 | 
					        // Move to the non-interpolated position
 | 
				
			||||||
@@ -8808,7 +8825,9 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) {
 | 
				
			|||||||
      // For non-interpolated delta calculate every segment
 | 
					      // For non-interpolated delta calculate every segment
 | 
				
			||||||
      for (uint16_t s = segments + 1; --s;) {
 | 
					      for (uint16_t s = segments + 1; --s;) {
 | 
				
			||||||
        DELTA_NEXT(segment_distance[i]);
 | 
					        DELTA_NEXT(segment_distance[i]);
 | 
				
			||||||
        planner.buffer_line_kinematic(DELTA_VAR, _feedrate_mm_s, active_extruder);
 | 
					        DELTA_IK();
 | 
				
			||||||
 | 
					        ADJUST_DELTA(DELTA_VAR);
 | 
				
			||||||
 | 
					        planner.buffer_line(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], DELTA_VAR[E_AXIS], _feedrate_mm_s, active_extruder);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #endif
 | 
					    #endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -518,8 +518,8 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
#if HAS_ABL
 | 
					#if HAS_ABL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  #if ENABLED(USE_RAW_KINEMATICS) || ENABLED(USE_DELTA_IK_INTERPOLATION)
 | 
					  #if ENABLED(USE_RAW_KINEMATICS)
 | 
				
			||||||
    #error "USE_RAW_KINEMATICS and USE_DELTA_IK_INTERPOLATION are not compatible with AUTO_BED_LEVELING"
 | 
					    #error "USE_RAW_KINEMATICS is not compatible with AUTO_BED_LEVELING"
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user