Add EXTRAPOLATE_BEYOND_GRID option to bilinear leveling
This commit is contained in:
		@@ -10592,12 +10592,25 @@ void ok_to_send() {
 | 
			
		||||
    const float x = RAW_X_POSITION(logical[X_AXIS]) - bilinear_start[X_AXIS],
 | 
			
		||||
                y = RAW_Y_POSITION(logical[Y_AXIS]) - bilinear_start[Y_AXIS];
 | 
			
		||||
 | 
			
		||||
    #if ENABLED(EXTRAPOLATE_BEYOND_GRID)
 | 
			
		||||
      // Keep using the last grid box
 | 
			
		||||
      #define FAR_EDGE_OR_BOX 2
 | 
			
		||||
    #else
 | 
			
		||||
      // Just use the grid far edge
 | 
			
		||||
      #define FAR_EDGE_OR_BOX 1
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    if (last_x != x) {
 | 
			
		||||
      last_x = x;
 | 
			
		||||
      ratio_x = x * ABL_BG_FACTOR(X_AXIS);
 | 
			
		||||
      const float gx = constrain(floor(ratio_x), 0, ABL_BG_POINTS_X - 1);
 | 
			
		||||
      const float gx = constrain(floor(ratio_x), 0, ABL_BG_POINTS_X - FAR_EDGE_OR_BOX);
 | 
			
		||||
      ratio_x -= gx;      // Subtract whole to get the ratio within the grid box
 | 
			
		||||
      NOLESS(ratio_x, 0); // Never < 0.0. (> 1.0 is ok when nextx==gridx.)
 | 
			
		||||
 | 
			
		||||
      #if DISABLED(EXTRAPOLATE_BEYOND_GRID)
 | 
			
		||||
        // Beyond the grid maintain height at grid edges
 | 
			
		||||
        NOLESS(ratio_x, 0); // Never < 0.0. (> 1.0 is ok when nextx==gridx.)
 | 
			
		||||
      #endif
 | 
			
		||||
 | 
			
		||||
      gridx = gx;
 | 
			
		||||
      nextx = min(gridx + 1, ABL_BG_POINTS_X - 1);
 | 
			
		||||
    }
 | 
			
		||||
@@ -10607,9 +10620,14 @@ void ok_to_send() {
 | 
			
		||||
      if (last_y != y) {
 | 
			
		||||
        last_y = y;
 | 
			
		||||
        ratio_y = y * ABL_BG_FACTOR(Y_AXIS);
 | 
			
		||||
        const float gy = constrain(floor(ratio_y), 0, ABL_BG_POINTS_Y - 1);
 | 
			
		||||
        const float gy = constrain(floor(ratio_y), 0, ABL_BG_POINTS_Y - FAR_EDGE_OR_BOX);
 | 
			
		||||
        ratio_y -= gy;
 | 
			
		||||
        NOLESS(ratio_y, 0);
 | 
			
		||||
 | 
			
		||||
        #if DISABLED(EXTRAPOLATE_BEYOND_GRID)
 | 
			
		||||
          // Beyond the grid maintain height at grid edges
 | 
			
		||||
          NOLESS(ratio_y, 0); // Never < 0.0. (> 1.0 is ok when nexty==gridy.)
 | 
			
		||||
        #endif
 | 
			
		||||
 | 
			
		||||
        gridy = gy;
 | 
			
		||||
        nexty = min(gridy + 1, ABL_BG_POINTS_Y - 1);
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user