ソースを参照

✨ E3V2 (Enhanced) Mesh Viewer (#22844)

Miguel Risco-Castillo 2年前
コミット
8ab02df63a
コミッターのメールアドレスに関連付けられたアカウントが存在しません

+ 21
- 2
Marlin/src/lcd/e3v2/enhanced/dwin.cpp ファイルの表示

@@ -62,7 +62,7 @@
62 62
   #include "../../../feature/host_actions.h"
63 63
 #endif
64 64
 
65
-#if HAS_ONESTEP_LEVELING
65
+#if HAS_MESH || HAS_ONESTEP_LEVELING
66 66
   #include "../../../feature/bedlevel/bedlevel.h"
67 67
 #endif
68 68
 
@@ -78,6 +78,10 @@
78 78
   #include "../../../feature/powerloss.h"
79 79
 #endif
80 80
 
81
+#if HAS_MESH
82
+  #include "meshviewer.h"
83
+#endif
84
+
81 85
 #include <WString.h>
82 86
 #include <stdio.h>
83 87
 #include <string.h>
@@ -1661,7 +1665,7 @@ void DWIN_MeshLevelingStart() {
1661 1665
   #endif
1662 1666
 }
1663 1667
 
1664
-void DWIN_CompletedLeveling() { HMI_ReturnScreen(); }
1668
+void DWIN_CompletedLeveling() { DWIN_MeshViewer(); }
1665 1669
 
1666 1670
 #if HAS_MESH
1667 1671
   void DWIN_MeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
@@ -1921,6 +1925,17 @@ void DWIN_Redraw_screen() {
1921 1925
 
1922 1926
 #endif // ADVANCED_PAUSE_FEATURE
1923 1927
 
1928
+#if HAS_MESH
1929
+  void DWIN_MeshViewer() {
1930
+    if (!leveling_is_valid())
1931
+      DWIN_Popup_Continue(ICON_BLTouch, "Mesh viewer", "No valid mesh");
1932
+    else {
1933
+      HMI_SaveProcessID(WaitResponse);
1934
+      MeshViewer.Draw();
1935
+    }
1936
+  }
1937
+#endif
1938
+
1924 1939
 void HMI_LockScreen() {
1925 1940
   EncoderState encoder_diffState = get_encoder_state();
1926 1941
   if (encoder_diffState == ENCODER_DIFF_NO) return;
@@ -3185,6 +3200,9 @@ void Draw_AdvancedSettings_Menu() {
3185 3200
     #if ENABLED(SOUND_MENU_ITEM)
3186 3201
       ADDMENUITEM(ICON_Sound, F("Enable Sound"), onDrawEnableSound, SetEnableSound);
3187 3202
     #endif
3203
+    #if HAS_MESH
3204
+      ADDMENUITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer);
3205
+    #endif
3188 3206
     ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, Goto_LockScreen);
3189 3207
   }
3190 3208
   CurrentMenu->draw();
@@ -3403,6 +3421,7 @@ void Draw_Motion_Menu() {
3403 3421
       ADDMENUITEM(ICON_ManualMesh, GET_TEXT_F(MSG_LEVEL_BED), onDrawMenuItem, ManualMeshStart);
3404 3422
       MMeshMoveZItem = ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_MOVE_Z), onDrawMMeshMoveZ, SetMMeshMoveZ, &current_position.z);
3405 3423
       ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_UBL_CONTINUE_MESH), onDrawMenuItem, ManualMeshContinue);
3424
+      ADDMENUITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer);
3406 3425
       ADDMENUITEM(ICON_MeshSave, GET_TEXT_F(MSG_UBL_SAVE_MESH), onDrawMenuItem, ManualMeshSave);
3407 3426
     }
3408 3427
     CurrentMenu->draw();

+ 3
- 0
Marlin/src/lcd/e3v2/enhanced/dwin.h ファイルの表示

@@ -222,6 +222,9 @@ void DWIN_RebootScreen();
222 222
 // Utility and extensions
223 223
 void HMI_LockScreen();
224 224
 void DWIN_LockScreen(const bool flag = true);
225
+#if HAS_MESH
226
+  void DWIN_MeshViewer();
227
+#endif
225 228
 
226 229
 // HMI user control functions
227 230
 void HMI_Menu();

+ 1
- 0
Marlin/src/lcd/e3v2/enhanced/dwinui.h ファイルの表示

@@ -50,6 +50,7 @@
50 50
 #define ICON_ManualMesh           ICON_HotendTemp
51 51
 #define ICON_MeshNext             ICON_Axis
52 52
 #define ICON_MeshSave             ICON_WriteEEPROM
53
+#define ICON_MeshViewer           ICON_HotendTemp
53 54
 #define ICON_MoveZ0               ICON_HotendTemp
54 55
 #define ICON_Park                 ICON_Motion
55 56
 #define ICON_PIDcycles            ICON_ResumeEEPROM

+ 75
- 0
Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp ファイルの表示

