|
@@ -592,10 +592,14 @@ void restore_feedrate_and_scaling() {
|
592
|
592
|
*/
|
593
|
593
|
void apply_motion_limits(xyz_pos_t &target) {
|
594
|
594
|
|
595
|
|
- if (!soft_endstops_enabled || !all_axes_homed()) return;
|
|
595
|
+ if (!soft_endstops_enabled) return;
|
596
|
596
|
|
597
|
597
|
#if IS_KINEMATIC
|
598
|
598
|
|
|
599
|
+ #if ENABLED(DELTA)
|
|
600
|
+ if (!all_axes_homed()) return;
|
|
601
|
+ #endif
|
|
602
|
+
|
599
|
603
|
#if HAS_HOTEND_OFFSET && ENABLED(DELTA)
|
600
|
604
|
// The effector center position will be the target minus the hotend offset.
|
601
|
605
|
const xy_pos_t offs = hotend_offset[active_extruder];
|
|
@@ -604,33 +608,46 @@ void restore_feedrate_and_scaling() {
|
604
|
608
|
constexpr xy_pos_t offs{0};
|
605
|
609
|
#endif
|
606
|
610
|
|
607
|
|
- const float dist_2 = HYPOT2(target.x - offs.x, target.y - offs.y);
|
608
|
|
- if (dist_2 > delta_max_radius_2)
|
609
|
|
- target *= delta_max_radius / SQRT(dist_2); // 200 / 300 = 0.66
|
|
611
|
+ if (true
|
|
612
|
+ #if IS_SCARA
|
|
613
|
+ && TEST(axis_homed, X_AXIS) && TEST(axis_homed, Y_AXIS)
|
|
614
|
+ #endif
|
|
615
|
+ ) {
|
|
616
|
+ const float dist_2 = HYPOT2(target.x - offs.x, target.y - offs.y);
|
|
617
|
+ if (dist_2 > delta_max_radius_2)
|
|
618
|
+ target *= delta_max_radius / SQRT(dist_2); // 200 / 300 = 0.66
|
|
619
|
+ }
|
610
|
620
|
|
611
|
621
|
#else
|
612
|
622
|
|
613
|
|
- #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_X)
|
614
|
|
- NOLESS(target.x, soft_endstop.min.x);
|
615
|
|
- #endif
|
616
|
|
- #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_X)
|
617
|
|
- NOMORE(target.x, soft_endstop.max.x);
|
618
|
|
- #endif
|
619
|
|
- #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_Y)
|
620
|
|
- NOLESS(target.y, soft_endstop.min.y);
|
621
|
|
- #endif
|
622
|
|
- #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_Y)
|
623
|
|
- NOMORE(target.y, soft_endstop.max.y);
|
624
|
|
- #endif
|
|
623
|
+ if (TEST(axis_homed, X_AXIS)) {
|
|
624
|
+ #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_X)
|
|
625
|
+ NOLESS(target.x, soft_endstop.min.x);
|
|
626
|
+ #endif
|
|
627
|
+ #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_X)
|
|
628
|
+ NOMORE(target.x, soft_endstop.max.x);
|
|
629
|
+ #endif
|
|
630
|
+ }
|
625
|
631
|
|
626
|
|
- #endif
|
|
632
|
+ if (TEST(axis_homed, Y_AXIS)) {
|
|
633
|
+ #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_Y)
|
|
634
|
+ NOLESS(target.y, soft_endstop.min.y);
|
|
635
|
+ #endif
|
|
636
|
+ #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_Y)
|
|
637
|
+ NOMORE(target.y, soft_endstop.max.y);
|
|
638
|
+ #endif
|
|
639
|
+ }
|
627
|
640
|
|
628
|
|
- #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
|
629
|
|
- NOLESS(target.z, soft_endstop.min.z);
|
630
|
|
- #endif
|
631
|
|
- #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_Z)
|
632
|
|
- NOMORE(target.z, soft_endstop.max.z);
|
633
|
641
|
#endif
|
|
642
|
+
|
|
643
|
+ if (TEST(axis_homed, Z_AXIS)) {
|
|
644
|
+ #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_Z)
|
|
645
|
+ NOLESS(target.z, soft_endstop.min.z);
|
|
646
|
+ #endif
|
|
647
|
+ #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_Z)
|
|
648
|
+ NOMORE(target.z, soft_endstop.max.z);
|
|
649
|
+ #endif
|
|
650
|
+ }
|
634
|
651
|
}
|
635
|
652
|
|
636
|
653
|
#endif // HAS_SOFTWARE_ENDSTOPS
|