diff options
Diffstat (limited to 'src/Movement/Kinematics/Kinematics.cpp')
-rw-r--r-- | src/Movement/Kinematics/Kinematics.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Movement/Kinematics/Kinematics.cpp b/src/Movement/Kinematics/Kinematics.cpp index 058aef71..dd55b2ed 100644 --- a/src/Movement/Kinematics/Kinematics.cpp +++ b/src/Movement/Kinematics/Kinematics.cpp @@ -11,6 +11,7 @@ #include "CoreXYKinematics.h" #include "CoreXZKinematics.h" #include "ScaraKinematics.h" +#include "CoreXYUKinematics.h" #include "RepRap.h" #include "Platform.h" @@ -45,9 +46,10 @@ bool Kinematics::IsReachable(float x, float y) const // Limit the Cartesian position that the user wants to move to // This default implementation just applies the rectangular limits set up by M208 to those axes that have been homed. -void Kinematics::LimitPosition(float coords[], size_t numVisibleAxes, uint16_t axesHomed) const +bool Kinematics::LimitPosition(float coords[], size_t numVisibleAxes, uint16_t axesHomed) const { const Platform& platform = reprap.GetPlatform(); + bool limited = false; for (size_t axis = 0; axis < numVisibleAxes; axis++) { if ((axesHomed & (1 << axis)) != 0) @@ -56,13 +58,16 @@ void Kinematics::LimitPosition(float coords[], size_t numVisibleAxes, uint16_t a if (f < platform.AxisMinimum(axis)) { f = platform.AxisMinimum(axis); + limited = true; } else if (f > platform.AxisMaximum(axis)) { f = platform.AxisMaximum(axis); + limited = true; } } } + return limited; } // Return the initial Cartesian coordinates we assume after switching to this kinematics @@ -91,6 +96,8 @@ void Kinematics::GetAssumedInitialPosition(size_t numAxes, float positions[]) co return new CoreXZKinematics(); case KinematicsType::scara: return new ScaraKinematics(); + case KinematicsType::coreXYU: + return new CoreXYUKinematics(); } } |