@@ -0,0 +1,75 @@
1
+/**
2
+ * DWIN Mesh Viewer
3
+ * Author: Miguel A. Risco-Castillo
4
+ * version: 2.5
5
+ * Date: 2021/09/27
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Lesser General Public License as
9
+ * published by the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public License
18
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19
+ *
20
+ */
21
+
22
+#include "../../../inc/MarlinConfigPre.h"
23
+
24
+#if BOTH(DWIN_CREALITY_LCD_ENHANCED, HAS_MESH)
25
+
26
+#include "meshviewer.h"
27
+
28
+#include "../../../core/types.h"
29
+#include "../../marlinui.h"
30
+#include "dwin_lcd.h"
31
+#include "dwinui.h"
32
+#include "dwin.h"
33
+#include "../../../feature/bedlevel/bedlevel.h"
34
+
35
+MeshViewerClass MeshViewer;
36
+
37
+void MeshViewerClass::Draw() {
38
+  const int8_t mx = 30, my = 30;  // Margins
39
+  const int16_t stx = (DWIN_WIDTH - 2 * mx) / (GRID_MAX_POINTS_X - 1),  // Steps
40
+                sty = (DWIN_WIDTH - 2 * my) / (GRID_MAX_POINTS_Y - 1);
41
+  int8_t zmesh[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y], maxz =-127, minz = 127;
42
+  #define px(xp) (mx + (xp) * stx)
43
+  #define py(yp) (30 + DWIN_WIDTH - my - (yp) * sty)
44
+  #define rm(z) ((((z) - minz) * 10 / _MAX(1, (maxz - minz))) + 10)
45
+  #define DrawMeshValue(xp, yp, zv) DWINUI::Draw_Signed_Float(font6x12, 1, 2, px(xp) - 12, py(yp) - 6, zv)
46
+  #define DrawMeshHLine(yp) DWIN_Draw_HLine(HMI_data.SplitLine_Color, px(0), py(yp), DWIN_WIDTH - 2 * mx)
47
+  #define DrawMeshVLine(xp) DWIN_Draw_VLine(HMI_data.SplitLine_Color, px(xp), py(GRID_MAX_POINTS_Y - 1), DWIN_WIDTH - 2 * my)
48
+  GRID_LOOP(x, y) {
49
+    const float v = Z_VALUES(x,y) * 100;
50
+    zmesh[x][y] = v;
51
+    NOLESS(maxz, v);
52
+    NOMORE(minz, v);
53
+  }
54
+  Title.ShowCaption(F("Mesh viewer"));
55
+  DWINUI::ClearMenuArea();
56
+  DWINUI::Draw_Icon(ICON_Continue_E, 86, 305);
57
+  DWIN_Draw_Rectangle(0, HMI_data.SplitLine_Color, px(0), py(0), px(GRID_MAX_POINTS_X - 1), py(GRID_MAX_POINTS_Y - 1));
58
+  LOOP_S_L_N(x, 1, GRID_MAX_POINTS_X - 1) DrawMeshVLine(x);
59
+  LOOP_S_L_N(y, 1, GRID_MAX_POINTS_Y - 1) DrawMeshHLine(y);
60
+  LOOP_L_N(y, GRID_MAX_POINTS_Y) {
61
+    watchdog_refresh();
62
+    LOOP_L_N(x, GRID_MAX_POINTS_X) {
63
+      uint16_t color = DWINUI::RainbowInt(zmesh[x][y], _MIN(-5, minz), _MAX(5, maxz));
64
+      DWINUI::Draw_FillCircle(color, px(x), py(y), rm(zmesh[x][y]));
65
+      DrawMeshValue(x, y, Z_VALUES(x,y));
66
+    }
67
+  }
68
+  char str_1[6], str_2[6] = "";
69
+  ui.status_printf_P(0, PSTR("Mesh minZ: %s, maxZ: %s"),
70
+    dtostrf((float)minz / 100, 1, 2, str_1),
71
+    dtostrf((float)maxz / 100, 1, 2, str_2)
72
+  );
73
+}
74
+
75
+#endif // DWIN_CREALITY_LCD_ENHANCED && HAS_MESH

+ 28
- 0
Marlin/src/lcd/e3v2/enhanced/meshviewer.h ファイルの表示

@@ -0,0 +1,28 @@
1
+/**
2
+ * DWIN Mesh Viewer
3
+ * Author: Miguel A. Risco-Castillo
4
+ * version: 2.5
5
+ * Date: 2021/09/27
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Lesser General Public License as
9
+ * published by the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
+ * GNU General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public License
18
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19
+ *
20
+ */
21
+#pragma once
22
+
23
+class MeshViewerClass {
24
+public:
25
+  void Draw();
26
+};
27
+
28
+extern MeshViewerClass MeshViewer;

+ 4
- 4
Marlin/src/lcd/e3v2/jyersui/dwin.cpp ファイルの表示

@@ -3246,7 +3246,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
3246 3246
             break;
3247 3247
           case LEVELING_VIEW:
3248 3248
             if (draw)
