diff --git a/FlatCAMApp.py b/FlatCAMApp.py
index 2c732823..46a635e7 100644
--- a/FlatCAMApp.py
+++ b/FlatCAMApp.py
@@ -8160,6 +8160,7 @@ class App(QtCore.QObject):
x0, y0 = old_coords
x1, y1 = coords
+
pt1 = (x0, y0)
pt2 = (x1, y0)
pt3 = (x1, y1)
diff --git a/README.md b/README.md
index e7f43d73..6eb5e47a 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ CAD program, and create G-Code for Isolation routing.
- fixed display of MultiGeo geometries in legacy graphic engine
- fixed Paint tool to work in legacy graphic engine
- fixed CutOut Tool to work in legacy graphic engine
+- fixed display of distance labels and code optimizations in ToolPaint and NCC Tool
21.09.2019
diff --git a/flatcamTools/ToolNonCopperClear.py b/flatcamTools/ToolNonCopperClear.py
index b375ddd9..528e0f24 100644
--- a/flatcamTools/ToolNonCopperClear.py
+++ b/flatcamTools/ToolNonCopperClear.py
@@ -470,6 +470,15 @@ class NonCopperClear(FlatCAMTool, Gerber):
self.bound_obj_name = ""
self.bound_obj = None
+ self.ncc_dia_list = []
+ self.iso_dia_list = []
+ self.has_offset = None
+ self.o_name = None
+ self.overlap = None
+ self.connect = None
+ self.contour = None
+ self.rest = None
+
self.first_click = False
self.cursor_pos = None
self.mouse_is_dragging = False
@@ -1059,27 +1068,27 @@ class NonCopperClear(FlatCAMTool, Gerber):
self.app.report_usage(_("on_paint_button_click"))
try:
- overlap = float(self.ncc_overlap_entry.get_value())
+ self.overlap = float(self.ncc_overlap_entry.get_value())
except ValueError:
# try to convert comma to decimal point. if it's still not working error message and return
try:
- overlap = float(self.ncc_overlap_entry.get_value().replace(',', '.'))
+ self.overlap = float(self.ncc_overlap_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit('[ERROR_NOTCL] %s' % _("Wrong value format entered, "
"use a number."))
return
- if overlap >= 1 or overlap < 0:
+ if self.overlap >= 1 or self.overlap < 0:
self.app.inform.emit('[ERROR_NOTCL] %s' % _("Overlap value must be between "
"0 (inclusive) and 1 (exclusive), "))
return
- connect = self.ncc_connect_cb.get_value()
- contour = self.ncc_contour_cb.get_value()
+ self.connect = self.ncc_connect_cb.get_value()
+ self.contour = self.ncc_contour_cb.get_value()
- has_offset = self.ncc_choice_offset_cb.isChecked()
+ self.has_offset = self.ncc_choice_offset_cb.isChecked()
- rest = self.ncc_rest_cb.get_value()
+ self.rest = self.ncc_rest_cb.get_value()
self.obj_name = self.object_combo.currentText()
# Get source object.
@@ -1094,34 +1103,34 @@ class NonCopperClear(FlatCAMTool, Gerber):
return
# use the selected tools in the tool table; get diameters for non-copper clear
- iso_dia_list = list()
+ self.iso_dia_list = list()
# use the selected tools in the tool table; get diameters for non-copper clear
- ncc_dia_list = list()
+ self.ncc_dia_list = list()
if self.tools_table.selectedItems():
for x in self.tools_table.selectedItems():
try:
- tooldia = float(self.tools_table.item(x.row(), 1).text())
+ self.tooldia = float(self.tools_table.item(x.row(), 1).text())
except ValueError:
# try to convert comma to decimal point. if it's still not working error message and return
try:
- tooldia = float(self.tools_table.item(x.row(), 1).text().replace(',', '.'))
+ self.tooldia = float(self.tools_table.item(x.row(), 1).text().replace(',', '.'))
except ValueError:
self.app.inform.emit('[ERROR_NOTCL] %s' % _("Wrong Tool Dia value format entered, "
"use a number."))
continue
if self.tools_table.cellWidget(x.row(), 4).currentText() == 'iso_op':
- iso_dia_list.append(tooldia)
+ self.iso_dia_list.append(self.tooldia)
else:
- ncc_dia_list.append(tooldia)
+ self.ncc_dia_list.append(self.tooldia)
else:
self.app.inform.emit('[ERROR_NOTCL] %s' % _("No selected tools in Tool Table."))
return
- o_name = '%s_ncc' % self.obj_name
+ self.o_name = '%s_ncc' % self.obj_name
- select_method = self.reference_radio.get_value()
- if select_method == 'itself':
+ self.select_method = self.reference_radio.get_value()
+ if self.select_method == 'itself':
self.bound_obj_name = self.object_combo.currentText()
# Get source object.
try:
@@ -1131,167 +1140,17 @@ class NonCopperClear(FlatCAMTool, Gerber):
return "Could not retrieve object: %s" % self.obj_name
self.clear_copper(ncc_obj=self.ncc_obj,
- ncctooldia=ncc_dia_list,
- isotooldia=iso_dia_list,
- has_offset=has_offset,
- outname=o_name,
- overlap=overlap,
- connect=connect,
- contour=contour,
- rest=rest)
- elif select_method == 'area':
+ ncctooldia=self.ncc_dia_list,
+ isotooldia=self.iso_dia_list,
+ has_offset=self.has_offset,
+ outname=self.o_name,
+ overlap=self.overlap,
+ connect=self.connect,
+ contour=self.contour,
+ rest=self.rest)
+ elif self.select_method == 'area':
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the start point of the area."))
- # use the first tool in the tool table; get the diameter
- # tooldia = float('%.4f' % float(self.tools_table.item(0, 1).text()))
-
- # To be called after clicking on the plot.
- def on_mouse_release(event):
- if self.app.is_legacy is False:
- event_pos = event.pos
- event_is_dragging = event.is_dragging
- right_button = 2
- else:
- event_pos = (event.xdata, event.ydata)
- event_is_dragging = self.app.plotcanvas.is_dragging
- right_button = 3
-
- try:
- x = float(event_pos[0])
- y = float(event_pos[1])
- except TypeError:
- return
- event_pos = self.app.plotcanvas.translate_coords((x, y))
-
- # do clear area only for left mouse clicks
- if event.button == 1:
- if self.first_click is False:
- self.first_click = True
- self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the end point of the paint area."))
-
- self.cursor_pos = self.app.plotcanvas.translate_coords(event_pos)
- if self.app.grid_status() == True:
- self.cursor_pos = self.app.geo_editor.snap(self.cursor_pos[0], self.cursor_pos[1])
- else:
- self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
- self.app.delete_selection_shape()
-
- curr_pos = self.app.plotcanvas.translate_coords(event_pos)
- if self.app.grid_status() == True:
- curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1])
-
- x0, y0 = self.cursor_pos[0], self.cursor_pos[1]
- x1, y1 = curr_pos[0], curr_pos[1]
- pt1 = (x0, y0)
- pt2 = (x1, y0)
- pt3 = (x1, y1)
- pt4 = (x0, y1)
- self.sel_rect.append(Polygon([pt1, pt2, pt3, pt4]))
- self.first_click = False
- return
-
- # modifiers = QtWidgets.QApplication.keyboardModifiers()
- #
- # if modifiers == QtCore.Qt.ShiftModifier:
- # mod_key = 'Shift'
- # elif modifiers == QtCore.Qt.ControlModifier:
- # mod_key = 'Control'
- # else:
- # mod_key = None
- #
- # if mod_key == self.app.defaults["global_mselect_key"]:
- # self.first_click = False
- # return
- #
- # self.sel_rect = cascaded_union(self.sel_rect)
- # self.clear_copper(ncc_obj=self.ncc_obj,
- # sel_obj=self.bound_obj,
- # ncctooldia=ncc_dia_list,
- # isotooldia=iso_dia_list,
- # has_offset=has_offset,
- # outname=o_name,
- # overlap=overlap,
- # connect=connect,
- # contour=contour,
- # rest=rest)
- #
- # self.app.plotcanvas.graph_event_disconnect('mouse_release', on_mouse_release)
- # self.app.plotcanvas.graph_event_disconnect('mouse_move', on_mouse_move)
- #
- # self.app.plotcanvas.graph_event_connect('mouse_press', self.app.on_mouse_click_over_plot)
- # self.app.plotcanvas.graph_event_connect('mouse_move', self.app.on_mouse_move_over_plot)
- # self.app.plotcanvas.graph_event_connect('mouse_release',
- # self.app.on_mouse_click_release_over_plot)
- elif event.button == right_button and self.mouse_is_dragging == False:
- self.first_click = False
-
- if self.app.is_legacy is False:
- self.app.plotcanvas.graph_event_disconnect('mouse_release', on_mouse_release)
- self.app.plotcanvas.graph_event_disconnect('mouse_move', on_mouse_move)
- else:
- self.app.plotcanvas.graph_event_disconnect(self.mr)
- self.app.plotcanvas.graph_event_disconnect(self.mm)
-
- self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press',
- self.app.on_mouse_click_over_plot)
- self.app.mm = self.app.plotcanvas.graph_event_connect('mouse_move',
- self.app.on_mouse_move_over_plot)
- self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release',
- self.app.on_mouse_click_release_over_plot)
-
- if len(self.sel_rect) == 0:
- return
-
- self.sel_rect = cascaded_union(self.sel_rect)
-
- self.clear_copper(ncc_obj=self.ncc_obj,
- sel_obj=self.bound_obj,
- ncctooldia=ncc_dia_list,
- isotooldia=iso_dia_list,
- has_offset=has_offset,
- outname=o_name,
- overlap=overlap,
- connect=connect,
- contour=contour,
- rest=rest)
-
- # called on mouse move
- def on_mouse_move(event):
- if self.app.is_legacy is False:
- event_pos = event.pos
- event_is_dragging = event.is_dragging
- right_button = 2
- else:
- event_pos = (event.xdata, event.ydata)
- event_is_dragging = self.app.plotcanvas.is_dragging
- right_button = 3
-
- try:
- x = float(event_pos[0])
- y = float(event_pos[1])
- except TypeError:
- return
- curr_pos = self.app.plotcanvas.translate_coords((x, y))
-
- # detect mouse dragging motion
- if event_is_dragging is True:
- self.mouse_is_dragging = True
- else:
- self.mouse_is_dragging = False
-
- # update the cursor position
- if self.app.grid_status() == True:
- # Update cursor
- curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1])
- if self.app.is_legacy is False:
- self.app.app_cursor.set_data(np.asarray([(curr_pos[0], curr_pos[1])]),
- symbol='++', edge_color='black', size=20)
-
- # draw the utility geometry
- if self.first_click:
- self.app.delete_selection_shape()
- self.app.draw_moving_selection_shape(old_coords=(self.cursor_pos[0], self.cursor_pos[1]),
- coords=(curr_pos[0], curr_pos[1]))
if self.app.is_legacy is False:
self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot)
self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot)
@@ -1301,9 +1160,9 @@ class NonCopperClear(FlatCAMTool, Gerber):
self.app.plotcanvas.graph_event_disconnect(self.app.mm)
self.app.plotcanvas.graph_event_disconnect(self.app.mr)
- self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', on_mouse_release)
- self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', on_mouse_move)
- elif select_method == 'box':
+ self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_mouse_release)
+ self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', self.on_mouse_move)
+ elif self.select_method == 'box':
self.bound_obj_name = self.box_combo.currentText()
# Get source object.
try:
@@ -1314,14 +1173,133 @@ class NonCopperClear(FlatCAMTool, Gerber):
self.clear_copper(ncc_obj=self.ncc_obj,
sel_obj=self.bound_obj,
- ncctooldia=ncc_dia_list,
- isotooldia=iso_dia_list,
- has_offset=has_offset,
- outname=o_name,
- overlap=overlap,
- connect=connect,
- contour=contour,
- rest=rest)
+ ncctooldia=self.ncc_dia_list,
+ isotooldia=self.iso_dia_list,
+ has_offset=self.has_offset,
+ outname=self.o_name,
+ overlap=self.overlap,
+ connect=self.connect,
+ contour=self.contour,
+ rest=self.rest)
+
+ # To be called after clicking on the plot.
+ def on_mouse_release(self, event):
+ if self.app.is_legacy is False:
+ event_pos = event.pos
+ event_is_dragging = event.is_dragging
+ right_button = 2
+ else:
+ event_pos = (event.xdata, event.ydata)
+ event_is_dragging = self.app.plotcanvas.is_dragging
+ right_button = 3
+
+ event_pos = self.app.plotcanvas.translate_coords(event_pos)
+
+ # do clear area only for left mouse clicks
+ if event.button == 1:
+ if self.first_click is False:
+ self.first_click = True
+ self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the end point of the paint area."))
+
+ self.cursor_pos = self.app.plotcanvas.translate_coords(event_pos)
+ if self.app.grid_status() == True:
+ self.cursor_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
+ else:
+ self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
+ self.app.delete_selection_shape()
+
+ if self.app.grid_status() == True:
+ curr_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
+ else:
+ curr_pos = (event_pos[0], event_pos[1])
+
+ x0, y0 = self.cursor_pos[0], self.cursor_pos[1]
+ x1, y1 = curr_pos[0], curr_pos[1]
+ pt1 = (x0, y0)
+ pt2 = (x1, y0)
+ pt3 = (x1, y1)
+ pt4 = (x0, y1)
+
+ self.sel_rect.append(Polygon([pt1, pt2, pt3, pt4]))
+ self.first_click = False
+ return
+
+ elif event.button == right_button and self.mouse_is_dragging == False:
+ self.first_click = False
+
+ if self.app.is_legacy is False:
+ self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release)
+ self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move)
+ else:
+ self.app.plotcanvas.graph_event_disconnect(self.mr)
+ self.app.plotcanvas.graph_event_disconnect(self.mm)
+
+ self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press',
+ self.app.on_mouse_click_over_plot)
+ self.app.mm = self.app.plotcanvas.graph_event_connect('mouse_move',
+ self.app.on_mouse_move_over_plot)
+ self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release',
+ self.app.on_mouse_click_release_over_plot)
+
+ if len(self.sel_rect) == 0:
+ return
+
+ self.sel_rect = cascaded_union(self.sel_rect)
+
+ self.clear_copper(ncc_obj=self.ncc_obj,
+ sel_obj=self.bound_obj,
+ ncctooldia=self.ncc_dia_list,
+ isotooldia=self.iso_dia_list,
+ has_offset=self.has_offset,
+ outname=self.o_name,
+ overlap=self.overlap,
+ connect=self.connect,
+ contour=self.contour,
+ rest=self.rest)
+
+ # called on mouse move
+ def on_mouse_move(self, event):
+ if self.app.is_legacy is False:
+ event_pos = event.pos
+ event_is_dragging = event.is_dragging
+ right_button = 2
+ else:
+ event_pos = (event.xdata, event.ydata)
+ event_is_dragging = self.app.plotcanvas.is_dragging
+ right_button = 3
+
+ curr_pos = self.app.plotcanvas.translate_coords(event_pos)
+
+ # detect mouse dragging motion
+ if event_is_dragging is True:
+ self.mouse_is_dragging = True
+ else:
+ self.mouse_is_dragging = False
+
+ # update the cursor position
+ if self.app.grid_status() == True:
+ # Update cursor
+ curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1])
+ if self.app.is_legacy is False:
+ self.app.app_cursor.set_data(np.asarray([(curr_pos[0], curr_pos[1])]),
+ symbol='++', edge_color='black', size=20)
+
+ # update the positions on status bar
+ self.app.ui.position_label.setText(" X: %.4f "
+ "Y: %.4f" % (curr_pos[0], curr_pos[1]))
+ if self.cursor_pos is None:
+ self.cursor_pos = (0, 0)
+
+ dx = curr_pos[0] - float(self.cursor_pos[0])
+ dy = curr_pos[1] - float(self.cursor_pos[1])
+ self.app.ui.rel_position_label.setText("Dx: %.4f Dy: "
+ "%.4f " % (dx, dy))
+
+ # draw the utility geometry
+ if self.first_click:
+ self.app.delete_selection_shape()
+ self.app.draw_moving_selection_shape(old_coords=(self.cursor_pos[0], self.cursor_pos[1]),
+ coords=(curr_pos[0], curr_pos[1]))
def clear_copper(self, ncc_obj,
sel_obj=None,
diff --git a/flatcamTools/ToolPaint.py b/flatcamTools/ToolPaint.py
index 8d9a9ead..d4863a88 100644
--- a/flatcamTools/ToolPaint.py
+++ b/flatcamTools/ToolPaint.py
@@ -357,6 +357,13 @@ class ToolPaint(FlatCAMTool, Gerber):
self.bound_obj_name = ""
self.bound_obj = None
+ self.tooldia_list = []
+ self.sel_rect = None
+ self.o_name = None
+ self.overlap = None
+ self.connect = None
+ self.contour = None
+
self.units = ''
self.paint_tools = {}
self.tooluid = 0
@@ -919,17 +926,17 @@ class ToolPaint(FlatCAMTool, Gerber):
self.app.inform.emit(_("Paint Tool. Reading parameters."))
try:
- overlap = float(self.paintoverlap_entry.get_value())
+ self.overlap = float(self.paintoverlap_entry.get_value())
except ValueError:
# try to convert comma to decimal point. if it's still not working error message and return
try:
- overlap = float(self.paintoverlap_entry.get_value().replace(',', '.'))
+ self.overlap = float(self.paintoverlap_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
- if overlap >= 1 or overlap < 0:
+ if self.overlap >= 1 or self.overlap < 0:
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Overlap value must be between 0 (inclusive) and 1 (exclusive)"))
return
@@ -937,9 +944,9 @@ class ToolPaint(FlatCAMTool, Gerber):
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Click inside the desired polygon."))
- connect = self.pathconnect_cb.get_value()
- contour = self.paintcontour_cb.get_value()
- select_method = self.selectmethod_combo.get_value()
+ self.connect = self.pathconnect_cb.get_value()
+ self.contour = self.paintcontour_cb.get_value()
+ self.select_method = self.selectmethod_combo.get_value()
self.obj_name = self.obj_combo.currentText()
@@ -969,34 +976,34 @@ class ToolPaint(FlatCAMTool, Gerber):
o_name = '%s_multitool_paint' % self.obj_name
# use the selected tools in the tool table; get diameters
- tooldia_list = list()
+ self.tooldia_list = list()
if self.tools_table.selectedItems():
for x in self.tools_table.selectedItems():
try:
- tooldia = float(self.tools_table.item(x.row(), 1).text())
+ self.tooldia = float(self.tools_table.item(x.row(), 1).text())
except ValueError:
# try to convert comma to decimal point. if it's still not working error message and return
try:
- tooldia = float(self.tools_table.item(x.row(), 1).text().replace(',', '.'))
+ self.tooldia = float(self.tools_table.item(x.row(), 1).text().replace(',', '.'))
except ValueError:
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
continue
- tooldia_list.append(tooldia)
+ self.tooldia_list.append(self.tooldia)
else:
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("No selected tools in Tool Table."))
return
- if select_method == "all":
+ if self.select_method == "all":
self.paint_poly_all(self.paint_obj,
- tooldia=tooldia_list,
- outname=o_name,
- overlap=overlap,
- connect=connect,
- contour=contour)
+ tooldia=self.tooldia_list,
+ outname=self.o_name,
+ overlap=self.overlap,
+ connect=self.connect,
+ contour=self.contour)
- elif select_method == "single":
+ elif self.select_method == "single":
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Click inside the desired polygon."))
@@ -1019,10 +1026,10 @@ class ToolPaint(FlatCAMTool, Gerber):
self.paint_poly(self.paint_obj,
inside_pt=[pos[0], pos[1]],
- tooldia=tooldia_list,
- overlap=overlap,
- connect=connect,
- contour=contour)
+ tooldia=self.tooldia_list,
+ overlap=self.overlap,
+ connect=self.connect,
+ contour=self.contour)
self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press',
self.app.on_mouse_click_over_plot)
self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release',
@@ -1036,128 +1043,10 @@ class ToolPaint(FlatCAMTool, Gerber):
self.app.plotcanvas.graph_event_disconnect(self.app.mp)
self.mp = self.app.plotcanvas.graph_event_connect('mouse_press', doit)
- elif select_method == "area":
+ elif self.select_method == "area":
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Click the start point of the paint area."))
- # use the first tool in the tool table; get the diameter
- # tooldia = float('%.4f' % float(self.tools_table.item(0, 1).text()))
-
- # To be called after clicking on the plot.
- def on_mouse_release(event):
- if self.app.is_legacy is False:
- event_pos = event.pos
- event_is_dragging = event.is_dragging
- right_button = 2
- else:
- event_pos = (event.xdata, event.ydata)
- event_is_dragging = self.app.plotcanvas.is_dragging
- right_button = 3
-
- try:
- x = float(event_pos[0])
- y = float(event_pos[1])
- except TypeError:
- return
-
- event_pos = (x, y)
-
- # do paint single only for left mouse clicks
- if event.button == 1:
- if not self.first_click:
- self.first_click = True
- self.app.inform.emit('[WARNING_NOTCL] %s' %
- _("Click the end point of the paint area."))
-
- self.cursor_pos = self.app.plotcanvas.translate_coords(event_pos)
- if self.app.grid_status() == True:
- self.cursor_pos = self.app.geo_editor.snap(self.cursor_pos[0], self.cursor_pos[1])
- else:
- self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
- self.app.delete_selection_shape()
-
- curr_pos = self.app.plotcanvas.translate_coords(event_pos)
- if self.app.grid_status() == True:
- curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1])
-
- x0, y0 = self.cursor_pos[0], self.cursor_pos[1]
- x1, y1 = curr_pos[0], curr_pos[1]
- pt1 = (x0, y0)
- pt2 = (x1, y0)
- pt3 = (x1, y1)
- pt4 = (x0, y1)
- self.sel_rect.append(Polygon([pt1, pt2, pt3, pt4]))
- self.first_click = False
- return
-
- elif event.button == right_button and self.mouse_is_dragging is False:
- self.first_click = False
-
- if self.app.is_legacy is False:
- self.app.plotcanvas.graph_event_disconnect('mouse_release', on_mouse_release)
- self.app.plotcanvas.graph_event_disconnect('mouse_move', on_mouse_move)
- else:
- self.app.plotcanvas.graph_event_disconnect(self.mr)
- self.app.plotcanvas.graph_event_disconnect(self.mm)
-
- self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press',
- self.app.on_mouse_click_over_plot)
- self.app.mm = self.app.plotcanvas.graph_event_connect('mouse_move',
- self.app.on_mouse_move_over_plot)
- self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release',
- self.app.on_mouse_click_release_over_plot)
-
- if len(self.sel_rect) == 0:
- return
-
- self.sel_rect = cascaded_union(self.sel_rect)
- self.paint_poly_area(obj=self.paint_obj,
- tooldia=tooldia_list,
- sel_obj=self.sel_rect,
- outname=o_name,
- overlap=overlap,
- connect=connect,
- contour=contour)
-
- # called on mouse move
- def on_mouse_move(event):
- if self.app.is_legacy is False:
- event_pos = event.pos
- event_is_dragging = event.is_dragging
- right_button = 2
- else:
- event_pos = (event.xdata, event.ydata)
- event_is_dragging = self.app.plotcanvas.is_dragging
- right_button = 3
-
- try:
- x = float(event_pos[0])
- y = float(event_pos[1])
- except TypeError:
- return
-
- curr_pos = self.app.plotcanvas.translate_coords((x, y))
-
- # detect mouse dragging motion
- if event_is_dragging == 1:
- self.mouse_is_dragging = True
- else:
- self.mouse_is_dragging = False
-
- # update the cursor position
- if self.app.grid_status() == True:
- # Update cursor
- curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1])
- if self.app.is_legacy is False:
- self.app.app_cursor.set_data(np.asarray([(curr_pos[0], curr_pos[1])]),
- symbol='++', edge_color='black', size=20)
-
- # draw the utility geometry
- if self.first_click:
- self.app.delete_selection_shape()
- self.app.draw_moving_selection_shape(old_coords=(self.cursor_pos[0], self.cursor_pos[1]),
- coords=(curr_pos[0], curr_pos[1]))
-
if self.app.is_legacy is False:
self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot)
self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot)
@@ -1167,10 +1056,10 @@ class ToolPaint(FlatCAMTool, Gerber):
self.app.plotcanvas.graph_event_disconnect(self.app.mm)
self.app.plotcanvas.graph_event_disconnect(self.app.mr)
- self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', on_mouse_release)
- self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', on_mouse_move)
+ self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_mouse_release)
+ self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', self.on_mouse_move)
- elif select_method == 'ref':
+ elif self.select_method == 'ref':
self.bound_obj_name = self.box_combo.currentText()
# Get source object.
try:
@@ -1183,11 +1072,137 @@ class ToolPaint(FlatCAMTool, Gerber):
self.paint_poly_ref(obj=self.paint_obj,
sel_obj=self.bound_obj,
- tooldia=tooldia_list,
- overlap=overlap,
- outname=o_name,
- connect=connect,
- contour=contour)
+ tooldia=self.tooldia_list,
+ overlap=self.overlap,
+ outname=self.o_name,
+ connect=self.connect,
+ contour=self.contour)
+
+ # To be called after clicking on the plot.
+ def on_mouse_release(self, event):
+ if self.app.is_legacy is False:
+ event_pos = event.pos
+ event_is_dragging = event.is_dragging
+ right_button = 2
+ else:
+ event_pos = (event.xdata, event.ydata)
+ event_is_dragging = self.app.plotcanvas.is_dragging
+ right_button = 3
+
+ try:
+ x = float(event_pos[0])
+ y = float(event_pos[1])
+ except TypeError:
+ return
+
+ event_pos = (x, y)
+
+ # do paint single only for left mouse clicks
+ if event.button == 1:
+ if not self.first_click:
+ self.first_click = True
+ self.app.inform.emit('[WARNING_NOTCL] %s' %
+ _("Click the end point of the paint area."))
+
+ self.cursor_pos = self.app.plotcanvas.translate_coords(event_pos)
+ if self.app.grid_status() == True:
+ self.cursor_pos = self.app.geo_editor.snap(self.cursor_pos[0], self.cursor_pos[1])
+ else:
+ self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
+ self.app.delete_selection_shape()
+
+ curr_pos = self.app.plotcanvas.translate_coords(event_pos)
+ if self.app.grid_status() == True:
+ curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1])
+
+ x0, y0 = self.cursor_pos[0], self.cursor_pos[1]
+ x1, y1 = curr_pos[0], curr_pos[1]
+ pt1 = (x0, y0)
+ pt2 = (x1, y0)
+ pt3 = (x1, y1)
+ pt4 = (x0, y1)
+ self.sel_rect.append(Polygon([pt1, pt2, pt3, pt4]))
+ self.first_click = False
+ return
+
+ elif event.button == right_button and self.mouse_is_dragging is False:
+ self.first_click = False
+
+ if self.app.is_legacy is False:
+ self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release)
+ self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move)
+ else:
+ self.app.plotcanvas.graph_event_disconnect(self.mr)
+ self.app.plotcanvas.graph_event_disconnect(self.mm)
+
+ self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press',
+ self.app.on_mouse_click_over_plot)
+ self.app.mm = self.app.plotcanvas.graph_event_connect('mouse_move',
+ self.app.on_mouse_move_over_plot)
+ self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release',
+ self.app.on_mouse_click_release_over_plot)
+
+ if len(self.sel_rect) == 0:
+ return
+
+ self.sel_rect = cascaded_union(self.sel_rect)
+ self.paint_poly_area(obj=self.paint_obj,
+ tooldia=self.tooldia_list,
+ sel_obj=self.sel_rect,
+ outname=self.o_name,
+ overlap=self.overlap,
+ connect=self.connect,
+ contour=self.contour)
+
+ # called on mouse move
+ def on_mouse_move(self, event):
+ if self.app.is_legacy is False:
+ event_pos = event.pos
+ event_is_dragging = event.is_dragging
+ right_button = 2
+ else:
+ event_pos = (event.xdata, event.ydata)
+ event_is_dragging = self.app.plotcanvas.is_dragging
+ right_button = 3
+
+ try:
+ x = float(event_pos[0])
+ y = float(event_pos[1])
+ except TypeError:
+ return
+
+ curr_pos = self.app.plotcanvas.translate_coords((x, y))
+
+ # detect mouse dragging motion
+ if event_is_dragging == 1:
+ self.mouse_is_dragging = True
+ else:
+ self.mouse_is_dragging = False
+
+ # update the cursor position
+ if self.app.grid_status() == True:
+ # Update cursor
+ curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1])
+ if self.app.is_legacy is False:
+ self.app.app_cursor.set_data(np.asarray([(curr_pos[0], curr_pos[1])]),
+ symbol='++', edge_color='black', size=20)
+
+ # update the positions on status bar
+ self.app.ui.position_label.setText(" X: %.4f "
+ "Y: %.4f" % (curr_pos[0], curr_pos[1]))
+ if self.cursor_pos is None:
+ self.cursor_pos = (0, 0)
+
+ dx = curr_pos[0] - float(self.cursor_pos[0])
+ dy = curr_pos[1] - float(self.cursor_pos[1])
+ self.app.ui.rel_position_label.setText("Dx: %.4f Dy: "
+ "%.4f " % (dx, dy))
+
+ # draw the utility geometry
+ if self.first_click:
+ self.app.delete_selection_shape()
+ self.app.draw_moving_selection_shape(old_coords=(self.cursor_pos[0], self.cursor_pos[1]),
+ coords=(curr_pos[0], curr_pos[1]))
def paint_poly(self, obj,
inside_pt=None,