diff options
author | David Crocker <dcrocker@eschertech.com> | 2017-08-26 23:31:47 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2017-08-26 23:32:00 +0300 |
commit | 7df2fe5e9a3387dbe00947dffe375b6443079b94 (patch) | |
tree | f033bbcaf41220ca93775756f011128b03b87c4c /src/Movement | |
parent | 2e967359f0b93c31437fdc4b7e93187a4ebbf050 (diff) |
Version 1.19.1v1.19.1
M208 XY limits are now applied to SCARA printers
Minimum limits are applied to M92, M291, M203 and M566 parameters
Diffstat (limited to 'src/Movement')
-rw-r--r-- | src/Movement/Kinematics/ScaraKinematics.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/Movement/Kinematics/ScaraKinematics.cpp b/src/Movement/Kinematics/ScaraKinematics.cpp index fe956355..8fd1cad2 100644 --- a/src/Movement/Kinematics/ScaraKinematics.cpp +++ b/src/Movement/Kinematics/ScaraKinematics.cpp @@ -180,7 +180,11 @@ bool ScaraKinematics::IsReachable(float x, float y) const // TODO take account of arm angle limits bool ScaraKinematics::LimitPosition(float coords[], size_t numVisibleAxes, AxesBitmap axesHomed) const { - bool limited = false; + // First limit all axes according to M208 + const bool m208Limited = Kinematics::LimitPosition(coords, numVisibleAxes, axesHomed); + + // Now check that the XY position is within radius limits, in case the M208 limits are too generous + bool radiusLimited = false; float x = coords[X_AXIS] + xOffset; float y = coords[Y_AXIS] + yOffset; const float r2 = fsquare(x) + fsquare(y); @@ -198,29 +202,23 @@ bool ScaraKinematics::LimitPosition(float coords[], size_t numVisibleAxes, AxesB x *= minRadius/r; y *= minRadius/r; } - limited = true; + radiusLimited = true; } else if (r2 > maxRadiusSquared) { const float r = sqrtf(r2); x *= maxRadius/r; y *= maxRadius/r; - limited = true; + radiusLimited = true; } - if (limited) + if (radiusLimited) { coords[X_AXIS] = x - xOffset; coords[Y_AXIS] = y - yOffset; } - // Limit Z and any additional axes according to the M208 limits - if (LimitPositionFromAxis(coords, Z_AXIS, numVisibleAxes, axesHomed)) - { - limited = true; - } - - return limited; + return m208Limited || radiusLimited; } // Return the initial Cartesian coordinates we assume after switching to this kinematics |