|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|