|
@@ -2501,16 +2501,26 @@ void unknown_command_error() {
|
2501
|
2501
|
|
2502
|
2502
|
bool position_is_reachable(float target[XYZ]) {
|
2503
|
2503
|
float dx = RAW_X_POSITION(target[X_AXIS]),
|
2504
|
|
- dy = RAW_Y_POSITION(target[Y_AXIS]);
|
|
2504
|
+ dy = RAW_Y_POSITION(target[Y_AXIS]),
|
|
2505
|
+ dz = RAW_Z_POSITION(target[Z_AXIS]);
|
2505
|
2506
|
|
2506
|
|
- #if ENABLED(DELTA)
|
2507
|
|
- return HYPOT2(dx, dy) <= sq(DELTA_PRINTABLE_RADIUS);
|
|
2507
|
+ bool good;
|
|
2508
|
+ #if IS_SCARA
|
|
2509
|
+ #if MIDDLE_DEAD_ZONE_R > 0
|
|
2510
|
+ const float R2 = HYPOT2(dx - SCARA_OFFSET_X, dy - SCARA_OFFSET_Y);
|
|
2511
|
+ good = (R2 >= sq(float(MIDDLE_DEAD_ZONE_R))) && (R2 <= sq(L1 + L2));
|
|
2512
|
+ #else
|
|
2513
|
+ good = HYPOT2(dx - SCARA_OFFSET_X, dy - SCARA_OFFSET_Y) <= sq(L1 + L2);
|
|
2514
|
+ #endif
|
|
2515
|
+ #elif ENABLED(DELTA)
|
|
2516
|
+ good = HYPOT2(dx, dy) <= sq(DELTA_PRINTABLE_RADIUS);
|
2508
|
2517
|
#else
|
2509
|
|
- float dz = RAW_Z_POSITION(target[Z_AXIS]);
|
2510
|
|
- return dx >= X_MIN_POS - 0.0001 && dx <= X_MAX_POS + 0.0001
|
2511
|
|
- && dy >= Y_MIN_POS - 0.0001 && dy <= Y_MAX_POS + 0.0001
|
2512
|
|
- && dz >= Z_MIN_POS - 0.0001 && dz <= Z_MAX_POS + 0.0001;
|
|
2518
|
+ good = true;
|
2513
|
2519
|
#endif
|
|
2520
|
+
|
|
2521
|
+ return good && dx >= X_MIN_POS - 0.0001 && dx <= X_MAX_POS + 0.0001
|
|
2522
|
+ && dy >= Y_MIN_POS - 0.0001 && dy <= Y_MAX_POS + 0.0001
|
|
2523
|
+ && dz >= Z_MIN_POS - 0.0001 && dz <= Z_MAX_POS + 0.0001;
|
2514
|
2524
|
}
|
2515
|
2525
|
|
2516
|
2526
|
/**************************************************
|