From b91e492805567c9847504da9ac01f177a6178448 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 17 Apr 2019 17:34:15 +0300 Subject: [PATCH] - Gerber Editor: work in progress to add multiple modes of drawing for the Region Tool --- README.md | 1 + flatcamEditors/FlatCAMGrbEditor.py | 173 ++++++++++++++++++++++++++++- 2 files changed, 170 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 28f29376..07972183 100644 --- a/README.md +++ b/README.md @@ -14,6 +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 - fixed version check - 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 16.04.2019 diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py index 71dbae67..8891e0df 100644 --- a/flatcamEditors/FlatCAMGrbEditor.py +++ b/flatcamEditors/FlatCAMGrbEditor.py @@ -616,14 +616,19 @@ class FCRegion(FCShapeTool): QtGui.QGuiApplication.restoreOverrideCursor() except: pass - self.cursor = QtGui.QCursor(QtGui.QPixmap('share/aero.png')) QtGui.QGuiApplication.setOverrideCursor(self.cursor) + self.mode = 1 + self.start_msg = _("Click on 1st point ...") def click(self, point): self.draw_app.in_action = True + + if self.inter_point is not None: + self.points.append(self.inter_point) + self.points.append(point) if len(self.points) > 0: @@ -637,16 +642,129 @@ class FCRegion(FCShapeTool): self.gridy_size = float(self.draw_app.app.ui.grid_gap_y_entry.get_value()) def utility_geometry(self, data=None): + + x = data[0] + y = data[1] + if len(self.points) == 0: return DrawToolUtilityShape(Point(data).buffer(self.buf_val)) if len(self.points) == 1: self.temp_points = [x for x in self.points] - self.temp_points.append(data) - return DrawToolUtilityShape(LineString(self.temp_points).buffer(self.buf_val, join_style=1)) + + old_x = self.points[0][0] + old_y = self.points[0][1] + mx = abs(round((x - old_x) / self.gridx_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)) + if self.inter_point is not None: + self.temp_points.append(self.inter_point) + else: + self.inter_point = data + self.temp_points.append(data) + else: + self.inter_point = data + self.temp_points.append(data) + + if len(self.temp_points) > 1: + try: + return DrawToolUtilityShape(LineString(self.temp_points).buffer(self.buf_val, join_style=1)) + except: + pass + else: + return DrawToolUtilityShape(Point(self.temp_points).buffer(self.buf_val)) if len(self.points) > 1: self.temp_points = [x for x in self.points] + + old_x = self.points[-1][0] + old_y = self.points[-1][1] + mx = abs(round((x - old_x) / self.gridx_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) + self.temp_points.append(data) return DrawToolUtilityShape(LinearRing(self.temp_points).buffer(self.buf_val, join_style=1)) return None @@ -673,6 +791,54 @@ class FCRegion(FCShapeTool): self.draw_app.draw_utility_geometry(geo=geo) return _("Backtracked one point ...") + if key == 'T' or key == QtCore.Qt.Key_T: + if self.mode == 1: + self.mode = 2 + msg = _('Track Mode 2: Reverse 45 degrees ...') + elif self.mode == 2: + self.mode = 3 + msg = _('Track Mode 3: 90 degrees ...') + elif self.mode == 3: + self.mode = 4 + msg = _('Track Mode 4: Reverse 90 degrees ...') + elif self.mode == 4: + self.mode = 5 + msg = _('Track Mode 5: Free angle ...') + else: + self.mode = 1 + msg = _('Track Mode 1: 45 degrees ...') + + # Remove any previous utility shape + self.draw_app.tool_shape.clear(update=False) + geo = self.utility_geometry(data=(self.draw_app.snap_x, self.draw_app.snap_y)) + self.draw_app.draw_utility_geometry(geo=geo) + + return msg + + if key == 'R' or key == QtCore.Qt.Key_R: + if self.mode == 1: + self.mode = 5 + msg = _('Track Mode 5: Free angle ...') + elif self.mode == 5: + self.mode = 4 + msg = _('Track Mode 4: Reverse 90 degrees ...') + elif self.mode == 4: + self.mode = 3 + msg = _('Track Mode 3: 90 degrees ...') + elif self.mode == 3: + self.mode = 2 + msg = _('Track Mode 2: Reverse 45 degrees ...') + else: + self.mode = 1 + msg = _('Track Mode 1: 45 degrees ...') + + # Remove any previous utility shape + self.draw_app.tool_shape.clear(update=False) + geo = self.utility_geometry(data=(self.draw_app.snap_x, self.draw_app.snap_y)) + self.draw_app.draw_utility_geometry(geo=geo) + + return msg + class FCTrack(FCRegion): """ @@ -693,7 +859,6 @@ class FCTrack(FCRegion): QtGui.QGuiApplication.setOverrideCursor(self.cursor) self.draw_app.app.inform.emit(_('Track Mode 1: 45 degrees ...')) - self.mode = 1 def make(self): if len(self.temp_points) == 1: