diff options
author | dc42 <dcrocker@eschertech.com> | 2021-02-16 17:57:56 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-16 17:57:56 +0300 |
commit | e86f9472eda30820714d3965bffbd36574e0e62d (patch) | |
tree | 0c6d0b451eecab8993e6bd5cbe1883bb827bf112 /src/GCodes/GCodes4.cpp | |
parent | 88f1a6d5defd8d0649238006cae797a3ca12c728 (diff) |
Wil mesh any two axes (#476)
* Open mesh compenastion for any-two axes
* Fix reboot loop on Duet 3
* Fix typos
Skip Z axis where not appropriate
Add version to HeightMapHeader
* Fix compiler errors
* Make compatible with pre 3.3-beta2 format again
Minor simplifications
* Revert changes to SBC interface (implement that later)
* Also prevent sending a none-XY grid to SBC for now
* Rename variables and no longer persist axis numbers
* Use common parent class for Kinematics with round bed
Co-authored-by: Manuel Coenen <manuel@duet3d.com>
Diffstat (limited to 'src/GCodes/GCodes4.cpp')
-rw-r--r-- | src/GCodes/GCodes4.cpp | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/src/GCodes/GCodes4.cpp b/src/GCodes/GCodes4.cpp index b89c809a..40be1a89 100644 --- a/src/GCodes/GCodes4.cpp +++ b/src/GCodes/GCodes4.cpp @@ -537,16 +537,24 @@ void GCodes::RunStateMachine(GCodeBuffer& gb, const StringRef& reply) noexcept // Move to the current probe point Move& move = reprap.GetMove(); const GridDefinition& grid = move.AccessHeightMap().GetGrid(); - const float x = grid.GetXCoordinate(gridXindex); - const float y = grid.GetYCoordinate(gridYindex); - if (grid.IsInRadius(x, y)) - { - if (move.IsAccessibleProbePoint(x, y)) + const float axis0Coord = grid.GetCoordinate0(gridAxis0index); + const float axis1Coord = grid.GetCoordinate1(gridAxis1index); + if (grid.IsInRadius(axis0Coord, axis1Coord)) + { + const size_t axis0Num = grid.GetNumber0(); + const size_t axis1Num = grid.GetNumber1(); + AxesBitmap axes; + axes.SetBit(axis0Num); + axes.SetBit(axis1Num); + float axesCoords[MaxAxes]; + axesCoords[axis0Num] = axis0Coord; + axesCoords[axis1Num] = axis1Coord; + if (move.IsAccessibleProbePoint(axesCoords, axes)) { SetMoveBufferDefaults(); const auto zp = platform.GetZProbeOrDefault(currentZProbeNumber); - moveBuffer.coords[X_AXIS] = x - zp->GetXOffset(); - moveBuffer.coords[Y_AXIS] = y - zp->GetYOffset(); + moveBuffer.coords[axis0Num] = axis0Coord - zp->GetOffset(axis0Num); + moveBuffer.coords[axis1Num] = axis1Coord - zp->GetOffset(axis1Num); moveBuffer.coords[Z_AXIS] = zp->GetStartingHeight(); moveBuffer.feedRate = zp->GetTravelSpeed(); NewMoveAvailable(1); @@ -559,7 +567,7 @@ void GCodes::RunStateMachine(GCodeBuffer& gb, const StringRef& reply) noexcept } else { - platform.MessageF(WarningMessage, "Skipping grid point (%.1f, %.1f) because Z probe cannot reach it\n", (double)x, (double)y); + platform.MessageF(WarningMessage, "Skipping grid point %c=%.1f, %c=%.1f because Z probe cannot reach it\n", grid.GetLetter0(), (double)axis0Coord, grid.GetLetter1(), (double)axis1Coord); gb.SetState(GCodeState::gridProbing6); } } @@ -719,7 +727,7 @@ void GCodes::RunStateMachine(GCodeBuffer& gb, const StringRef& reply) noexcept if (acceptReading) { - reprap.GetMove().AccessHeightMap().SetGridHeight(gridXindex, gridYindex, g30zHeightError); + reprap.GetMove().AccessHeightMap().SetGridHeight(gridAxis0index, gridAxis1index, g30zHeightError); gb.AdvanceState(); } else if (tapsDone < zp->GetMaxTaps()) @@ -742,32 +750,32 @@ void GCodes::RunStateMachine(GCodeBuffer& gb, const StringRef& reply) noexcept case GCodeState::gridProbing6: // ready to compute the next probe point { const HeightMap& hm = reprap.GetMove().AccessHeightMap(); - if (gridYindex & 1) + if (gridAxis1index & 1) { // Odd row, so decreasing X - if (gridXindex == 0) + if (gridAxis0index == 0) { - ++gridYindex; + ++gridAxis1index; } else { - --gridXindex; + --gridAxis0index; } } else { // Even row, so increasing X - if (gridXindex + 1 == hm.GetGrid().NumXpoints()) + if (gridAxis0index + 1 == hm.GetGrid().NumAxis0points()) { - ++gridYindex; + ++gridAxis1index; } else { - ++gridXindex; + ++gridAxis0index; } } - if (gridYindex == hm.GetGrid().NumYpoints()) + if (gridAxis1index == hm.GetGrid().NumAxis1points()) { // Done all the points gb.AdvanceState(); @@ -989,8 +997,8 @@ void GCodes::RunStateMachine(GCodeBuffer& gb, const StringRef& reply) noexcept // Find the coordinates of the Z probe to pass to SetZeroHeightError float tempCoords[MaxAxes]; memcpyf(tempCoords, moveBuffer.coords, ARRAY_SIZE(tempCoords)); - tempCoords[X_AXIS] += zp->GetXOffset(); - tempCoords[Y_AXIS] += zp->GetYOffset(); + tempCoords[X_AXIS] += zp->GetOffset(X_AXIS); + tempCoords[Y_AXIS] += zp->GetOffset(Y_AXIS); reprap.GetMove().SetZeroHeightError(tempCoords); ToolOffsetInverseTransform(moveBuffer.coords, currentUserPosition); @@ -1073,8 +1081,8 @@ void GCodes::RunStateMachine(GCodeBuffer& gb, const StringRef& reply) noexcept // Find the coordinates of the Z probe to pass to SetZeroHeightError float tempCoords[MaxAxes]; memcpyf(tempCoords, moveBuffer.coords, ARRAY_SIZE(tempCoords)); - tempCoords[X_AXIS] += zp->GetXOffset(); - tempCoords[Y_AXIS] += zp->GetYOffset(); + tempCoords[X_AXIS] += zp->GetOffset(X_AXIS); + tempCoords[Y_AXIS] += zp->GetOffset(Y_AXIS); reprap.GetMove().SetZeroHeightError(tempCoords); ToolOffsetInverseTransform(moveBuffer.coords, currentUserPosition); } |