LCD position in current units (#20145)
This commit is contained in:
		
				
					committed by
					
						
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						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,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),
 | 
					      ui.manual_move.processing ? destination[axis] : current_position[axis] + TERN0(IS_KINEMATIC, ui.manual_move.offset),
 | 
				
			||||||
      axis
 | 
					      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); }
 | 
					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);
 | 
					  BACK_ITEM(MSG_MOVE_AXIS);
 | 
				
			||||||
  SUBMENU(MSG_MOVE_10MM, []{ _goto_manual_move(10);    });
 | 
					  if (parser.using_inch_units()) {
 | 
				
			||||||
  SUBMENU(MSG_MOVE_1MM,  []{ _goto_manual_move( 1);    });
 | 
					    SUBMENU(MSG_MOVE_01IN,   []{ _goto_manual_move(IN_TO_MM(0.100f)); });
 | 
				
			||||||
  SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
 | 
					    SUBMENU(MSG_MOVE_001IN,  []{ _goto_manual_move(IN_TO_MM(0.010f)); });
 | 
				
			||||||
  if (axis == Z_AXIS && (SHORT_MANUAL_Z_MOVE) > 0.0f && (SHORT_MANUAL_Z_MOVE) < 0.1f) {
 | 
					    SUBMENU(MSG_MOVE_0001IN, []{ _goto_manual_move(IN_TO_MM(0.001f)); });
 | 
				
			||||||
    // Determine digits needed right of decimal
 | 
					  }
 | 
				
			||||||
    constexpr uint8_t digs = !UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) * 1000 - int((SHORT_MANUAL_Z_MOVE) * 1000)) ? 4 :
 | 
					  else {
 | 
				
			||||||
                              !UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) *  100 - int((SHORT_MANUAL_Z_MOVE) *  100)) ? 3 : 2;
 | 
					    SUBMENU(MSG_MOVE_10MM, []{ _goto_manual_move(10);    });
 | 
				
			||||||
    PGM_P const label = GET_TEXT(MSG_MOVE_Z_DIST);
 | 
					    SUBMENU(MSG_MOVE_1MM,  []{ _goto_manual_move( 1);    });
 | 
				
			||||||
    char tmp[strlen_P(label) + 10 + 1], numstr[10];
 | 
					    SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
 | 
				
			||||||
    sprintf_P(tmp, label, dtostrf(SHORT_MANUAL_Z_MOVE, 1, digs, numstr));
 | 
					    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)
 | 
					      #if DISABLED(HAS_GRAPHICAL_TFT)
 | 
				
			||||||
      extern const char NUL_STR[];
 | 
					        extern const char NUL_STR[];
 | 
				
			||||||
      SUBMENU_P(NUL_STR, []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
 | 
					        SUBMENU_P(NUL_STR, []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
 | 
				
			||||||
      MENU_ITEM_ADDON_START(0 + ENABLED(HAS_MARLINUI_HD44780));
 | 
					        MENU_ITEM_ADDON_START(0 + ENABLED(HAS_MARLINUI_HD44780));
 | 
				
			||||||
      lcd_put_u8str(tmp);
 | 
					        lcd_put_u8str(tmp);
 | 
				
			||||||
      MENU_ITEM_ADDON_END();
 | 
					        MENU_ITEM_ADDON_END();
 | 
				
			||||||
    #else
 | 
					      #else
 | 
				
			||||||
      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();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user