Просмотр исходного кода

- Gerber Editor: added multiple modes to lay a Region: 45-degrees, reverse 45-degrees, 90-degrees, reverse 90-degrees and free-angle. Added also key shortcuts 'T' and 'R' to cycle forward, respectively in reverse through the modes.

Marius Stanciu 6 лет назад
Родитель
Сommit
7218c2d920
2 измененных файлов с 69 добавлено и 62 удалено
  1. 1 1
      README.md
  2. 68 61
      flatcamEditors/FlatCAMGrbEditor.py

+ 1 - 1
README.md

@@ -14,7 +14,7 @@ CAD program, and create G-Code for Isolation routing.
 - Gerber Editor: added some messages to warn user if no selection exists when trying to do aperture deletion or aperture geometry deletion
 - Gerber Editor: added some messages to warn user if no selection exists when trying to do aperture deletion or aperture geometry deletion
 - fixed version check
 - fixed version check
 - added custom mouse cursors for some tools in Gerber Editor
 - added custom mouse cursors for some tools in Gerber Editor
-- Gerber Editor: work in progress to add multiple modes of drawing for the Region Tool
+- Gerber Editor: added multiple modes to lay a Region: 45-degrees, reverse 45-degrees, 90-degrees, reverse 90-degrees and free-angle. Added also key shortcuts 'T' and 'R' to cycle forward, respectively in reverse through the modes.
 
 
 16.04.2019
 16.04.2019
 
 

+ 68 - 61
flatcamEditors/FlatCAMGrbEditor.py

@@ -620,6 +620,7 @@ class FCRegion(FCShapeTool):
         QtGui.QGuiApplication.setOverrideCursor(self.cursor)
         QtGui.QGuiApplication.setOverrideCursor(self.cursor)
 
 
         self.mode = 1
         self.mode = 1
+        self.draw_app.app.inform.emit(_('Corner Mode 1: 45 degrees ...'))
 
 
         self.start_msg = _("Click on 1st point ...")
         self.start_msg = _("Click on 1st point ...")
 
 
@@ -628,7 +629,6 @@ class FCRegion(FCShapeTool):
 
 
         if self.inter_point is not None:
         if self.inter_point is not None:
             self.points.append(self.inter_point)
             self.points.append(self.inter_point)
-
         self.points.append(point)
         self.points.append(point)
 
 
         if len(self.points) > 0:
         if len(self.points) > 0:
@@ -694,13 +694,15 @@ class FCRegion(FCShapeTool):
                                 else:
                                 else:
                                     self.inter_point = (x, old_y + self.gridy_size * mx)
                                     self.inter_point = (x, old_y + self.gridy_size * mx)
                     elif self.mode == 3:
                     elif self.mode == 3:
-                        self.temp_points.append((old_x, y))
+                        self.inter_point = (old_x, y)
                     elif self.mode == 4:
                     elif self.mode == 4:
-                        self.temp_points.append((x, old_y))
+                        self.inter_point = (x, old_y)
+
                     if self.inter_point is not None:
                     if self.inter_point is not None:
                         self.temp_points.append(self.inter_point)
                         self.temp_points.append(self.inter_point)
                     else:
                     else:
                         self.inter_point = data
                         self.inter_point = data
+
                 self.temp_points.append(data)
                 self.temp_points.append(data)
             else:
             else:
                 self.inter_point = data
                 self.inter_point = data
@@ -714,67 +716,68 @@ class FCRegion(FCShapeTool):
             else:
             else:
                 return DrawToolUtilityShape(Point(self.temp_points).buffer(self.buf_val))
                 return DrawToolUtilityShape(Point(self.temp_points).buffer(self.buf_val))
 
 
-        if len(self.points) > 1:
+        if len(self.points) > 2:
             self.temp_points = [x for x in self.points]
             self.temp_points = [x for x in self.points]
-
             old_x = self.points[-1][0]
             old_x = self.points[-1][0]
             old_y = self.points[-1][1]
             old_y = self.points[-1][1]
             mx = abs(round((x - old_x) / self.gridx_size))
             mx = abs(round((x - old_x) / self.gridx_size))
             my = abs(round((y - old_y) / self.gridy_size))
             my = abs(round((y - old_y) / self.gridy_size))
 
 
