mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-28 14:24:34 +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() {
|
void report_current_position_detail() {
|
||||||
|
|
||||||
// Position as sent by G-code
|
// Position as sent by G-code
|
||||||
SERIAL_ECHOPGM("\nLogical:");
|
SERIAL_ECHOPGM("\nLogical:");
|
||||||
report_xyz(current_position.asLogical());
|
report_xyz(current_position.asLogical());
|
||||||
@ -81,11 +80,7 @@
|
|||||||
|
|
||||||
#if IS_KINEMATIC
|
#if IS_KINEMATIC
|
||||||
// Kinematics applied to the leveled position
|
// Kinematics applied to the leveled position
|
||||||
#if IS_SCARA
|
SERIAL_ECHOPGM(TERN(IS_SCARA, "ScaraK: ", "DeltaK: "));
|
||||||
SERIAL_ECHOPGM("ScaraK: ");
|
|
||||||
#else
|
|
||||||
SERIAL_ECHOPGM("DeltaK: ");
|
|
||||||
#endif
|
|
||||||
inverse_kinematics(leveled); // writes delta[]
|
inverse_kinematics(leveled); // writes delta[]
|
||||||
report_xyz(delta);
|
report_xyz(delta);
|
||||||
#endif
|
#endif
|
||||||
|
@ -329,6 +329,10 @@ public:
|
|||||||
|
|
||||||
#endif
|
#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 LINEAR_UNIT(V) parser.mm_to_linear_unit(V)
|
||||||
#define VOLUMETRIC_UNIT(V) parser.mm_to_volumetric_unit(V)
|
#define VOLUMETRIC_UNIT(V) parser.mm_to_volumetric_unit(V)
|
||||||
|
|
||||||
|
@ -38,10 +38,11 @@
|
|||||||
#include "../../module/motion.h"
|
#include "../../module/motion.h"
|
||||||
#include "../../module/temperature.h"
|
#include "../../module/temperature.h"
|
||||||
|
|
||||||
|
#include "../../gcode/parser.h" // for units (and volumetric)
|
||||||
|
|
||||||
#if ENABLED(FILAMENT_LCD_DISPLAY)
|
#if ENABLED(FILAMENT_LCD_DISPLAY)
|
||||||
#include "../../feature/filwidth.h"
|
#include "../../feature/filwidth.h"
|
||||||
#include "../../module/planner.h"
|
#include "../../module/planner.h"
|
||||||
#include "../../gcode/parser.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_CUTTER
|
#if HAS_CUTTER
|
||||||
@ -67,6 +68,11 @@
|
|||||||
#define X_LABEL_POS 3
|
#define X_LABEL_POS 3
|
||||||
#define X_VALUE_POS 11
|
#define X_VALUE_POS 11
|
||||||
#define XYZ_SPACING 37
|
#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 XYZ_BASELINE (30 + INFO_FONT_ASCENT)
|
||||||
#define EXTRAS_BASELINE (40 + INFO_FONT_ASCENT)
|
#define EXTRAS_BASELINE (40 + INFO_FONT_ASCENT)
|
||||||
#define STATUS_BASELINE (LCD_PIXEL_HEIGHT - INFO_FONT_DESCENT)
|
#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.
|
// Homed and known, display constantly.
|
||||||
//
|
//
|
||||||
FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const bool blink) {
|
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 AxisEnum a = TERN(LCD_SHOW_E_TOTAL, axis == E_AXIS ? X_AXIS : axis, axis);
|
||||||
const uint8_t offs = (XYZ_SPACING) * a;
|
const uint8_t offs = a * (is_inch ? XYZ_SPACING_IN : XYZ_SPACING);
|
||||||
lcd_put_wchar(X_LABEL_POS + offs, XYZ_BASELINE, axis_codes[axis]);
|
lcd_put_wchar((is_inch ? X_LABEL_POS_IN : X_LABEL_POS) + offs, XYZ_BASELINE, axis_codes[axis]);
|
||||||
lcd_moveto(X_VALUE_POS + offs, XYZ_BASELINE);
|
lcd_moveto((is_inch ? X_VALUE_POS_IN : X_VALUE_POS) + offs, XYZ_BASELINE);
|
||||||
|
|
||||||
if (blink)
|
if (blink)
|
||||||
lcd_put_u8str(value);
|
lcd_put_u8str(value);
|
||||||
else {
|
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() {
|
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)
|
#if ENABLED(FILAMENT_LCD_DISPLAY)
|
||||||
static char wstring[5], mstring[4];
|
static char wstring[5], mstring[4];
|
||||||
#endif
|
#endif
|
||||||
@ -439,7 +454,8 @@ void MarlinUI::draw_status_screen() {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
const xyz_pos_t lpos = current_position.asLogical();
|
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 (show_e_total) {
|
||||||
#if ENABLED(LCD_SHOW_E_TOTAL)
|
#if ENABLED(LCD_SHOW_E_TOTAL)
|
||||||
@ -448,8 +464,8 @@ void MarlinUI::draw_status_screen() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
strcpy(xstring, ftostr4sign(lpos.x));
|
strcpy(xstring, is_inch ? ftostr53_63(LINEAR_UNIT(lpos.x)) : ftostr4sign(lpos.x));
|
||||||
strcpy(ystring, ftostr4sign(lpos.y));
|
strcpy(ystring, is_inch ? ftostr53_63(LINEAR_UNIT(lpos.y)) : ftostr4sign(lpos.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLED(FILAMENT_LCD_DISPLAY)
|
#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) {
|
void MarlinUI::draw_status_message(const bool blink) {
|
||||||
|
|
||||||
// Get the UTF8 character count of the string
|
// 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_01MM = _UxGT("Move 0.1mm");
|
||||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Move 1mm");
|
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Move 1mm");
|
||||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Move 10mm");
|
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_SPEED = _UxGT("Speed");
|
||||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
|
PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
|
||||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
|
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "menu_addon.h"
|
#include "menu_addon.h"
|
||||||
|
|
||||||
#include "../../module/motion.h"
|
#include "../../module/motion.h"
|
||||||
|
#include "../../gcode/parser.h" // for inch support
|
||||||
|
|
||||||
#if ENABLED(DELTA)
|
#if ENABLED(DELTA)
|
||||||
#include "../../module/delta.h"
|
#include "../../module/delta.h"
|
||||||
@ -95,6 +96,11 @@ 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),
|
ui.manual_move.processing ? destination[axis] : current_position[axis] + TERN0(IS_KINEMATIC, ui.manual_move.offset),
|
||||||
axis
|
axis
|
||||||
);
|
);
|
||||||
|
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));
|
MenuEditItemBase::draw_edit_screen(name, ui.manual_move.menu_scale >= 0.1f ? ftostr41sign(pos) : ftostr63(pos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -165,6 +171,12 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
|
|||||||
}
|
}
|
||||||
|
|
||||||
BACK_ITEM(MSG_MOVE_AXIS);
|
BACK_ITEM(MSG_MOVE_AXIS);
|
||||||
|
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_10MM, []{ _goto_manual_move(10); });
|
||||||
SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move( 1); });
|
SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move( 1); });
|
||||||
SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
|
SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
|
||||||
@ -186,6 +198,7 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
|
|||||||
SUBMENU_P(tmp, []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
|
SUBMENU_P(tmp, []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
}
|
||||||
END_MENU();
|
END_MENU();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user