3249
-              Draw_Menu_Item(row, ICON_Mesh, "Mesh Viewer", nullptr, true);
3249
+              Draw_Menu_Item(row, ICON_Mesh, GET_TEXT_F(MSG_MESH_VIEW), nullptr, true);
3250 3250
             else {
3251 3251
               #if ENABLED(AUTO_BED_LEVELING_UBL)
3252 3252
                 if (ubl.storage_slot < 0) {
@@ -3319,7 +3319,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
3319 3319
             break;
3320 3320
           case LEVELING_VIEW_MESH:
3321 3321
             if (draw)
3322
-              Draw_Menu_Item(row, ICON_PrintSize, "Mesh Viewer", nullptr, true);
3322
+              Draw_Menu_Item(row, ICON_PrintSize, GET_TEXT_F(MSG_MESH_VIEW), nullptr, true);
3323 3323
             else
3324 3324
               Draw_Menu(MeshViewer);
3325 3325
             break;
@@ -4070,9 +4070,9 @@ const char * CrealityDWINClass::Get_Menu_Title(uint8_t menu) {
4070 4070
     case InfoMain:          return "Info";
4071 4071
     #if HAS_MESH
4072 4072
       case Leveling:        return "Leveling";
4073
-      case LevelView:       return "Mesh View";
4073
+      case LevelView:       return GET_TEXT_F(MSG_MESH_VIEW);
4074 4074
       case LevelSettings:   return "Leveling Settings";
4075
-      case MeshViewer:      return "Mesh Viewer";
4075
+      case MeshViewer:      return GET_TEXT_F(MSG_MESH_VIEW);
4076 4076
       case LevelManual:     return "Manual Tuning";
4077 4077
     #endif
4078 4078
     #if ENABLED(AUTO_BED_LEVELING_UBL) && !HAS_BED_PROBE

+ 1
- 1
Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.cpp ファイルの表示

@@ -61,7 +61,7 @@ void LevelingMenu::onRedraw(draw_mode_t what) {
61 61
        .font(font_medium).colors(normal_btn)
62 62
        .tag(2).button(PROBE_BED_POS, GET_TEXT_F(MSG_PROBE_BED))
63 63
        .enabled(ENABLED(HAS_MESH))
64
-       .tag(3).button(SHOW_MESH_POS, GET_TEXT_F(MSG_SHOW_MESH))
64
+       .tag(3).button(SHOW_MESH_POS, GET_TEXT_F(MSG_MESH_VIEW))
65 65
        .enabled(ENABLED(HAS_MESH))
66 66
        .tag(4).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH))
67 67
        #undef  GRID_COLS

+ 1
- 1
Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/leveling_menu.cpp ファイルの表示

@@ -86,7 +86,7 @@ void LevelingMenu::onRedraw(draw_mode_t what) {
86 86
        .enabled(ENABLED(HAS_BED_PROBE))
87 87
        .tag(3).button(PROBE_BED_POS, GET_TEXT_F(MSG_PROBE_BED))
88 88
        .enabled(ENABLED(HAS_MESH))
89
-       .tag(4).button(SHOW_MESH_POS, GET_TEXT_F(MSG_SHOW_MESH))
89
+       .tag(4).button(SHOW_MESH_POS, GET_TEXT_F(MSG_MESH_VIEW))
90 90
        .enabled(ENABLED(HAS_MESH))
91 91
        .tag(5).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH))
92 92
        .enabled(ENABLED(G26_MESH_VALIDATION))

+ 1
- 1
Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h ファイルの表示

@@ -145,7 +145,7 @@ namespace Language_en {
145 145
   PROGMEM Language_Str MSG_LEVELING                 = u8"Leveling";
146 146
   PROGMEM Language_Str MSG_AXIS_LEVELING            = u8"Axis Leveling";
147 147
   PROGMEM Language_Str MSG_PROBE_BED                = u8"Probe Mesh";
148
-  PROGMEM Language_Str MSG_SHOW_MESH                = u8"View Mesh";
148
+  PROGMEM Language_Str MSG_MESH_VIEW                = u8"View Mesh";
149 149
   PROGMEM Language_Str MSG_PRINT_TEST               = u8"Print Test (PLA)";
150 150
   PROGMEM Language_Str MSG_MOVE_Z_TO_TOP            = u8"Raise Z to Top";
151 151
 

+ 1
- 0
Marlin/src/lcd/language/language_en.h ファイルの表示

@@ -157,6 +157,7 @@ namespace Language_en {
157 157
   LSTR MSG_NEXT_CORNER                    = _UxGT("Next Corner");
158 158
   LSTR MSG_MESH_EDITOR                    = _UxGT("Mesh Editor");
159 159
   LSTR MSG_EDIT_MESH                      = _UxGT("Edit Mesh");
160
+  LSTR MSG_MESH_VIEW                      = _UxGT("View Mesh");
160 161
   LSTR MSG_EDITING_STOPPED                = _UxGT("Mesh Editing Stopped");
161 162
   LSTR MSG_PROBING_POINT                  = _UxGT("Probing Point");
162 163
   LSTR MSG_MESH_X                         = _UxGT("Index X");

読み込み中…
キャンセル
保存