-            if self.draw_app.app.ui.grid_snap_btn.isChecked():
-                if self.mode != 5:
-                    if self.mode == 1:
-                        if x > old_x:
-                            if mx > my:
-                                self.inter_point = (old_x + self.gridx_size * (mx - my), old_y)
-                            if mx < my:
-                                if y < old_y:
-                                    self.inter_point = (old_x, old_y - self.gridy_size * (my - mx))
-                                else:
-                                    self.inter_point = (old_x, old_y - self.gridy_size * (mx - my))
-                        if x < old_x:
-                            if mx > my:
-                                self.inter_point = (old_x - self.gridx_size * (mx - my), old_y)
-                            if mx < my:
-                                if y < old_y:
-                                    self.inter_point = (old_x, old_y - self.gridy_size * (my - mx))
-                                else:
-                                    self.inter_point = (old_x, old_y - self.gridy_size * (mx - my))
-                    elif self.mode == 2:
-                        if x > old_x:
-                            if mx > my:
-                                self.inter_point = (old_x + self.gridx_size * my, y)
-                            if mx < my:
-                                if y < old_y:
-                                    self.inter_point = (x, old_y - self.gridy_size * mx)
-                                else:
-                                    self.inter_point = (x, old_y + self.gridy_size * mx)
-                        if x < old_x:
-                            if mx > my:
-                                self.inter_point = (old_x - self.gridx_size * my, y)
-                            if mx < my:
-                                if y < old_y:
-                                    self.inter_point = (x, old_y - self.gridy_size * mx)
-                                else:
-                                    self.inter_point = (x, old_y + self.gridy_size * mx)
-                    elif self.mode == 3:
-                        self.temp_points.append((old_x, y))
-                    elif self.mode == 4:
-                        self.temp_points.append((x, old_y))
-
-                    self.temp_points.append(self.inter_point)
+            if mx and my:
+                if self.draw_app.app.ui.grid_snap_btn.isChecked():
+                    if self.mode != 5:
+                        if self.mode == 1:
+                            if x > old_x:
+                                if mx > my:
+                                    self.inter_point = (old_x + self.gridx_size * (mx - my), old_y)
+                                if mx < my:
+                                    if y < old_y:
+                                        self.inter_point = (old_x, old_y - self.gridy_size * (my - mx))
+                                    else:
+                                        self.inter_point = (old_x, old_y - self.gridy_size * (mx - my))
+                            if x < old_x:
+                                if mx > my:
+                                    self.inter_point = (old_x - self.gridx_size * (mx - my), old_y)
+                                if mx < my:
+                                    if y < old_y:
+                                        self.inter_point = (old_x, old_y - self.gridy_size * (my - mx))
+                                    else:
+                                        self.inter_point = (old_x, old_y - self.gridy_size * (mx - my))
+                        elif self.mode == 2:
+                            if x > old_x:
+                                if mx > my:
+                                    self.inter_point = (old_x + self.gridx_size * my, y)
+                                if mx < my:
+                                    if y < old_y:
+                                        self.inter_point = (x, old_y - self.gridy_size * mx)
+                                    else:
+                                        self.inter_point = (x, old_y + self.gridy_size * mx)
+                            if x < old_x:
+                                if mx > my:
+                                    self.inter_point = (old_x - self.gridx_size * my, y)
+                                if mx < my:
+                                    if y < old_y:
+                                        self.inter_point = (x, old_y - self.gridy_size * mx)
+                                    else:
+                                        self.inter_point = (x, old_y + self.gridy_size * mx)
+                        elif self.mode == 3:
+                            self.inter_point = (old_x, y)
+                        elif self.mode == 4:
+                            self.inter_point = (x, old_y)
 
 
+                        self.temp_points.append(self.inter_point)
             self.temp_points.append(data)
             self.temp_points.append(data)
+
             return DrawToolUtilityShape(LinearRing(self.temp_points).buffer(self.buf_val, join_style=1))
             return DrawToolUtilityShape(LinearRing(self.temp_points).buffer(self.buf_val, join_style=1))
         return None
         return None
 
 
     def make(self):
     def make(self):
         # self.geometry = LinearRing(self.points)
         # self.geometry = LinearRing(self.points)
-        self.geometry = DrawToolShape(Polygon(self.points).buffer(self.buf_val, join_style=2))
+        if len(self.points) > 2:
+            self.geometry = DrawToolShape(Polygon(self.points).buffer(self.buf_val, join_style=2))
         self.draw_app.in_action = False
         self.draw_app.in_action = False
         self.complete = True
         self.complete = True
-        self.draw_app.app.inform.emit(_("[success] Done. Region completed."))
+        self.draw_app.app.inform.emit(_("[success] Done."))
 
 
     def clean_up(self):
     def clean_up(self):
         self.draw_app.selected = []
         self.draw_app.selected = []
@@ -784,7 +787,10 @@ class FCRegion(FCShapeTool):
     def on_key(self, key):
     def on_key(self, key):
         if key == 'Backspace' or key == QtCore.Qt.Key_Backspace:
         if key == 'Backspace' or key == QtCore.Qt.Key_Backspace:
             if len(self.points) > 0:
             if len(self.points) > 0:
