Merge pull request #1 from eduard-sukharev/bed_level_grid_rendering

Add option for compact bed level grid view
This commit is contained in:
ssjrocks
2025-01-26 08:52:02 +10:00
committed by GitHub
4 changed files with 144 additions and 58 deletions
+1
View File
@@ -168,6 +168,7 @@
#define HIGH_SPEED 1 //高速模式 1:打开高速模式 150mm/s; 0:低速模式 80mm/s #define HIGH_SPEED 1 //高速模式 1:打开高速模式 150mm/s; 0:低速模式 80mm/s
#define HIGH_SPEED_1 1 //只开关高速的宏 #define HIGH_SPEED_1 1 //只开关高速的宏
#define SHOW_GRID_VALUES 1 //1 显示自动调平网格值 0 不显示自动调平网格值 #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 K8_EXTRUDER 0 //1 是K8挤出机 0 是精灵挤出机
#define USER_LEVEL_CHECK 1 // 调平校准使能 #define USER_LEVEL_CHECK 1 // 调平校准使能
#define WUHAN_CHENGE_PLATFORM 1 // 武汉改平台板 20230913_Rock #define WUHAN_CHENGE_PLATFORM 1 // 武汉改平台板 20230913_Rock
+47 -37
View File
@@ -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) 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) #if ENABLED(COMPACT_GRID_VALUES)
{ char valueStr[48] = "\0";
DWIN_Draw_FloatValue(true, true, 0, size, color, bcolor, iNum, fNum, x+2, y, -value); if (value < 0)
DWIN_Draw_String(false, true, font6x12, color, bcolor, x+2, y, F("-")); {
} DWIN_Draw_String(false, true, font6x12, bcolor == Color_Bg_Black ? Color_Blue : color, bcolor, x+5, y, F("-")); // draw minus sign above
else value *= -1;
{ } else {
DWIN_Draw_FloatValue(true, true, 0, size, color, bcolor, iNum, fNum, x+1, y, value); DWIN_Draw_String(false, true, font6x12, bcolor == Color_Bg_Black ? Color_Red : color, bcolor, x+5, y, F("+")); // draw plus sign above
DWIN_Draw_String(false, true, font6x12, color, bcolor, x, y, F("")); }
} if (value < 100) {
sprintf_P(valueStr, ".%02d", static_cast<int>(value & 0xFF));
} else {
sprintf_P(valueStr, "%d.%d", static_cast<int>((value & 0xFF) / 100), static_cast<int>(((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 #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) 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)
@@ -2269,16 +2285,14 @@ static uint16_t Choose_BG_Color(float offset_value)
if(checkkey!=Leveling&&checkkey!=Level_Value_Edit)return;//只有在调平界面才运行显示调平值 if(checkkey!=Leveling&&checkkey!=Level_Value_Edit)return;//只有在调平界面才运行显示调平值
//计算矩形区域 //计算矩形区域
rec_LU_x=Rect_LU_X_POS+mesh_Count->x*X_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_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_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_RD_y=Rect_RD_Y_POS-mesh_Count->y*Y_Axis_Interval;
//补偿值的位置 //补偿值的位置
value_LU_x=rec_LU_x+1; value_LU_x = rec_LU_x + (rec_RD_x - rec_LU_x) / 2 - CELL_TEXT_WIDTH / 2;
// value_LU_y=rec_LU_y+4; value_LU_y = rec_LU_y + (rec_RD_y - rec_LU_y) / 2 - CELL_TEXT_HEIGHT / 2 + 1;
value_LU_y=rec_LU_y+(rec_RD_y-rec_LU_y)/2-6;
//填充颜色 //填充颜色
if(!Set_En)rec_fill_color=Choose_BG_Color(z_offset_value);//自动设置 if(!Set_En)rec_fill_color=Choose_BG_Color(z_offset_value);//自动设置
else if(1==Set_En)rec_fill_color=Set_BG_Color; //手动填充选中块颜色, 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); //转换网格点 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_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_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_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_RD_y=Rect_RD_Y_POS-mesh_Count.y*Y_Axis_Interval;
//补偿值的位置 //补偿值的位置
value_LU_x=rec_LU_x+1; value_LU_x = rec_LU_x + (rec_RD_x - rec_LU_x) / 2 - CELL_TEXT_WIDTH / 2;
// value_LU_y=rec_LU_y+4; value_LU_y = rec_LU_y + (rec_RD_y - rec_LU_y) / 2 - CELL_TEXT_HEIGHT / 2 + 1;
value_LU_y=rec_LU_y+(rec_RD_y-rec_LU_y)/2-6;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Temp_Leveling_Value)) //点击了确认键 if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Temp_Leveling_Value)) //点击了确认键
{ {
checkkey = Leveling; checkkey = Leveling;
@@ -5813,16 +5825,14 @@ void HMI_Levling_Change()
{ {
xy_int8_t mesh_Count=Converted_Grid_Point(select_level.now); //转换网格点 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_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_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_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_RD_y=Rect_RD_Y_POS-mesh_Count.y*Y_Axis_Interval;
//补偿值的位置 //补偿值的位置
value_LU_x=rec_LU_x+1; value_LU_x = rec_LU_x + (rec_RD_x - rec_LU_x) / 2 - CELL_TEXT_WIDTH / 2;
// value_LU_y=rec_LU_y+4; value_LU_y = rec_LU_y + (rec_RD_y - rec_LU_y) / 2 - CELL_TEXT_HEIGHT / 2 + 1;
value_LU_y=rec_LU_y+(rec_RD_y-rec_LU_y)/2-6;
//临时代码 需要继续优化 //临时代码 需要继续优化
// xy_int8_t mesh_Count=Converted_Grid_Point(select_level.now); //转换网格点 // xy_int8_t mesh_Count=Converted_Grid_Point(select_level.now); //转换网格点
Draw_Dots_On_Screen(&mesh_Count,2,Select_Color); //设置字体背景色,不改变选中块颜色 Draw_Dots_On_Screen(&mesh_Count,2,Select_Color); //设置字体背景色,不改变选中块颜色
+2
View File
@@ -601,6 +601,8 @@ extern enum DC_language current_language;
// Color FE29 // Color FE29
#define Color_White 0xFFFF #define Color_White 0xFFFF
#define Color_Yellow 0xFE29 #define Color_Yellow 0xFE29
#define Color_Blue 0x19FF
#define Color_Red 0xF44F
#define Color_Bg_Window 0x31E8 // Popup background color #define Color_Bg_Window 0x31E8 // Popup background color
#define Color_Bg_Blue 0x1145 // Dark blue background color #define Color_Bg_Blue 0x1145 // Dark blue background color
#define Color_Bg_Black 0x0841 // Black background color #define Color_Bg_Black 0x0841 // Black background color
+93 -20
View File
@@ -4,35 +4,108 @@
#if ENABLED(DWIN_CREALITY_480_LCD) // #if ENABLED(DWIN_CREALITY_480_LCD) //
#elif ENABLED(DWIN_CREALITY_320_LCD)//3.2寸屏幕 #elif ENABLED(DWIN_CREALITY_320_LCD) //3.2-inch screen
//主界面 //Main Interface
#define LOGO_LITTLE_X 72 //小LOGO坐标 //Coordinates of the small logo
#define LOGO_LITTLE_X 72
#define LOGO_LITTLE_Y 36 #define LOGO_LITTLE_Y 36
//自动调平界面 //Auto-Leveling Interface
//编辑调平页面 //Edit Leveling Page
#define WORD_TITLE_X 29 #define WORD_TITLE_X 29
#define WORD_TITLE_Y 1 #define WORD_TITLE_Y 1
#define OUTLINE_LEFT_X 12//40 #if GRID_MAX_POINTS_X <= 5
#define OUTLINE_LEFT_Y 30//72 #define OUTLINE_HORIZONTAL_MARGIN 12
#define OUTLINE_RIGHT_X OUTLINE_LEFT_X+220//OUTLINE_LEFT_X+200//OUTLINE_LEFT_X+160 #else
#define OUTLINE_RIGHT_Y OUTLINE_LEFT_Y+220//OUTLINE_LEFT_Y+160 #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 //button——position
#define BUTTON_W 82 #define BUTTON_W 82
#define BUTTON_H 32 #define BUTTON_H 32
#define BUTTON_EDIT_X OUTLINE_LEFT_X #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_X OUTLINE_RIGHT_X-BUTTON_W
#define BUTTON_OK_Y BUTTON_EDIT_Y// #define BUTTON_OK_Y BUTTON_EDIT_Y
//数据坐标 //data coordinates
#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 Rect_RD_X_POS Rect_LU_X_POS+45//X_Axis_Interval//X_Axis_Interval//78 //第一个右下x坐标 #if ENABLED(SHOW_GRID_VALUES) && GRID_MAX_POINTS_X >= 7 && DISABLED(COMPACT_GRID_VALUES)
// #define Rect_RD_Y_POS Rect_LU_Y_POS+20//Y_Axis_Interval//Y_Axis_Interval//177-4 //第一个右下y坐标 #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"
#define Rect_RD_Y_POS (Rect_LU_Y_POS+30)//Y_Axis_Interval//Y_Axis_Interval//177-4 //第一个右下y坐标 #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
#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_X 29
#define TITLE_Y 1 #define TITLE_Y 1