|
@@ -46,15 +46,11 @@
|
46
|
46
|
#include "../../feature/bedlevel/bedlevel.h"
|
47
|
47
|
#endif
|
48
|
48
|
|
49
|
|
-#if ENABLED(MANUAL_E_MOVES_RELATIVE)
|
50
|
|
- float manual_move_e_origin = 0;
|
51
|
|
-#endif
|
52
|
|
-
|
53
|
49
|
//
|
54
|
50
|
// "Motion" > "Move Axis" submenu
|
55
|
51
|
//
|
56
|
52
|
|
57
|
|
-static void _lcd_move_xyz(const AxisEnum axis) {
|
|
53
|
+void lcd_move_axis(const AxisEnum axis) {
|
58
|
54
|
if (ui.use_click()) return ui.goto_previous_screen_no_defer();
|
59
|
55
|
if (ui.encoderPosition && !ui.manual_move.processing) {
|
60
|
56
|
// Get motion limit from software endstops, if any
|
|
@@ -88,11 +84,6 @@ static void _lcd_move_xyz(const AxisEnum axis) {
|
88
|
84
|
}
|
89
|
85
|
}
|
90
|
86
|
|
91
|
|
-void _lcd_move_axis_n() { _lcd_move_xyz(AxisEnum(MenuItemBase::itemIndex)); }
|
92
|
|
-
|
93
|
|
-// Move functions for non-menu code that hasn't set itemIndex (e.g., keypad)
|
94
|
|
-void lcd_move_axis(const AxisEnum axis) { MenuEditItemBase::itemIndex = int8_t(axis); _lcd_move_axis_n(); }
|
95
|
|
-
|
96
|
87
|
// Move Z easy accessor
|
97
|
88
|
void lcd_move_z() { lcd_move_axis(Z_AXIS); }
|
98
|
89
|
|
|
@@ -115,7 +106,7 @@ void lcd_move_z() { lcd_move_axis(Z_AXIS); }
|
115
|
106
|
GET_TEXT_F(TERN(MULTI_E_MANUAL, MSG_MOVE_EN, MSG_MOVE_E)),
|
116
|
107
|
ftostr41sign(current_position.e
|
117
|
108
|
PLUS_TERN0(IS_KINEMATIC, ui.manual_move.offset)
|
118
|
|
- MINUS_TERN0(MANUAL_E_MOVES_RELATIVE, manual_move_e_origin)
|
|
109
|
+ MINUS_TERN0(MANUAL_E_MOVES_RELATIVE, ui.manual_move.e_origin)
|
119
|
110
|
)
|
120
|
111
|
);
|
121
|
112
|
} // should_draw
|
|
@@ -140,26 +131,22 @@ void lcd_move_z() { lcd_move_axis(Z_AXIS); }
|
140
|
131
|
#define FINE_MANUAL_MOVE 0.025
|
141
|
132
|
#endif
|
142
|
133
|
|
143
|
|
-screenFunc_t _manual_move_func_ptr;
|
144
|
|
-
|
145
|
134
|
void _goto_manual_move(const_float_t scale) {
|
146
|
135
|
ui.defer_status_screen();
|
147
|
136
|
ui.manual_move.menu_scale = scale;
|
148
|
|
- ui.goto_screen(_manual_move_func_ptr);
|
|
137
|
+ ui.goto_screen(ui.manual_move.screen_ptr);
|
149
|
138
|
thermalManager.set_menu_cold_override(true);
|
150
|
139
|
}
|
151
|
140
|
|
152
|
141
|
void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int8_t eindex=active_extruder) {
|
153
|
|
- _manual_move_func_ptr = func;
|
|
142
|
+ ui.manual_move.screen_ptr = func;
|
154
|
143
|
START_MENU();
|
155
|
144
|
if (LCD_HEIGHT >= 4) {
|
156
|
|
- switch (axis) {
|
157
|
|
- #define _CASE_MOVE(N) case N##_AXIS: STATIC_ITEM_N(N##_AXIS, MSG_MOVE_N, SS_DEFAULT|SS_INVERT); break;
|
158
|
|
- MAIN_AXIS_MAP(_CASE_MOVE)
|
159
|
|
- default:
|
160
|
|
- TERN_(MANUAL_E_MOVES_RELATIVE, manual_move_e_origin = current_position.e);
|
161
|
|
- STATIC_ITEM(MSG_MOVE_E, SS_DEFAULT|SS_INVERT);
|
162
|
|
- break;
|
|
145
|
+ if (axis < NUM_AXES)
|
|
146
|
+ STATIC_ITEM_N(axis, MSG_MOVE_N, SS_DEFAULT|SS_INVERT);
|
|
147
|
+ else {
|
|
148
|
+ TERN_(MANUAL_E_MOVES_RELATIVE, ui.manual_move.e_origin = current_position.e);
|
|
149
|
+ STATIC_ITEM_N(eindex, MSG_MOVE_EN, SS_DEFAULT|SS_INVERT);
|
163
|
150
|
}
|
164
|
151
|
}
|
165
|
152
|
|
|
@@ -181,8 +168,6 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
|
181
|
168
|
END_MENU();
|
182
|
169
|
}
|
183
|
170
|
|
184
|
|
-void _menu_move_n_distance() { _menu_move_distance(AxisEnum(MenuItemBase::itemIndex), _lcd_move_axis_n); }
|
185
|
|
-
|
186
|
171
|
#if E_MANUAL
|
187
|
172
|
|
188
|
173
|
inline void _goto_menu_move_distance_e() {
|
|
@@ -216,8 +201,10 @@ void menu_move() {
|
216
|
201
|
// Move submenu for each axis
|
217
|
202
|
if (NONE(IS_KINEMATIC, NO_MOTION_BEFORE_HOMING) || all_axes_homed()) {
|
218
|
203
|
if (TERN1(DELTA, current_position.z <= delta_clip_start_height)) {
|
219
|
|
- for (uint8_t a = X_AXIS; a <= min(int(Y_AXIS), NUM_AXES - 1); a++)
|
220
|
|
- SUBMENU_N(a, MSG_MOVE_N, _menu_move_n_distance);
|
|
204
|
+ SUBMENU_N(X_AXIS, MSG_MOVE_N, []{ _menu_move_distance(X_AXIS, []{ lcd_move_axis(X_AXIS); }); });
|
|
205
|
+ #if HAS_Y_AXIS
|
|
206
|
+ SUBMENU_N(Y_AXIS, MSG_MOVE_N, []{ _menu_move_distance(Y_AXIS, []{ lcd_move_axis(Y_AXIS); }); });
|
|
207
|
+ #endif
|
221
|
208
|
}
|
222
|
209
|
else {
|
223
|
210
|
#if ENABLED(DELTA)
|
|
@@ -225,8 +212,8 @@ void menu_move() {
|
225
|
212
|
#endif
|
226
|
213
|
}
|
227
|
214
|
#if HAS_Z_AXIS
|
228
|
|
- for (uint8_t a = Z_AXIS; a < NUM_AXES; a++)
|
229
|
|
- SUBMENU_N(a, MSG_MOVE_N, _menu_move_n_distance);
|
|
215
|
+ #define _AXIS_MOVE(N) SUBMENU_N(N, MSG_MOVE_N, []{ _menu_move_distance(AxisEnum(N), []{ lcd_move_axis(AxisEnum(N)); }); });
|
|
216
|
+ REPEAT_S(2, NUM_AXES, _AXIS_MOVE);
|
230
|
217
|
#endif
|
231
|
218
|
}
|
232
|
219
|
else
|
|
@@ -271,9 +258,9 @@ void menu_move() {
|
271
|
258
|
#if E_MANUAL
|
272
|
259
|
|
273
|
260
|
// The current extruder
|
274
|
|
- SUBMENU(MSG_MOVE_E, []{ _menu_move_distance_e_maybe(); });
|
|
261
|
+ SUBMENU(MSG_MOVE_E, _menu_move_distance_e_maybe);
|
275
|
262
|
|
276
|
|
- #define SUBMENU_MOVE_E(N) SUBMENU_N(N, MSG_MOVE_EN, []{ _menu_move_distance(E_AXIS, []{ lcd_move_e(MenuItemBase::itemIndex); }, MenuItemBase::itemIndex); });
|
|
263
|
+ #define SUBMENU_MOVE_E(N) SUBMENU_N(N, MSG_MOVE_EN, []{ _menu_move_distance(E_AXIS, []{ lcd_move_e(N); }, N); });
|
277
|
264
|
|
278
|
265
|
#if EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
|
279
|
266
|
|
|
@@ -285,7 +272,7 @@ void menu_move() {
|
285
|
272
|
#elif MULTI_E_MANUAL
|
286
|
273
|
|
287
|
274
|
// Independent extruders with one E stepper per hotend
|
288
|
|
- LOOP_L_N(n, E_MANUAL) SUBMENU_MOVE_E(n);
|
|
275
|
+ REPEAT(E_MANUAL, SUBMENU_MOVE_E);
|
289
|
276
|
|
290
|
277
|
#endif
|
291
|
278
|
|