Skip to content

Commit

Permalink
Add ALL_AXES manual move for UBL mesh editing
Browse files Browse the repository at this point in the history
Co-Authored-By: Jason Smith <[email protected]>

MarlinFirmware#20620
  • Loading branch information
thinkyhead authored and zillarob committed Feb 25, 2021
1 parent 5c5d777 commit ebec68f
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 8 deletions.
7 changes: 3 additions & 4 deletions Marlin/src/lcd/menu/menu_ubl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -426,10 +426,9 @@ void ubl_map_move_to_xy() {
}
#endif

// Do an internal move to the mesh point
destination.set(ubl.mesh_index_to_xpos(x_plot), ubl.mesh_index_to_ypos(y_plot));
constexpr feedRate_t fr_mm_s = MMM_TO_MMS(XY_PROBE_SPEED);
prepare_internal_move_to_destination(fr_mm_s); // Set current_position from destination
// Use the built-in manual move handler to move to the mesh point.
ui.manual_move.set_destination(xy);
ui.manual_move.soon(ALL_AXES);
}

inline int32_t grid_index(const uint8_t x, const uint8_t y) {
Expand Down
15 changes: 11 additions & 4 deletions Marlin/src/lcd/ultralcd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -664,8 +664,11 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {

millis_t ManualMove::start_time = 0;
float ManualMove::menu_scale = 1;
TERN_(IS_KINEMATIC, float ManualMove::offset = 0);
TERN_(IS_KINEMATIC, bool ManualMove::processing = false);
#if IS_KINEMATIC
float ManualMove::offset = 0;
xyze_pos_t ManualMove::all_axes_destination = { 0 };
bool ManualMove::processing = false;
#endif
TERN_(MULTI_MANUAL, int8_t ManualMove::e_index = 0);
AxisEnum ManualMove::axis = NO_AXIS;

Expand Down Expand Up @@ -705,8 +708,12 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
#endif

// Apply a linear offset to a single axis
destination = current_position;
if (axis <= XYZE) destination[axis] += offset;
if (axis == ALL_AXES)
destination = all_axes_destination;
else if (axis <= XYZE) {
destination = current_position;
destination[axis] += offset;
}

// Reset for the next move
offset = 0;
Expand Down
15 changes: 15 additions & 0 deletions Marlin/src/lcd/ultralcd.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@

#include "../inc/MarlinConfig.h"

#include "../module/motion.h"

#if HAS_BUZZER
#include "../libs/buzzer.h"
#endif
Expand Down Expand Up @@ -269,9 +271,22 @@
static int8_t constexpr e_index = 0;
#endif
static millis_t start_time;
TERN_(IS_KINEMATIC, static xyze_pos_t all_axes_destination);
public:
static float menu_scale;
TERN_(IS_KINEMATIC, static float offset);
template <typename T>
void set_destination(const T& dest) {
#if IS_KINEMATIC
// Moves are segmented, so the entire move is not submitted at once.
// Using a separate variable prevents corrupting the in-progress move.
all_axes_destination = current_position;
all_axes_destination.set(dest);
#else
// Moves are submitted as single line to the planner using buffer_line.
current_position.set(dest);
#endif
}
#if IS_KINEMATIC
static bool processing;
#else
Expand Down

0 comments on commit ebec68f

Please sign in to comment.