mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-24 20:43:32 +00:00
LCD position in current units (#20145)
This commit is contained in:
parent
82663c7d11
commit
a711e22b17
@ -55,7 +55,6 @@
|
||||
}
|
||||
|
||||
void report_current_position_detail() {
|
||||
|
||||
// Position as sent by G-code
|
||||
SERIAL_ECHOPGM("\nLogical:");
|
||||
report_xyz(current_position.asLogical());
|
||||
@ -81,11 +80,7 @@
|
||||
|
||||
#if IS_KINEMATIC
|
||||
// Kinematics applied to the leveled position
|
||||
#if IS_SCARA
|
||||
SERIAL_ECHOPGM("ScaraK: ");
|
||||
#else
|
||||
SERIAL_ECHOPGM("DeltaK: ");
|
||||
#endif
|
||||
SERIAL_ECHOPGM(TERN(IS_SCARA, "ScaraK: ", "DeltaK: "));
|
||||
inverse_kinematics(leveled); // writes delta[]
|
||||
report_xyz(delta);
|
||||
#endif
|
||||
|
@ -329,6 +329,10 @@ public:
|
||||
|
||||
#endif
|
||||
|
||||
static inline bool using_inch_units() { return mm_to_linear_unit(1.0f) != 1.0f; }
|
||||
|
||||
#define IN_TO_MM(I) ((I) * 25.4f)
|
||||
#define MM_TO_IN(M) ((M) / 25.4f)
|
||||
#define LINEAR_UNIT(V) parser.mm_to_linear_unit(V)
|
||||
#define VOLUMETRIC_UNIT(V) parser.mm_to_volumetric_unit(V)
|
||||
|
||||
|
@ -38,10 +38,11 @@
|
||||
#include "../../module/motion.h"
|
||||
#include "../../module/temperature.h"
|
||||
|
||||
#include "../../gcode/parser.h" // for units (and volumetric)
|
||||
|
||||
#if ENABLED(FILAMENT_LCD_DISPLAY)
|
||||
#include "../../feature/filwidth.h"
|
||||
#include "../../module/planner.h"
|
||||
#include "../../gcode/parser.h"
|
||||
#endif
|
||||
|
||||
#if HAS_CUTTER
|
||||
@ -67,6 +68,11 @@
|
||||
#define X_LABEL_POS 3
|
||||
#define X_VALUE_POS 11
|
||||
#define XYZ_SPACING 37
|
||||
|
||||
#define X_LABEL_POS_IN (X_LABEL_POS - 2)
|
||||
#define X_VALUE_POS_IN (X_VALUE_POS - 5)
|
||||
#define XYZ_SPACING_IN (XYZ_SPACING + 9)
|
||||
|
||||
#define XYZ_BASELINE (30 + INFO_FONT_ASCENT)
|
||||
#define EXTRAS_BASELINE (40 + INFO_FONT_ASCENT)
|
||||
#define STATUS_BASELINE (LCD_PIXEL_HEIGHT - INFO_FONT_DESCENT)
|
||||
@ -370,10 +376,12 @@ FORCE_INLINE void _draw_centered_temp(const int16_t temp, const uint8_t tx, cons
|
||||
// Homed and known, display constantly.
|
||||
//
|
||||
FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const bool blink) {
|
||||
const bool is_inch = parser.using_inch_units();
|
||||
const AxisEnum a = TERN(LCD_SHOW_E_TOTAL, axis == E_AXIS ? X_AXIS : axis, axis);
|
||||
const uint8_t offs = (XYZ_SPACING) * a;
|
||||
lcd_put_wchar(X_LABEL_POS + offs, XYZ_BASELINE, axis_codes[axis]);
|
||||
lcd_moveto(X_VALUE_POS + offs, XYZ_BASELINE);
|
||||
const uint8_t offs = a * (is_inch ? XYZ_SPACING_IN : XYZ_SPACING);
|
||||
lcd_put_wchar((is_inch ? X_LABEL_POS_IN : X_LABEL_POS) + offs, XYZ_BASELINE, axis_codes[axis]);
|
||||
lcd_moveto((is_inch ? X_VALUE_POS_IN : X_VALUE_POS) + offs, XYZ_BASELINE);
|
||||
|
||||
if (blink)
|
||||
lcd_put_u8str(value);
|
||||
else {
|
||||
@ -390,9 +398,16 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the Status Screen for a 128x64 DOGM (U8glib) display.
|
||||
*
|
||||
* Called as needed to update the current display stripe.
|
||||
* Use the PAGE_CONTAINS macros to avoid pointless draw calls.
|
||||
*/
|
||||
void MarlinUI::draw_status_screen() {
|
||||
constexpr int xystorage = TERN(INCH_MODE_SUPPORT, 8, 5);
|
||||
static char xstring[TERN(LCD_SHOW_E_TOTAL, 12, xystorage)], ystring[xystorage], zstring[8];
|
||||
|
||||
static char xstring[TERN(LCD_SHOW_E_TOTAL, 12, 5)], ystring[5], zstring[8];
|
||||
#if ENABLED(FILAMENT_LCD_DISPLAY)
|
||||
static char wstring[5], mstring[4];
|
||||
#endif
|
||||
@ -439,7 +454,8 @@ void MarlinUI::draw_status_screen() {
|
||||
#endif
|
||||
|
||||
const xyz_pos_t lpos = current_position.asLogical();
|
||||
strcpy(zstring, ftostr52sp(lpos.z));
|
||||
const bool is_inch = parser.using_inch_units();
|
||||
strcpy(zstring, is_inch ? ftostr42_52(LINEAR_UNIT(lpos.z)) : ftostr52sp(lpos.z));
|
||||
|
||||
if (show_e_total) {
|
||||
#if ENABLED(LCD_SHOW_E_TOTAL)
|
||||
@ -448,8 +464,8 @@ void MarlinUI::draw_status_screen() {
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
strcpy(xstring, ftostr4sign(lpos.x));
|
||||
strcpy(ystring, ftostr4sign(lpos.y));
|
||||
strcpy(xstring, is_inch ? ftostr53_63(LINEAR_UNIT(lpos.x)) : ftostr4sign(lpos.x));
|
||||
strcpy(ystring, is_inch ? ftostr53_63(LINEAR_UNIT(lpos.y)) : ftostr4sign(lpos.y));
|
||||
}
|
||||
|
||||
#if ENABLED(FILAMENT_LCD_DISPLAY)
|
||||
@ -854,6 +870,9 @@ void MarlinUI::draw_status_screen() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the Status Message area
|
||||
*/
|
||||
void MarlinUI::draw_status_message(const bool blink) {
|
||||
|
||||
// Get the UTF8 character count of the string
|
||||
|
@ -258,6 +258,9 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Move 0.1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Move 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Move 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Move 0.001in");
|
||||
PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Move 0.01in");
|
||||
PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Move 0.1in");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Speed");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "menu_addon.h"
|
||||
|
||||
#include "../../module/motion.h"
|
||||
#include "../../gcode/parser.h" // for inch support
|
||||
|
||||
#if ENABLED(DELTA)
|
||||
#include "../../module/delta.h"
|
||||
@ -95,7 +96,12 @@ static void _lcd_move_xyz(PGM_P const name, const AxisEnum axis) {
|
||||
ui.manual_move.processing ? destination[axis] : current_position[axis] + TERN0(IS_KINEMATIC, ui.manual_move.offset),
|
||||
axis
|
||||
);
|
||||
MenuEditItemBase::draw_edit_screen(name, ui.manual_move.menu_scale >= 0.1f ? ftostr41sign(pos) : ftostr63(pos));
|
||||
if (parser.using_inch_units()) {
|
||||
const float imp_pos = LINEAR_UNIT(pos);
|
||||
MenuEditItemBase::draw_edit_screen(name, ftostr63(imp_pos));
|
||||
}
|
||||
else
|
||||
MenuEditItemBase::draw_edit_screen(name, ui.manual_move.menu_scale >= 0.1f ? ftostr41sign(pos) : ftostr63(pos));
|
||||
}
|
||||
}
|
||||
void lcd_move_x() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_X), X_AXIS); }
|
||||
@ -165,26 +171,33 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
|
||||
}
|
||||
|
||||
BACK_ITEM(MSG_MOVE_AXIS);
|
||||
SUBMENU(MSG_MOVE_10MM, []{ _goto_manual_move(10); });
|
||||
SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move( 1); });
|
||||
SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
|
||||
if (axis == Z_AXIS && (SHORT_MANUAL_Z_MOVE) > 0.0f && (SHORT_MANUAL_Z_MOVE) < 0.1f) {
|
||||
// Determine digits needed right of decimal
|
||||
constexpr uint8_t digs = !UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) * 1000 - int((SHORT_MANUAL_Z_MOVE) * 1000)) ? 4 :
|
||||
!UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) * 100 - int((SHORT_MANUAL_Z_MOVE) * 100)) ? 3 : 2;
|
||||
PGM_P const label = GET_TEXT(MSG_MOVE_Z_DIST);
|
||||
char tmp[strlen_P(label) + 10 + 1], numstr[10];
|
||||
sprintf_P(tmp, label, dtostrf(SHORT_MANUAL_Z_MOVE, 1, digs, numstr));
|
||||
if (parser.using_inch_units()) {
|
||||
SUBMENU(MSG_MOVE_01IN, []{ _goto_manual_move(IN_TO_MM(0.100f)); });
|
||||
SUBMENU(MSG_MOVE_001IN, []{ _goto_manual_move(IN_TO_MM(0.010f)); });
|
||||
SUBMENU(MSG_MOVE_0001IN, []{ _goto_manual_move(IN_TO_MM(0.001f)); });
|
||||
}
|
||||
else {
|
||||
SUBMENU(MSG_MOVE_10MM, []{ _goto_manual_move(10); });
|
||||
SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move( 1); });
|
||||
SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
|
||||
if (axis == Z_AXIS && (SHORT_MANUAL_Z_MOVE) > 0.0f && (SHORT_MANUAL_Z_MOVE) < 0.1f) {
|
||||
// Determine digits needed right of decimal
|
||||
constexpr uint8_t digs = !UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) * 1000 - int((SHORT_MANUAL_Z_MOVE) * 1000)) ? 4 :
|
||||
!UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) * 100 - int((SHORT_MANUAL_Z_MOVE) * 100)) ? 3 : 2;
|
||||
PGM_P const label = GET_TEXT(MSG_MOVE_Z_DIST);
|
||||
char tmp[strlen_P(label) + 10 + 1], numstr[10];
|
||||
sprintf_P(tmp, label, dtostrf(SHORT_MANUAL_Z_MOVE, 1, digs, numstr));
|
||||
|
||||
#if DISABLED(HAS_GRAPHICAL_TFT)
|
||||
extern const char NUL_STR[];
|
||||
SUBMENU_P(NUL_STR, []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
|
||||
MENU_ITEM_ADDON_START(0 + ENABLED(HAS_MARLINUI_HD44780));
|
||||
lcd_put_u8str(tmp);
|
||||
MENU_ITEM_ADDON_END();
|
||||
#else
|
||||
SUBMENU_P(tmp, []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
|
||||
#endif
|
||||
#if DISABLED(HAS_GRAPHICAL_TFT)
|
||||
extern const char NUL_STR[];
|
||||
SUBMENU_P(NUL_STR, []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
|
||||
MENU_ITEM_ADDON_START(0 + ENABLED(HAS_MARLINUI_HD44780));
|
||||
lcd_put_u8str(tmp);
|
||||
MENU_ITEM_ADDON_END();
|
||||
#else
|
||||
SUBMENU_P(tmp, []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
|
||||
#endif
|
||||
}
|
||||
}
|
||||
END_MENU();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user