Browse Source

Move Menu: Select axis first, resolution after

Scott Lahteine 7 years ago
parent
commit
93b2833347
2 changed files with 100 additions and 57 deletions
  1. 3
    0
      Marlin/language_en.h
  2. 97
    57
      Marlin/ultralcd.cpp

+ 3
- 0
Marlin/language_en.h View File

@@ -141,6 +141,9 @@
141 141
 #ifndef MSG_MOVING
142 142
   #define MSG_MOVING                          "Moving..."
143 143
 #endif
144
+#ifndef MSG_FREE_XY
145
+  #define MSG_FREE_XY                         "Free XY"
146
+#endif
144 147
 #ifndef MSG_MOVE_X
145 148
   #define MSG_MOVE_X                          "Move X"
146 149
 #endif

+ 97
- 57
Marlin/ultralcd.cpp View File

@@ -1283,6 +1283,14 @@ KeepDrawing:
1283 1283
     MENU_BACK(MSG_MAIN);
1284 1284
 
1285 1285
     //
1286
+    // Move Axis
1287
+    //
1288
+    #if ENABLED(DELTA)
1289
+      if (axis_homed[Z_AXIS])
1290
+    #endif
1291
+        MENU_ITEM(submenu, MSG_MOVE_AXIS, lcd_move_menu);
1292
+
1293
+    //
1286 1294
     // Auto Home
1287 1295
     //
1288 1296
     MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
@@ -1310,11 +1318,6 @@ KeepDrawing:
1310 1318
     #endif
1311 1319
 
1312 1320
     //
1313
-    // Move Axis
1314
-    //
1315
-    MENU_ITEM(submenu, MSG_MOVE_AXIS, lcd_move_menu);
1316
-
1317
-    //
1318 1321
     // Disable Steppers
1319 1322
     //
1320 1323
     MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84"));
@@ -1557,58 +1560,48 @@ KeepDrawing:
1557 1560
    *
1558 1561
    */
1559 1562
 
1560
-  #if IS_KINEMATIC
1561
-    #define _MOVE_XYZ_ALLOWED (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
1562
-  #else
1563
-    #define _MOVE_XYZ_ALLOWED true
1564
-  #endif
1563
+  screenFunc_t _manual_move_func_ptr;
1565 1564
 
1566
-  void _lcd_move_menu_axis() {
1567
-    START_MENU();
1568
-    MENU_BACK(MSG_MOVE_AXIS);
1565
+  void lcd_move_menu_10mm() { move_menu_scale = 10.0; lcd_goto_screen(_manual_move_func_ptr); }
1566
+  void lcd_move_menu_1mm()  { move_menu_scale =  1.0; lcd_goto_screen(_manual_move_func_ptr); }
1567
+  void lcd_move_menu_01mm() { move_menu_scale =  0.1; lcd_goto_screen(_manual_move_func_ptr); }
1569 1568
 
1570
-    if (_MOVE_XYZ_ALLOWED) {
1571
-      MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_x);
1572
-      MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_y);
1573
-    }
1574
-
1575
-    if (move_menu_scale < 10.0) {
1576
-      if (_MOVE_XYZ_ALLOWED) MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_z);
1577
-
1578
-      #if ENABLED(SWITCHING_EXTRUDER)
1579
-        if (active_extruder)
1580
-          MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0"));
1581
-        else
1582
-          MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1"));
1583
-      #endif
1584
-
1585
-      MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_e);
1586
-      #if E_MANUAL > 1
1587
-        MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E1, lcd_move_e0);
1588
-        MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E2, lcd_move_e1);
1589
-        #if E_MANUAL > 2
1590
-          MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E3, lcd_move_e2);
1591
-          #if E_MANUAL > 3
1592
-            MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E4, lcd_move_e3);
1593
-          #endif
1594
-        #endif
1595
-      #endif
1569
+  void _lcd_move_distance_menu(AxisEnum axis, screenFunc_t func) {
1570
+    _manual_move_func_ptr = func;
1571
+    START_MENU();
1572
+    if (LCD_HEIGHT >= 4) {
1573
+      switch(axis) {
1574
+        case X_AXIS:
1575
+          STATIC_ITEM(MSG_MOVE_X, true, true); break;
1576
+        case Y_AXIS:
1577
+          STATIC_ITEM(MSG_MOVE_Y, true, true); break;
1578
+        case Z_AXIS:
1579
+          STATIC_ITEM(MSG_MOVE_Z, true, true); break;
1580
+        default:
1581
+          STATIC_ITEM(MSG_MOVE_E, true, true); break;
1582
+      }
1596 1583
     }
1584
+    MENU_BACK(MSG_MOVE_AXIS);
1585
+    if (axis == X_AXIS || axis == Y_AXIS)
1586
+      MENU_ITEM(submenu, MSG_MOVE_10MM, lcd_move_menu_10mm);
1587
+    MENU_ITEM(submenu, MSG_MOVE_1MM, lcd_move_menu_1mm);
1588
+    MENU_ITEM(submenu, MSG_MOVE_01MM, lcd_move_menu_01mm);
1597 1589
     END_MENU();
1598 1590
   }
