diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index e44750b..53b7f6e 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -168,6 +168,7 @@ #define HIGH_SPEED 1 //高速模式 1:打开高速模式 150mm/s; 0:低速模式 80mm/s #define HIGH_SPEED_1 1 //只开关高速的宏 #define SHOW_GRID_VALUES 1 //1 显示自动调平网格值 0 不显示自动调平网格值 +#define COMPACT_GRID_VALUES 1 // 0 - original Creality style, 1 - compact style for tight grids #define K8_EXTRUDER 0 //1 是K8挤出机 0 是精灵挤出机 #define USER_LEVEL_CHECK 1 // 调平校准使能 #define WUHAN_CHENGE_PLATFORM 1 // 武汉改平台板 20230913_Rock diff --git a/Marlin/src/lcd/dwin/e3v2/dwin.cpp b/Marlin/src/lcd/dwin/e3v2/dwin.cpp index bb25139..79746ec 100644 --- a/Marlin/src/lcd/dwin/e3v2/dwin.cpp +++ b/Marlin/src/lcd/dwin/e3v2/dwin.cpp @@ -552,16 +552,32 @@ static void Show_JPN_pause_title(void) void DWIN_Draw_Z_Offset_Float(uint8_t size, uint16_t color,uint16_t bcolor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) { - if (value < 0) - { - DWIN_Draw_FloatValue(true, true, 0, size, color, bcolor, iNum, fNum, x+2, y, -value); - DWIN_Draw_String(false, true, font6x12, color, bcolor, x+2, y, F("-")); - } - else - { - DWIN_Draw_FloatValue(true, true, 0, size, color, bcolor, iNum, fNum, x+1, y, value); - DWIN_Draw_String(false, true, font6x12, color, bcolor, x, y, F("")); - } + #if ENABLED(COMPACT_GRID_VALUES) + char valueStr[48] = "\0"; + if (value < 0) + { + DWIN_Draw_String(false, true, font6x12, bcolor == Color_Bg_Black ? Color_Blue : color, bcolor, x+5, y, F("-")); // draw minus sign above + value *= -1; + } else { + DWIN_Draw_String(false, true, font6x12, bcolor == Color_Bg_Black ? Color_Red : color, bcolor, x+5, y, F("+")); // draw plus sign above + } + if (value < 100) { + sprintf_P(valueStr, ".%02d", static_cast(value & 0xFF)); + } else { + sprintf_P(valueStr, "%d.%d", static_cast((value & 0xFF) / 100), static_cast(((value & 0xFF) % 100) / 10)); + } + DWIN_Draw_String(false, true, size, color, bcolor, x, y+8, F(valueStr)); + #else // COMPACT_GRID_VALUES + if (value < 0) + { + DWIN_Draw_FloatValue(true, true, 0, size, color, bcolor, iNum, fNum, x+1, y, -value); + DWIN_Draw_String(false, true, font6x12, color, bcolor, x, y, F("-")); + } + else + { + DWIN_Draw_FloatValue(true, true, 0, size, color, bcolor, iNum, fNum, x, y, value); + } + #endif // COMPACT_GRID_VALUES } #endif void DWIN_Draw_Signed_Float(uint8_t size, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) @@ -2268,17 +2284,15 @@ static uint16_t Choose_BG_Color(float offset_value) else z_offset_value=z_values[mesh_Count->x][mesh_Count->y]; if(checkkey!=Leveling&&checkkey!=Level_Value_Edit)return;//只有在调平界面才运行显示调平值 - //计算矩形区域 - rec_LU_x=Rect_LU_X_POS+mesh_Count->x*X_Axis_Interval; - // rec_LU_y=Rect_LU_Y_POS+mesh_Count->y*Y_Axis_Interval; - rec_LU_y=Rect_LU_Y_POS-mesh_Count->y*Y_Axis_Interval; - rec_RD_x=Rect_RD_X_POS+mesh_Count->x*X_Axis_Interval; - // rec_RD_y=Rect_RD_Y_POS+mesh_Count->y*Y_Axis_Interval; - rec_RD_y=Rect_RD_Y_POS-mesh_Count->y*Y_Axis_Interval; + //计算矩形区域 + rec_LU_x=Rect_LU_X_POS + mesh_Count->x * X_Axis_Interval; + rec_LU_y=Rect_LU_Y_POS - mesh_Count->y * Y_Axis_Interval; + rec_RD_x=Rect_RD_X_POS + mesh_Count->x * X_Axis_Interval; + rec_RD_y=Rect_RD_Y_POS - mesh_Count->y * Y_Axis_Interval; //补偿值的位置 - value_LU_x=rec_LU_x+1; - // value_LU_y=rec_LU_y+4; - value_LU_y=rec_LU_y+(rec_RD_y-rec_LU_y)/2-6; + value_LU_x = rec_LU_x + (rec_RD_x - rec_LU_x) / 2 - CELL_TEXT_WIDTH / 2; + value_LU_y = rec_LU_y + (rec_RD_y - rec_LU_y) / 2 - CELL_TEXT_HEIGHT / 2 + 1; + //填充颜色 if(!Set_En)rec_fill_color=Choose_BG_Color(z_offset_value);//自动设置 else if(1==Set_En)rec_fill_color=Set_BG_Color; //手动填充选中块颜色, @@ -5745,16 +5759,14 @@ void HMI_Levling_Change() { xy_int8_t mesh_Count=Converted_Grid_Point(select_level.now); //转换网格点 //计算矩形区域 - rec_LU_x=Rect_LU_X_POS+mesh_Count.x*X_Axis_Interval; - // rec_LU_y=Rect_LU_Y_POS+mesh_Count.y*Y_Axis_Interval; - rec_LU_y=Rect_LU_Y_POS-mesh_Count.y*Y_Axis_Interval; - rec_RD_x=Rect_RD_X_POS+mesh_Count.x*X_Axis_Interval; - // rec_RD_y=Rect_RD_Y_POS+mesh_Count.y*Y_Axis_Interval; - rec_RD_y=Rect_RD_Y_POS-mesh_Count.y*Y_Axis_Interval; + rec_LU_x=Rect_LU_X_POS + mesh_Count.x * X_Axis_Interval; + rec_LU_y=Rect_LU_Y_POS - mesh_Count.y * Y_Axis_Interval; + rec_RD_x=Rect_RD_X_POS + mesh_Count.x * X_Axis_Interval; + rec_RD_y=Rect_RD_Y_POS - mesh_Count.y * Y_Axis_Interval; //补偿值的位置 - value_LU_x=rec_LU_x+1; - // value_LU_y=rec_LU_y+4; - value_LU_y=rec_LU_y+(rec_RD_y-rec_LU_y)/2-6; + value_LU_x = rec_LU_x + (rec_RD_x - rec_LU_x) / 2 - CELL_TEXT_WIDTH / 2; + value_LU_y = rec_LU_y + (rec_RD_y - rec_LU_y) / 2 - CELL_TEXT_HEIGHT / 2 + 1; + if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Temp_Leveling_Value)) //点击了确认键 { checkkey = Leveling; @@ -5813,16 +5825,14 @@ void HMI_Levling_Change() { xy_int8_t mesh_Count=Converted_Grid_Point(select_level.now); //转换网格点 //计算矩形区域 - rec_LU_x=Rect_LU_X_POS+mesh_Count.x*X_Axis_Interval; - // rec_LU_y=Rect_LU_Y_POS+mesh_Count.y*Y_Axis_Interval; - rec_LU_y=Rect_LU_Y_POS-mesh_Count.y*Y_Axis_Interval; - rec_RD_x=Rect_RD_X_POS+mesh_Count.x*X_Axis_Interval; - // rec_RD_y=Rect_RD_Y_POS+mesh_Count.y*Y_Axis_Interval; - rec_RD_y=Rect_RD_Y_POS-mesh_Count.y*Y_Axis_Interval; + rec_LU_x=Rect_LU_X_POS + mesh_Count.x * X_Axis_Interval; + rec_LU_y=Rect_LU_Y_POS - mesh_Count.y * Y_Axis_Interval; + rec_RD_x=Rect_RD_X_POS + mesh_Count.x * X_Axis_Interval; + rec_RD_y=Rect_RD_Y_POS - mesh_Count.y * Y_Axis_Interval; //补偿值的位置 - value_LU_x=rec_LU_x+1; - // value_LU_y=rec_LU_y+4; - value_LU_y=rec_LU_y+(rec_RD_y-rec_LU_y)/2-6; + value_LU_x = rec_LU_x + (rec_RD_x - rec_LU_x) / 2 - CELL_TEXT_WIDTH / 2; + value_LU_y = rec_LU_y + (rec_RD_y - rec_LU_y) / 2 - CELL_TEXT_HEIGHT / 2 + 1; + //临时代码 需要继续优化 // xy_int8_t mesh_Count=Converted_Grid_Point(select_level.now); //转换网格点 Draw_Dots_On_Screen(&mesh_Count,2,Select_Color); //设置字体背景色,不改变选中块颜色 diff --git a/Marlin/src/lcd/dwin/e3v2/dwin.h b/Marlin/src/lcd/dwin/e3v2/dwin.h index f5bc1fb..79616b7 100644 --- a/Marlin/src/lcd/dwin/e3v2/dwin.h +++ b/Marlin/src/lcd/dwin/e3v2/dwin.h @@ -601,6 +601,8 @@ extern enum DC_language current_language; // Color FE29 #define Color_White 0xFFFF #define Color_Yellow 0xFE29 +#define Color_Blue 0x19FF +#define Color_Red 0xF44F #define Color_Bg_Window 0x31E8 // Popup background color #define Color_Bg_Blue 0x1145 // Dark blue background color #define Color_Bg_Black 0x0841 // Black background color diff --git a/Marlin/src/lcd/dwin/e3v2/ui_position.h b/Marlin/src/lcd/dwin/e3v2/ui_position.h index 34370e0..206502b 100644 --- a/Marlin/src/lcd/dwin/e3v2/ui_position.h +++ b/Marlin/src/lcd/dwin/e3v2/ui_position.h @@ -4,35 +4,108 @@ #if ENABLED(DWIN_CREALITY_480_LCD) // -#elif ENABLED(DWIN_CREALITY_320_LCD)//3.2寸屏幕 -//主界面 - #define LOGO_LITTLE_X 72 //小LOGO坐标 +#elif ENABLED(DWIN_CREALITY_320_LCD) //3.2-inch screen +//Main Interface +//Coordinates of the small logo + #define LOGO_LITTLE_X 72 #define LOGO_LITTLE_Y 36 -//自动调平界面 -//编辑调平页面 +//Auto-Leveling Interface +//Edit Leveling Page #define WORD_TITLE_X 29 #define WORD_TITLE_Y 1 - #define OUTLINE_LEFT_X 12//40 - #define OUTLINE_LEFT_Y 30//72 - #define OUTLINE_RIGHT_X OUTLINE_LEFT_X+220//OUTLINE_LEFT_X+200//OUTLINE_LEFT_X+160 - #define OUTLINE_RIGHT_Y OUTLINE_LEFT_Y+220//OUTLINE_LEFT_Y+160 + #if GRID_MAX_POINTS_X <= 5 + #define OUTLINE_HORIZONTAL_MARGIN 12 + #else + #define OUTLINE_HORIZONTAL_MARGIN 2 + #endif + #define OUTLINE_INNER_WIDTH (DWIN_WIDTH - (OUTLINE_HORIZONTAL_MARGIN * 2)) + #define OUTLINE_INNER_HEIGHT 220 + #define OUTLINE_LEFT_X OUTLINE_HORIZONTAL_MARGIN + #define OUTLINE_LEFT_Y 30 + #define OUTLINE_RIGHT_X (OUTLINE_HORIZONTAL_MARGIN + OUTLINE_INNER_WIDTH) + #define OUTLINE_RIGHT_Y (OUTLINE_LEFT_Y + OUTLINE_INNER_HEIGHT) //button——position #define BUTTON_W 82 #define BUTTON_H 32 #define BUTTON_EDIT_X OUTLINE_LEFT_X - #define BUTTON_EDIT_Y OUTLINE_RIGHT_Y+20//OUTLINE_RIGHT_Y+27 + #define BUTTON_EDIT_Y OUTLINE_RIGHT_Y+20 #define BUTTON_OK_X OUTLINE_RIGHT_X-BUTTON_W - #define BUTTON_OK_Y BUTTON_EDIT_Y// - //数据坐标 - #define X_Axis_Interval 50//54 //x轴上间隔距离像素 - #define Y_Axis_Interval 52//35 //y轴上间隔距离像素 - #define Rect_LU_X_POS OUTLINE_LEFT_X+10//32 //第一个左上x坐标 - // #define Rect_LU_Y_POS OUTLINE_LEFT_Y+10//157-4 //第一个左上y坐标 - #define Rect_LU_Y_POS (OUTLINE_LEFT_Y+20)+3*Y_Axis_Interval//157-4 //第一个左上y坐标 + #define BUTTON_OK_Y BUTTON_EDIT_Y + //data coordinates + + #if ENABLED(SHOW_GRID_VALUES) && GRID_MAX_POINTS_X >= 7 && DISABLED(COMPACT_GRID_VALUES) + #error "Cannot fit GRID_MAX_POINTS_X >= 7 into LCD screen. Either set GRID_MAX_POINTS_X to lower value or enable COMPACT_GRID_VALUES" + #endif + #if ENABLED(SHOW_GRID_VALUES) && GRID_MAX_POINTS_X > 10 + #error "Cannot fit GRID_MAX_POINTS_X > 10 into LCD screen. Either set GRID_MAX_POINTS_X to lower value or disable SHOW_GRID_VALUES" + #endif + #if ENABLED(SHOW_GRID_VALUES) && GRID_MAX_POINTS_Y > 10 + #error "Cannot fit GRID_MAX_POINTS_Y > 10 into LCD screen. Either set GRID_MAX_POINTS_Y to lower value or disable SHOW_GRID_VALUES" + #endif - #define Rect_RD_X_POS Rect_LU_X_POS+45//X_Axis_Interval//X_Axis_Interval//78 //第一个右下x坐标 - // #define Rect_RD_Y_POS Rect_LU_Y_POS+20//Y_Axis_Interval//Y_Axis_Interval//177-4 //第一个右下y坐标 - #define Rect_RD_Y_POS (Rect_LU_Y_POS+30)//Y_Axis_Interval//Y_Axis_Interval//177-4 //第一个右下y坐标 + #if ENABLED(COMPACT_GRID_VALUES) + #define CELL_TEXT_WIDTH (3 * 8 + 1) // ".00" or "1.0" gives maximum 3 chars of 8x12 font per cell + #define CELL_TEXT_HEIGHT 22 // 12px for character height of 8x12 font + 10px for padding per cell + #else // COMPACT_GRID_VALUES + #define CELL_TEXT_WIDTH (5 * 8) // "-0.00" gives maximum 5 chars of 8x12 font per cell + #define CELL_TEXT_HEIGHT 14 // 12px for character height of 8x12 font + 14px for padding per cell + #endif // COMPACT_GRID_VALUES + + #define _TOTAL_MIN_CELL_WIDTH (CELL_TEXT_WIDTH * GRID_MAX_POINTS_X) + #define _TOTAL_MIN_CELL_HEIGHT (CELL_TEXT_HEIGHT * GRID_MAX_POINTS_Y) + + #define _SPACE_TO_SPREAD_HORIZONTAL (OUTLINE_INNER_WIDTH - _TOTAL_MIN_CELL_WIDTH) + #define _SPACE_TO_SPREAD_VERTICAL (OUTLINE_INNER_HEIGHT - _TOTAL_MIN_CELL_HEIGHT) + + #if (_SPACE_TO_SPREAD_HORIZONTAL / (GRID_MAX_POINTS_X + GRID_MAX_POINTS_X + 1)) != 0 // allocate space evenly to celss and cell spacing and outer spacing + #define _CELL_GROW_HORIZONTAL (_SPACE_TO_SPREAD_HORIZONTAL / (GRID_MAX_POINTS_X + GRID_MAX_POINTS_X + 1)) + #define _CELL_SPACING_HORIZONTAL (_SPACE_TO_SPREAD_HORIZONTAL / (GRID_MAX_POINTS_X + GRID_MAX_POINTS_X + 1)) + #elif (_SPACE_TO_SPREAD_HORIZONTAL / (GRID_MAX_POINTS_X + GRID_MAX_POINTS_X - 1)) != 0 // allocate space evenly to celss and cell spacing + #define _CELL_GROW_HORIZONTAL (_SPACE_TO_SPREAD_HORIZONTAL / (GRID_MAX_POINTS_X + GRID_MAX_POINTS_X - 1)) + #define _CELL_SPACING_HORIZONTAL (_SPACE_TO_SPREAD_HORIZONTAL / (GRID_MAX_POINTS_X + GRID_MAX_POINTS_X - 1)) + #elif (_SPACE_TO_SPREAD_HORIZONTAL / GRID_MAX_POINTS_X) != 0 // allocate space evenly to cells + #define _CELL_GROW_HORIZONTAL (_SPACE_TO_SPREAD_HORIZONTAL / GRID_MAX_POINTS_X) + #define _CELL_SPACING_HORIZONTAL 0 + #elif (_SPACE_TO_SPREAD_HORIZONTAL / GRID_MAX_POINTS_X - 1) != 0 // allocate space evenly to cell spacing + #define _CELL_GROW_HORIZONTAL 0 + #define _CELL_SPACING_HORIZONTAL (_SPACE_TO_SPREAD_HORIZONTAL / GRID_MAX_POINTS_X - 1) + #else + #define _CELL_GROW_HORIZONTAL 0 + #define _CELL_SPACING_HORIZONTAL 0 + #endif + + #if (_SPACE_TO_SPREAD_VERTICAL / (GRID_MAX_POINTS_Y + GRID_MAX_POINTS_Y + 1)) != 0 // allocate space evenly to celss and cell spacing + #define _CELL_GROW_VERTICAL (_SPACE_TO_SPREAD_VERTICAL / (GRID_MAX_POINTS_Y + GRID_MAX_POINTS_Y + 1)) + #define _CELL_SPACING_VERTICAL (_SPACE_TO_SPREAD_VERTICAL / (GRID_MAX_POINTS_Y + GRID_MAX_POINTS_Y + 1)) + #elif (_SPACE_TO_SPREAD_VERTICAL / (GRID_MAX_POINTS_Y + GRID_MAX_POINTS_Y - 1)) != 0 // allocate space evenly to celss and cell spacing + #define _CELL_GROW_VERTICAL (_SPACE_TO_SPREAD_VERTICAL / (GRID_MAX_POINTS_Y + GRID_MAX_POINTS_Y - 1)) + #define _CELL_SPACING_VERTICAL (_SPACE_TO_SPREAD_VERTICAL / (GRID_MAX_POINTS_Y + GRID_MAX_POINTS_Y - 1)) + #elif (_SPACE_TO_SPREAD_VERTICAL / GRID_MAX_POINTS_Y) != 0 // allocate space evenly to cells + #define _CELL_GROW_VERTICAL (_SPACE_TO_SPREAD_VERTICAL / GRID_MAX_POINTS_Y) + #define _CELL_SPACING_VERTICAL 0 + #elif (_SPACE_TO_SPREAD_VERTICAL / GRID_MAX_POINTS_Y - 1) != 0 // allocate space evenly to cell spacing + #define _CELL_GROW_VERTICAL 0 + #define _CELL_SPACING_VERTICAL (_SPACE_TO_SPREAD_VERTICAL / GRID_MAX_POINTS_Y - 1) + #else + #define _CELL_GROW_VERTICAL 0 + #define _CELL_SPACING_VERTICAL 0 + #endif + + #define CELL_WIDTH (CELL_TEXT_WIDTH + _CELL_GROW_HORIZONTAL) + #define CELL_HEIGHT (CELL_TEXT_HEIGHT + _CELL_GROW_VERTICAL) + + #define X_Axis_Interval (CELL_WIDTH + _CELL_SPACING_HORIZONTAL) + #define Y_Axis_Interval (CELL_HEIGHT + _CELL_SPACING_VERTICAL) + + #define _CELLS_WITH_SPACING_WIDTH ((GRID_MAX_POINTS_X * CELL_WIDTH) + ((GRID_MAX_POINTS_X - 1) * _CELL_SPACING_HORIZONTAL)) + #define _CELLS_WITH_SPACING_HEIGHT ((GRID_MAX_POINTS_Y * CELL_HEIGHT) + ((GRID_MAX_POINTS_Y - 1) * _CELL_SPACING_VERTICAL)) + #define _OUTLINE_PADDING_HORIZONTAL ((OUTLINE_INNER_WIDTH - _CELLS_WITH_SPACING_WIDTH) / 2) + #define _OUTLINE_PADDING_VERTICAL ((OUTLINE_INNER_HEIGHT - _CELLS_WITH_SPACING_HEIGHT) / 2) + + #define Rect_LU_X_POS (OUTLINE_LEFT_X + _OUTLINE_PADDING_HORIZONTAL) // top-left X of the first (bottom-left) cell + #define Rect_LU_Y_POS (OUTLINE_LEFT_Y + OUTLINE_INNER_HEIGHT - _OUTLINE_PADDING_VERTICAL - CELL_HEIGHT) // top-left Y of the first (bottom-left) cell + #define Rect_RD_X_POS (Rect_LU_X_POS + CELL_WIDTH) // bottom-right X of the first (bottom-left) cell + #define Rect_RD_Y_POS (Rect_LU_Y_POS + CELL_HEIGHT) // bottom-right Y of the first (bottom-left) cell #define TITLE_X 29 #define TITLE_Y 1