-                self.points = self.points[0:-1]
+                if self.mode == 5:
+                    self.points = self.points[0:-1]
+                else:
+                    self.points = self.points[0:-2]
                 # Remove any previous utility shape
                 # Remove any previous utility shape
                 self.draw_app.tool_shape.clear(update=False)
                 self.draw_app.tool_shape.clear(update=False)
                 geo = self.utility_geometry(data=(self.draw_app.snap_x, self.draw_app.snap_y))
                 geo = self.utility_geometry(data=(self.draw_app.snap_x, self.draw_app.snap_y))
@@ -794,19 +800,19 @@ class FCRegion(FCShapeTool):
         if key == 'T' or key == QtCore.Qt.Key_T:
         if key == 'T' or key == QtCore.Qt.Key_T:
             if self.mode == 1:
             if self.mode == 1:
                 self.mode = 2
                 self.mode = 2
-                msg =  _('Track Mode 2: Reverse 45 degrees ...')
+                msg =  _('Corner Mode 2: Reverse 45 degrees ...')
             elif self.mode == 2:
             elif self.mode == 2:
                 self.mode = 3
                 self.mode = 3
-                msg = _('Track Mode 3: 90 degrees ...')
+                msg = _('Corner Mode 3: 90 degrees ...')
             elif self.mode == 3:
             elif self.mode == 3:
                 self.mode = 4
                 self.mode = 4
-                msg = _('Track Mode 4: Reverse 90 degrees ...')
+                msg = _('Corner Mode 4: Reverse 90 degrees ...')
             elif self.mode == 4:
             elif self.mode == 4:
                 self.mode = 5
                 self.mode = 5
-                msg = _('Track Mode 5: Free angle ...')
+                msg = _('Corner Mode 5: Free angle ...')
             else:
             else:
                 self.mode = 1
                 self.mode = 1
-                msg = _('Track Mode 1: 45 degrees ...')
+                msg = _('Corner Mode 1: 45 degrees ...')
 
 
             # Remove any previous utility shape
             # Remove any previous utility shape
             self.draw_app.tool_shape.clear(update=False)
             self.draw_app.tool_shape.clear(update=False)
@@ -818,19 +824,19 @@ class FCRegion(FCShapeTool):
         if key == 'R' or key == QtCore.Qt.Key_R:
         if key == 'R' or key == QtCore.Qt.Key_R:
             if self.mode == 1:
             if self.mode == 1:
                 self.mode = 5
                 self.mode = 5
-                msg = _('Track Mode 5: Free angle ...')
+                msg = _('Corner Mode 5: Free angle ...')
             elif self.mode == 5:
             elif self.mode == 5:
                 self.mode = 4
                 self.mode = 4
-                msg = _('Track Mode 4: Reverse 90 degrees ...')
+                msg = _('Corner Mode 4: Reverse 90 degrees ...')
             elif self.mode == 4:
             elif self.mode == 4:
                 self.mode = 3
                 self.mode = 3
-                msg = _('Track Mode 3: 90 degrees ...')
+                msg = _('Corner Mode 3: 90 degrees ...')
             elif self.mode == 3:
             elif self.mode == 3:
                 self.mode = 2
                 self.mode = 2
-                msg = _('Track Mode 2: Reverse 45 degrees ...')
+                msg = _('Corner Mode 2: Reverse 45 degrees ...')
             else:
             else:
                 self.mode = 1
                 self.mode = 1
-                msg = _('Track Mode 1: 45 degrees ...')
+                msg = _('Corner Mode 1: 45 degrees ...')
 
 
             # Remove any previous utility shape
             # Remove any previous utility shape
             self.draw_app.tool_shape.clear(update=False)
             self.draw_app.tool_shape.clear(update=False)
@@ -868,7 +874,7 @@ class FCTrack(FCRegion):
 
 
         self.draw_app.in_action = False
         self.draw_app.in_action = False
         self.complete = True
         self.complete = True
-        self.draw_app.app.inform.emit(_("[success] Done. Path completed."))
+        self.draw_app.app.inform.emit(_("[success] Done."))
 
 
     def clean_up(self):
     def clean_up(self):
         self.draw_app.selected = []
         self.draw_app.selected = []
@@ -2874,6 +2880,7 @@ class FlatCAMGrbEditor(QtCore.QObject):
                             self.active_tool.complete = True
                             self.active_tool.complete = True
                             self.in_action = False
                             self.in_action = False
                             self.delete_utility_geometry()
                             self.delete_utility_geometry()
+                            self.app.inform.emit(_("[success] Done."))
                             self.select_tool('select')
                             self.select_tool('select')
                         else:
                         else:
                             self.app.cursor = QtGui.QCursor()
                             self.app.cursor = QtGui.QCursor()