1599
-
1600
-  void lcd_move_menu_10mm() {
1601
-    move_menu_scale = 10.0;
1602
-    _lcd_move_menu_axis();
1603
-  }
1604
-  void lcd_move_menu_1mm() {
1605
-    move_menu_scale = 1.0;
1606
-    _lcd_move_menu_axis();
1607
-  }
1608
-  void lcd_move_menu_01mm() {
1609
-    move_menu_scale = 0.1;
1610
-    _lcd_move_menu_axis();
1611
-  }
1591
+  void lcd_move_get_x_amount()        { _lcd_move_distance_menu(X_AXIS, lcd_move_x); }
1592
+  void lcd_move_get_y_amount()        { _lcd_move_distance_menu(Y_AXIS, lcd_move_y); }
1593
+  void lcd_move_get_z_amount()        { _lcd_move_distance_menu(Z_AXIS, lcd_move_z); }
1594
+  void lcd_move_get_e_amount()        { _lcd_move_distance_menu(E_AXIS, lcd_move_e); }
1595
+  #if E_MANUAL > 1
1596
+    void lcd_move_get_e0_amount()     { _lcd_move_distance_menu(E_AXIS, lcd_move_e0); }
1597
+    void lcd_move_get_e1_amount()     { _lcd_move_distance_menu(E_AXIS, lcd_move_e1); }
1598
+    #if E_MANUAL > 2
1599
+      void lcd_move_get_e2_amount()   { _lcd_move_distance_menu(E_AXIS, lcd_move_e2); }
1600
+      #if E_MANUAL > 3
1601
+        void lcd_move_get_e3_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e3); }
1602
+      #endif
1603
+    #endif
1604
+  #endif
1612 1605
 
1613 1606
   /**
1614 1607
    *
@@ -1616,16 +1609,63 @@ KeepDrawing:
1616 1609
    *
1617 1610
    */
1618 1611
 
1612
+  #if IS_KINEMATIC
1613
+    #define _MOVE_XYZ_ALLOWED (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
1614
+    #if ENABLED(DELTA)
1615
+      #define _MOVE_XY_ALLOWED (current_position[Z_AXIS] <= delta_clip_start_height)
1616
+      void lcd_lower_z_to_clip_height() {
1617
+        if (!no_reentrance) {
1618
+          current_position[Z_AXIS] = delta_clip_start_height;
1619
+          line_to_current(Z_AXIS);
1620
+          lcd_synchronize();
1621
+        }
1622
+      }
1623
+    #else
1624
+      #define _MOVE_XY_ALLOWED true
1625
+    #endif
1626
+  #else
1627
+    #define _MOVE_XYZ_ALLOWED true
1628
+    #define _MOVE_XY_ALLOWED true
1629
+  #endif
1630
+
1619 1631
   void lcd_move_menu() {
1620 1632
     START_MENU();
1621 1633
     MENU_BACK(MSG_PREPARE);
1622 1634
 
1623
-    if (_MOVE_XYZ_ALLOWED)
1624
-      MENU_ITEM(submenu, MSG_MOVE_10MM, lcd_move_menu_10mm);
1635
+    if (_MOVE_XYZ_ALLOWED) {
1636
+      if (_MOVE_XY_ALLOWED) {
1637
+        MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_get_x_amount);
1638
+        MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_get_y_amount);
1639
+      }
1640
+      #if ENABLED(DELTA)
1641
+        else
1642
+          MENU_ITEM(function, MSG_FREE_XY, lcd_lower_z_to_clip_height);
1643
+      #endif
1644
+
1645
+      MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_get_z_amount);
1646
+    }
1647
+    else
1648
+      MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
1649
+
1650
+    #if ENABLED(SWITCHING_EXTRUDER)
1651
+      if (active_extruder)
1652
+        MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0"));
1653
+      else
1654
+        MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1"));
1655
+    #endif
1656
+
1657
+    MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_get_e_amount);
1658
+    #if E_MANUAL > 1
1659
+      MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E1, lcd_move_get_e0_amount);
1660
+      MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E2, lcd_move_get_e1_amount);
1661
+      #if E_MANUAL > 2
1662
+        MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E3, lcd_move_get_e2_amount);
1663
+        #if E_MANUAL > 3
1664
+          MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E4, lcd_move_get_e3_amount);
1665
+        #endif
1666
+      #endif
1667
+    #endif
1625 1668
 
1626
-    MENU_ITEM(submenu, MSG_MOVE_1MM, lcd_move_menu_1mm);
1627
-    MENU_ITEM(submenu, MSG_MOVE_01MM, lcd_move_menu_01mm);
1628
-    //TODO:X,Y,Z,E
1629 1669
     END_MENU();
1630 1670
   }
1631 1671
 

Loading…
Cancel
Save