Browse Source

- in Paint and NCC Tools made sure that using the key ESCAPE to cancel the tool will not create mouse events issues
- some updates in Tcl commands Paint and CopperClear data dicts

Marius Stanciu 5 years ago
parent
commit
c0a4e2f3cc

+ 3 - 0
CHANGELOG.md

@@ -17,6 +17,9 @@ CHANGELOG for FlatCAM beta
 - NCC Tool - now the tools can be reordered (if the order UI radio is set to 'no')
 - remade the UI in Paint Tool and the tools in tools table ca now be reordered (if the order UI radio is set to 'no')
 - some updates in NCC Tool using code from Paint Tool
+- in Paint and NCC Tools made sure that using the key ESCAPE to cancel the tool will not create mouse events issues
+- some updates in Tcl commands Paint and CopperClear data dicts
+
 
 13.06.2020
 

+ 11 - 11
appDatabase.py

@@ -1621,19 +1621,19 @@ class ToolsDB2(QtWidgets.QWidget):
         self.grid3.addWidget(self.paintoverlap_entry, 1, 1)
 
         # Margin
-        marginlabel = QtWidgets.QLabel('%s:' % _('Margin'))
+        marginlabel = QtWidgets.QLabel('%s:' % _('Offset'))
         marginlabel.setToolTip(
             _("Distance by which to avoid\n"
               "the edges of the polygon to\n"
               "be painted.")
         )
-        self.paintmargin_entry = FCDoubleSpinner()
-        self.paintmargin_entry.set_precision(self.decimals)
-        self.paintmargin_entry.set_range(-9999.9999, 9999.9999)
-        self.paintmargin_entry.setObjectName('gdb_p_margin')
+        self.paint_offset_entry = FCDoubleSpinner()
+        self.paint_offset_entry.set_precision(self.decimals)
+        self.paint_offset_entry.set_range(-9999.9999, 9999.9999)
+        self.paint_offset_entry.setObjectName('gdb_p_offset')
 
         self.grid3.addWidget(marginlabel, 2, 0)
-        self.grid3.addWidget(self.paintmargin_entry, 2, 1)
+        self.grid3.addWidget(self.paint_offset_entry, 2, 1)
 
         # Method
         methodlabel = QtWidgets.QLabel('%s:' % _('Method'))
@@ -1899,7 +1899,7 @@ class ToolsDB2(QtWidgets.QWidget):
 
             # Paint
             "tools_paintoverlap":       self.paintoverlap_entry,
-            "tools_paintmargin":        self.paintmargin_entry,
+            "tools_paintoffset":       self.paint_offset_entry,
             "tools_paintmethod":        self.paintmethod_combo,
             "tools_pathconnect":        self.pathconnect_cb,
             "tools_paintcontour":       self.paintcontour_cb,
@@ -1952,7 +1952,7 @@ class ToolsDB2(QtWidgets.QWidget):
 
             # Paint
             'gdb_p_overlap':        "tools_paintoverlap",
-            'gdb_p_margin':         "tools_paintmargin",
+            'gdb_p_offset':         "tools_paintoffset",
             'gdb_p_method':         "tools_paintmethod",
             'gdb_p_connect':        "tools_pathconnect",
             'gdb_p_contour':        "tools_paintcontour",
@@ -2210,7 +2210,7 @@ class ToolsDB2(QtWidgets.QWidget):
 
             # Paint
             "tools_paintoverlap":       float(self.app.defaults["tools_paintoverlap"]),
-            "tools_paintmargin":        float(self.app.defaults["tools_paintmargin"]),
+            "tools_paintoffset":        float(self.app.defaults["tools_paintoffset"]),
             "tools_paintmethod":        self.app.defaults["tools_paintmethod"],
             "tools_pathconnect":        self.app.defaults["tools_pathconnect"],
             "tools_paintcontour":       self.app.defaults["tools_paintcontour"],
@@ -2656,8 +2656,8 @@ class ToolsDB2(QtWidgets.QWidget):
             # Paint Tool
             elif wdg_name == "gdb_p_overlap":
                 self.db_tool_dict[tool_id]['data']['tools_paintoverlap'] = val
-            elif wdg_name == "gdb_p_margin":
-                self.db_tool_dict[tool_id]['data']['tools_paintmargin'] = val
+            elif wdg_name == "gdb_p_offset":
+                self.db_tool_dict[tool_id]['data']['tools_paintoffset'] = val
             elif wdg_name == "gdb_p_method":
                 self.db_tool_dict[tool_id]['data']['tools_paintmethod'] = val
             elif wdg_name == "gdb_p_connect":

+ 2 - 2
appEditors/AppGeoEditor.py

@@ -557,8 +557,8 @@ class PaintOptionsTool(AppTool):
         else:
             self.paintoverlap_entry.set_value(0.0)
 
-        if self.app.defaults["tools_paintmargin"]:
-            self.paintmargin_entry.set_value(self.app.defaults["tools_paintmargin"])
+        if self.app.defaults["tools_paintoffset"]:
+            self.paintmargin_entry.set_value(self.app.defaults["tools_paintoffset"])
         else:
             self.paintmargin_entry.set_value(0.0)
 

+ 1 - 1
appGUI/preferences/PreferencesUIManager.py

@@ -391,7 +391,7 @@ class PreferencesUIManager:
             "tools_painttooldia": self.ui.tools_defaults_form.tools_paint_group.painttooldia_entry,
             "tools_paintorder": self.ui.tools_defaults_form.tools_paint_group.paint_order_radio,
             "tools_paintoverlap": self.ui.tools_defaults_form.tools_paint_group.paintoverlap_entry,
-            "tools_paintmargin": self.ui.tools_defaults_form.tools_paint_group.paintmargin_entry,
+            "tools_paintoffset": self.ui.tools_defaults_form.tools_paint_group.paintmargin_entry,
             "tools_paintmethod": self.ui.tools_defaults_form.tools_paint_group.paintmethod_combo,
             "tools_selectmethod": self.ui.tools_defaults_form.tools_paint_group.selectmethod_combo,
             "tools_paint_area_shape": self.ui.tools_defaults_form.tools_paint_group.area_shape_radio,

+ 63 - 43
appParsers/ParseHPGL2.py

@@ -52,49 +52,69 @@ class HPGL2:
 
         self.default_data = {}
         self.default_data.update({
-            "name": '_ncc',
-            "plot": self.app.defaults["geometry_plot"],
-            "cutz": self.app.defaults["geometry_cutz"],
-            "vtipdia": self.app.defaults["geometry_vtipdia"],
-            "vtipangle": self.app.defaults["geometry_vtipangle"],
-            "travelz": self.app.defaults["geometry_travelz"],
-            "feedrate": self.app.defaults["geometry_feedrate"],
-            "feedrate_z": self.app.defaults["geometry_feedrate_z"],
-            "feedrate_rapid": self.app.defaults["geometry_feedrate_rapid"],
-            "dwell": self.app.defaults["geometry_dwell"],
-            "dwelltime": self.app.defaults["geometry_dwelltime"],
-            "multidepth": self.app.defaults["geometry_multidepth"],
-            "ppname_g": self.app.defaults["geometry_ppname_g"],
-            "depthperpass": self.app.defaults["geometry_depthperpass"],
-            "extracut": self.app.defaults["geometry_extracut"],
-            "extracut_length": self.app.defaults["geometry_extracut_length"],
-            "toolchange": self.app.defaults["geometry_toolchange"],
-            "toolchangez": self.app.defaults["geometry_toolchangez"],
-            "endz": self.app.defaults["geometry_endz"],
-            "endxy": self.app.defaults["geometry_endxy"],
-            "area_exclusion": self.app.defaults["geometry_area_exclusion"],
-            "area_shape": self.app.defaults["geometry_area_shape"],
-            "area_strategy": self.app.defaults["geometry_area_strategy"],
-            "area_overz": self.app.defaults["geometry_area_overz"],
-
-            "spindlespeed": self.app.defaults["geometry_spindlespeed"],
-            "toolchangexy": self.app.defaults["geometry_toolchangexy"],
-            "startz": self.app.defaults["geometry_startz"],
-
-            "tooldia": self.app.defaults["tools_painttooldia"],
-            "paintmargin": self.app.defaults["tools_paintmargin"],
-            "paintmethod": self.app.defaults["tools_paintmethod"],
-            "selectmethod": self.app.defaults["tools_selectmethod"],
-            "pathconnect": self.app.defaults["tools_pathconnect"],
-            "paintcontour": self.app.defaults["tools_paintcontour"],
-            "paintoverlap": self.app.defaults["tools_paintoverlap"],
-
-            "nccoverlap": self.app.defaults["tools_nccoverlap"],
-            "nccmargin": self.app.defaults["tools_nccmargin"],
-            "nccmethod": self.app.defaults["tools_nccmethod"],
-            "nccconnect": self.app.defaults["tools_nccconnect"],
-            "ncccontour": self.app.defaults["tools_ncccontour"],
-            "nccrest": self.app.defaults["tools_nccrest"]
+            "name":                     '_ncc',
+            "plot":                     self.app.defaults["geometry_plot"],
+            "cutz":                     self.app.defaults["geometry_cutz"],
+            "vtipdia":                  self.app.defaults["geometry_vtipdia"],
+            "vtipangle":                self.app.defaults["geometry_vtipangle"],
+            "travelz":                  self.app.defaults["geometry_travelz"],
+            "feedrate":                 self.app.defaults["geometry_feedrate"],
+            "feedrate_z":               self.app.defaults["geometry_feedrate_z"],
+            "feedrate_rapid":           self.app.defaults["geometry_feedrate_rapid"],
+            "dwell":                    self.app.defaults["geometry_dwell"],
+            "dwelltime":                self.app.defaults["geometry_dwelltime"],
+            "multidepth":               self.app.defaults["geometry_multidepth"],
+            "ppname_g":                 self.app.defaults["geometry_ppname_g"],
+            "depthperpass":             self.app.defaults["geometry_depthperpass"],
+            "extracut":                 self.app.defaults["geometry_extracut"],
+            "extracut_length":          self.app.defaults["geometry_extracut_length"],
+            "toolchange":               self.app.defaults["geometry_toolchange"],
+            "toolchangez":              self.app.defaults["geometry_toolchangez"],
+            "endz":                     self.app.defaults["geometry_endz"],
+            "endxy":                    self.app.defaults["geometry_endxy"],
+            "area_exclusion":           self.app.defaults["geometry_area_exclusion"],
+            "area_shape":               self.app.defaults["geometry_area_shape"],
+            "area_strategy":            self.app.defaults["geometry_area_strategy"],
+            "area_overz":               self.app.defaults["geometry_area_overz"],
+
+            "spindlespeed":             self.app.defaults["geometry_spindlespeed"],
+            "toolchangexy":             self.app.defaults["geometry_toolchangexy"],
+            "startz":                   self.app.defaults["geometry_startz"],
+
+            "tooldia":                  self.app.defaults["tools_painttooldia"],
+            "tools_paintoffset":        self.app.defaults["tools_paintoffset"],
+            "tools_paintmethod":        self.app.defaults["tools_paintmethod"],
+            "tools_selectmethod":       self.app.defaults["tools_selectmethod"],
+            "tools_pathconnect":        self.app.defaults["tools_pathconnect"],
+            "tools_paintcontour":       self.app.defaults["tools_paintcontour"],
+            "tools_paintoverlap":       self.app.defaults["tools_paintoverlap"],
+            "tools_paintrest":          self.app.defaults["tools_paintrest"],
+
+            "tools_nccoperation":       self.app.defaults["tools_nccoperation"],
+            "tools_nccmargin":          self.app.defaults["tools_nccmargin"],
+            "tools_nccmethod":          self.app.defaults["tools_nccmethod"],
+            "tools_nccconnect":         self.app.defaults["tools_nccconnect"],
+            "tools_ncccontour":         self.app.defaults["tools_ncccontour"],
+            "tools_nccoverlap":         self.app.defaults["tools_nccoverlap"],
+            "tools_nccrest":            self.app.defaults["tools_nccrest"],
+            "tools_nccref":             self.app.defaults["tools_nccref"],
+            "tools_ncc_offset_choice":  self.app.defaults["tools_ncc_offset_choice"],
+            "tools_ncc_offset_value":   self.app.defaults["tools_ncc_offset_value"],
+            "tools_nccmilling_type":    self.app.defaults["tools_nccmilling_type"],
+
+            "tools_iso_passes":         self.app.defaults["tools_iso_passes"],
+            "tools_iso_overlap":        self.app.defaults["tools_iso_overlap"],
+            "tools_iso_milling_type":   self.app.defaults["tools_iso_milling_type"],
+            "tools_iso_follow":         self.app.defaults["tools_iso_follow"],
+            "tools_iso_isotype":        self.app.defaults["tools_iso_isotype"],
+
+            "tools_iso_rest":           self.app.defaults["tools_iso_rest"],
+            "tools_iso_combine_passes": self.app.defaults["tools_iso_combine_passes"],
+            "tools_iso_isoexcept":      self.app.defaults["tools_iso_isoexcept"],
+            "tools_iso_selection":      self.app.defaults["tools_iso_selection"],
+            "tools_iso_poly_ints":      self.app.defaults["tools_iso_poly_ints"],
+            "tools_iso_force":          self.app.defaults["tools_iso_force"],
+            "tools_iso_area_shape":     self.app.defaults["tools_iso_area_shape"]
         })
 
         # will store the geometry here for compatibility reason

+ 1 - 1
appTools/ToolCutOut.py

@@ -527,7 +527,7 @@ class CutOut(AppTool):
 
             # Paint
             "tools_paintoverlap":       float(self.app.defaults["tools_paintoverlap"]),
-            "tools_paintmargin":        float(self.app.defaults["tools_paintmargin"]),
+            "tools_paintoffset":        float(self.app.defaults["tools_paintoffset"]),
             "tools_paintmethod":        self.app.defaults["tools_paintmethod"],
             "tools_pathconnect":        self.app.defaults["tools_pathconnect"],
             "tools_paintcontour":       self.app.defaults["tools_paintcontour"],

+ 76 - 69
appTools/ToolNCC.py

@@ -106,9 +106,11 @@ class NonCopperClear(AppTool, Gerber):
 
         self.mm = None
         self.mr = None
-
         self.kp = None
 
+        # disconnect flags
+        self.area_sel_disconnect_flag = False
+
         # store here solid_geometry when there are tool with isolation job
         self.solid_geometry = []
 
@@ -186,10 +188,7 @@ class NonCopperClear(AppTool, Gerber):
 
         # all the tools are selected by default
         # self.ui.tools_table.selectColumn(0)
-        self.ui.tools_table.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
-        for row in range(self.ui.tools_table.rowCount()):
-            self.ui.tools_table.selectRow(row)
-        self.ui.tools_table.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
+        self.ui.tools_table.selectAll()
 
         self.app.ui.notebook.setTabText(2, _("NCC Tool"))
 
@@ -506,47 +505,47 @@ class NonCopperClear(AppTool, Gerber):
         # init the working variables
         self.default_data.clear()
         self.default_data = {
-            "name": '_ncc',
-            "plot": self.app.defaults["geometry_plot"],
-            "cutz": float(self.ui.cutz_entry.get_value()),
-            "vtipdia": float(self.ui.tipdia_entry.get_value()),
-            "vtipangle": float(self.ui.tipangle_entry.get_value()),
-            "travelz": self.app.defaults["geometry_travelz"],
-            "feedrate": self.app.defaults["geometry_feedrate"],
-            "feedrate_z": self.app.defaults["geometry_feedrate_z"],
-            "feedrate_rapid": self.app.defaults["geometry_feedrate_rapid"],
-            "dwell": self.app.defaults["geometry_dwell"],
-            "dwelltime": self.app.defaults["geometry_dwelltime"],
-            "multidepth": self.app.defaults["geometry_multidepth"],
-            "ppname_g": self.app.defaults["geometry_ppname_g"],
-            "depthperpass": self.app.defaults["geometry_depthperpass"],
-            "extracut": self.app.defaults["geometry_extracut"],
-            "extracut_length": self.app.defaults["geometry_extracut_length"],
-            "toolchange": self.app.defaults["geometry_toolchange"],
-            "toolchangez": self.app.defaults["geometry_toolchangez"],
-            "endz": self.app.defaults["geometry_endz"],
-            "endxy": self.app.defaults["geometry_endxy"],
-
-            "spindlespeed": self.app.defaults["geometry_spindlespeed"],
-            "toolchangexy": self.app.defaults["geometry_toolchangexy"],
-            "startz": self.app.defaults["geometry_startz"],
-
-            "area_exclusion": self.app.defaults["geometry_area_exclusion"],
-            "area_shape": self.app.defaults["geometry_area_shape"],
-            "area_strategy": self.app.defaults["geometry_area_strategy"],
-            "area_overz": float(self.app.defaults["geometry_area_overz"]),
-
-            "tools_nccoperation": self.app.defaults["tools_nccoperation"],
-            "tools_nccmargin": self.app.defaults["tools_nccmargin"],
-            "tools_nccmethod": self.app.defaults["tools_nccmethod"],
-            "tools_nccconnect": self.app.defaults["tools_nccconnect"],
-            "tools_ncccontour": self.app.defaults["tools_ncccontour"],
-            "tools_nccoverlap": self.app.defaults["tools_nccoverlap"],
-            "nccrest": self.app.defaults["tools_nccrest"],
-            "nccref": self.app.defaults["tools_nccref"],
-            "tools_ncc_offset_choice": self.app.defaults["tools_ncc_offset_choice"],
-            "tools_ncc_offset_value": self.app.defaults["tools_ncc_offset_value"],
-            "tools_nccmilling_type": self.app.defaults["tools_nccmilling_type"],
+            "name":                     '_ncc',
+            "plot":                     self.app.defaults["geometry_plot"],
+            "cutz":                     float(self.app.defaults["geometry_cutz"]),
+            "vtipdia":                  float(self.app.defaults["geometry_vtipdia"]),
+            "vtipangle":                float(self.app.defaults["geometry_vtipangle"]),
+            "travelz":                  self.app.defaults["geometry_travelz"],
+            "feedrate":                 self.app.defaults["geometry_feedrate"],
+            "feedrate_z":               self.app.defaults["geometry_feedrate_z"],
+            "feedrate_rapid":           self.app.defaults["geometry_feedrate_rapid"],
+            "dwell":                    self.app.defaults["geometry_dwell"],
+            "dwelltime":                self.app.defaults["geometry_dwelltime"],
+            "multidepth":               self.app.defaults["geometry_multidepth"],
+            "ppname_g":                 self.app.defaults["geometry_ppname_g"],
+            "depthperpass":             self.app.defaults["geometry_depthperpass"],
+            "extracut":                 self.app.defaults["geometry_extracut"],
+            "extracut_length":          self.app.defaults["geometry_extracut_length"],
+            "toolchange":               self.app.defaults["geometry_toolchange"],
+            "toolchangez":              self.app.defaults["geometry_toolchangez"],
+            "endz":                     self.app.defaults["geometry_endz"],
+            "endxy":                    self.app.defaults["geometry_endxy"],
+
+            "spindlespeed":             self.app.defaults["geometry_spindlespeed"],
+            "toolchangexy":             self.app.defaults["geometry_toolchangexy"],
+            "startz":                   self.app.defaults["geometry_startz"],
+
+            "area_exclusion":           self.app.defaults["geometry_area_exclusion"],
+            "area_shape":               self.app.defaults["geometry_area_shape"],
+            "area_strategy":            self.app.defaults["geometry_area_strategy"],
+            "area_overz":               float(self.app.defaults["geometry_area_overz"]),
+
+            "tools_nccoperation":       self.app.defaults["tools_nccoperation"],
+            "tools_nccmargin":          self.app.defaults["tools_nccmargin"],
+            "tools_nccmethod":          self.app.defaults["tools_nccmethod"],
+            "tools_nccconnect":         self.app.defaults["tools_nccconnect"],
+            "tools_ncccontour":         self.app.defaults["tools_ncccontour"],
+            "tools_nccoverlap":         self.app.defaults["tools_nccoverlap"],
+            "tools_nccrest":            self.app.defaults["tools_nccrest"],
+            "tools_nccref":             self.app.defaults["tools_nccref"],
+            "tools_ncc_offset_choice":  self.app.defaults["tools_ncc_offset_choice"],
+            "tools_ncc_offset_value":   self.app.defaults["tools_ncc_offset_value"],
+            "tools_nccmilling_type":    self.app.defaults["tools_nccmilling_type"]
         }
 
         try:
@@ -1204,6 +1203,9 @@ class NonCopperClear(AppTool, Gerber):
             self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', self.on_mouse_move)
             self.kp = self.app.plotcanvas.graph_event_connect('key_press', self.on_key_press)
 
+            # disconnect flags
+            self.area_sel_disconnect_flag = True
+
         elif self.select_method == _("Reference Object"):
             self.bound_obj_name = self.ui.reference_combo.currentText()
             # Get source object.
@@ -1327,6 +1329,9 @@ class NonCopperClear(AppTool, Gerber):
             self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release',
                                                                   self.app.on_mouse_click_release_over_plot)
 
+            # disconnect flags
+            self.area_sel_disconnect_flag = False
+
             if len(self.sel_rect) == 0:
                 return
 
@@ -1432,37 +1437,39 @@ class NonCopperClear(AppTool, Gerber):
             key = event.key
 
         if key == QtCore.Qt.Key_Escape or key == 'Escape':
-            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)
-                self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press)
-            else:
-                self.app.plotcanvas.graph_event_disconnect(self.mr)
-                self.app.plotcanvas.graph_event_disconnect(self.mm)
-                self.app.plotcanvas.graph_event_disconnect(self.kp)
-
-            try:
-                # restore the Grid snapping if it was active before
-                if self.grid_status_memory is True:
-                    self.app.ui.grid_snap_btn.trigger()
 
+            if self.area_sel_disconnect_flag is True:
                 if self.app.is_legacy is False:
-                    self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_single_poly_mouse_release)
+                    self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release)
+                    self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move)
                     self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press)
                 else:
                     self.app.plotcanvas.graph_event_disconnect(self.mr)
+                    self.app.plotcanvas.graph_event_disconnect(self.mm)
                     self.app.plotcanvas.graph_event_disconnect(self.kp)
 
-                self.app.tool_shapes.clear(update=True)
-            except Exception as e:
-                log.debug("ToolPaint.on_key_press() _2 --> %s" % str(e))
+                try:
+                    # restore the Grid snapping if it was active before
+                    if self.grid_status_memory is True:
+                        self.app.ui.grid_snap_btn.trigger()
 
-            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 self.app.is_legacy is False:
+                        self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_single_poly_mouse_release)
+                        self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press)
+                    else:
+                        self.app.plotcanvas.graph_event_disconnect(self.mr)
+                        self.app.plotcanvas.graph_event_disconnect(self.kp)
+
+                    self.app.tool_shapes.clear(update=True)
+                except Exception as e:
+                    log.debug("ToolPaint.on_key_press() _2 --> %s" % str(e))
+
+                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)
             self.points = []
             self.poly_drawn = False
 

+ 114 - 96
appTools/ToolPaint.py

@@ -85,6 +85,10 @@ class ToolPaint(AppTool, Gerber):
         self.mr = None
         self.kp = None
 
+        # disconnect flags
+        self.area_sel_disconnect_flag = False
+        self.poly_sel_disconnect_flag = False
+
         self.sel_rect = []
 
         # store here if the grid snapping is active
@@ -100,7 +104,7 @@ class ToolPaint(AppTool, Gerber):
 
         self.form_fields = {
             "tools_paintoverlap": self.ui.paintoverlap_entry,
-            "tools_paintmargin": self.ui.paintmargin_entry,
+            "tools_paintoffset": self.ui.offset_entry,
             "tools_paintmethod": self.ui.paintmethod_combo,
             "tools_pathconnect": self.ui.pathconnect_cb,
             "tools_paintcontour": self.ui.paintcontour_cb,
@@ -108,7 +112,7 @@ class ToolPaint(AppTool, Gerber):
 
         self.name2option = {
             'p_overlap': "tools_paintoverlap",
-            'p_margin': "tools_paintmargin",
+            'p_offset': "tools_paintoffset",
             'p_method': "tools_paintmethod",
             'p_connect': "tools_pathconnect",
             'p_contour': "tools_paintcontour",
@@ -222,10 +226,7 @@ class ToolPaint(AppTool, Gerber):
         self.build_ui()
 
         # all the tools are selected by default
-        self.ui.tools_table.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
-        for row in range(self.ui.tools_table.rowCount()):
-            self.ui.tools_table.selectRow(row)
-        self.ui.tools_table.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
+        self.ui.tools_table.selectAll()
 
         self.app.ui.notebook.setTabText(2, _("Paint Tool"))
 
@@ -510,49 +511,49 @@ class ToolPaint(AppTool, Gerber):
 
         self.default_data.clear()
         self.default_data.update({
-            "name": '_paint',
-            "plot": self.app.defaults["geometry_plot"],
-            "cutz": float(self.app.defaults["tools_paintcutz"],),
-            "vtipdia": float(self.app.defaults["tools_painttipdia"],),
-            "vtipangle": float(self.app.defaults["tools_painttipangle"],),
-            "travelz": float(self.app.defaults["geometry_travelz"]),
-            "feedrate": float(self.app.defaults["geometry_feedrate"]),
-            "feedrate_z": float(self.app.defaults["geometry_feedrate_z"]),
-            "feedrate_rapid": float(self.app.defaults["geometry_feedrate_rapid"]),
-            "dwell": self.app.defaults["geometry_dwell"],
-            "dwelltime": float(self.app.defaults["geometry_dwelltime"]),
-            "multidepth": self.app.defaults["geometry_multidepth"],
-            "ppname_g": self.app.defaults["geometry_ppname_g"],
-            "depthperpass": float(self.app.defaults["geometry_depthperpass"]),
-            "extracut": self.app.defaults["geometry_extracut"],
-            "extracut_length": self.app.defaults["geometry_extracut_length"],
-            "toolchange": self.app.defaults["geometry_toolchange"],
-            "toolchangez": float(self.app.defaults["geometry_toolchangez"]),
-            "endz": float(self.app.defaults["geometry_endz"]),
-            "endxy": self.app.defaults["geometry_endxy"],
-
-            "spindlespeed": self.app.defaults["geometry_spindlespeed"],
-            "toolchangexy": self.app.defaults["geometry_toolchangexy"],
-            "startz": self.app.defaults["geometry_startz"],
-
-            "area_exclusion": self.app.defaults["geometry_area_exclusion"],
-            "area_shape": self.app.defaults["geometry_area_shape"],
-            "area_strategy": self.app.defaults["geometry_area_strategy"],
-            "area_overz": float(self.app.defaults["geometry_area_overz"]),
-
-            "tooldia": self.app.defaults["tools_painttooldia"],
-            "tools_paintmargin": self.app.defaults["tools_paintmargin"],
-            "tools_paintmethod": self.app.defaults["tools_paintmethod"],
-            "tools_selectmethod": self.app.defaults["tools_selectmethod"],
-            "tools_pathconnect": self.app.defaults["tools_pathconnect"],
-            "tools_paintcontour": self.app.defaults["tools_paintcontour"],
-            "tools_paintoverlap": self.app.defaults["tools_paintoverlap"],
-            "tools_paintrest": self.app.defaults["tools_paintrest"],
+            "name":                 '_paint',
+            "plot":                 self.app.defaults["geometry_plot"],
+            "cutz":                 float(self.app.defaults["tools_paintcutz"]),
+            "vtipdia":              float(self.app.defaults["tools_painttipdia"]),
+            "vtipangle":            float(self.app.defaults["tools_painttipangle"]),
+            "travelz":              float(self.app.defaults["geometry_travelz"]),
+            "feedrate":             float(self.app.defaults["geometry_feedrate"]),
+            "feedrate_z":           float(self.app.defaults["geometry_feedrate_z"]),
+            "feedrate_rapid":       float(self.app.defaults["geometry_feedrate_rapid"]),
+            "dwell":                self.app.defaults["geometry_dwell"],
+            "dwelltime":            float(self.app.defaults["geometry_dwelltime"]),
+            "multidepth":           self.app.defaults["geometry_multidepth"],
+            "ppname_g":             self.app.defaults["geometry_ppname_g"],
+            "depthperpass":         float(self.app.defaults["geometry_depthperpass"]),
+            "extracut":             self.app.defaults["geometry_extracut"],
+            "extracut_length":      self.app.defaults["geometry_extracut_length"],
+            "toolchange":           self.app.defaults["geometry_toolchange"],
+            "toolchangez":          float(self.app.defaults["geometry_toolchangez"]),
+            "endz":                 float(self.app.defaults["geometry_endz"]),
+            "endxy":                self.app.defaults["geometry_endxy"],
+
+            "spindlespeed":         self.app.defaults["geometry_spindlespeed"],
+            "toolchangexy":         self.app.defaults["geometry_toolchangexy"],
+            "startz":               self.app.defaults["geometry_startz"],
+
+            "area_exclusion":       self.app.defaults["geometry_area_exclusion"],
+            "area_shape":           self.app.defaults["geometry_area_shape"],
+            "area_strategy":        self.app.defaults["geometry_area_strategy"],
+            "area_overz":           float(self.app.defaults["geometry_area_overz"]),
+
+            "tooldia":              self.app.defaults["tools_painttooldia"],
+            "tools_paintoffset":   self.app.defaults["tools_paintoffset"],
+            "tools_paintmethod":    self.app.defaults["tools_paintmethod"],
+            "tools_selectmethod":   self.app.defaults["tools_selectmethod"],
+            "tools_pathconnect":    self.app.defaults["tools_pathconnect"],
+            "tools_paintcontour":   self.app.defaults["tools_paintcontour"],
+            "tools_paintoverlap":   self.app.defaults["tools_paintoverlap"],
+            "tools_paintrest":      self.app.defaults["tools_paintrest"],
         })
 
         # ## Init the GUI interface
         self.ui.order_radio.set_value(self.app.defaults["tools_paintorder"])
-        self.ui.paintmargin_entry.set_value(self.app.defaults["tools_paintmargin"])
+        self.ui.offset_entry.set_value(self.app.defaults["tools_paintoffset"])
         self.ui.paintmethod_combo.set_value(self.app.defaults["tools_paintmethod"])
         self.ui.selectmethod_combo.set_value(self.app.defaults["tools_selectmethod"])
         self.ui.area_shape_radio.set_value(self.app.defaults["tools_paint_area_shape"])
@@ -1026,6 +1027,9 @@ class ToolPaint(AppTool, Gerber):
                 self.app.plotcanvas.graph_event_disconnect(self.app.mr)
                 self.app.plotcanvas.graph_event_disconnect(self.app.mp)
 
+            # disconnect flags
+            self.poly_sel_disconnect_flag = True
+
         elif self.select_method == _("Area Selection"):
             self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the start point of the paint area."))
 
@@ -1042,6 +1046,9 @@ class ToolPaint(AppTool, Gerber):
             self.mm = self.app.plotcanvas.graph_event_connect('mouse_move', self.on_mouse_move)
             self.kp = self.app.plotcanvas.graph_event_connect('key_press', self.on_key_press)
 
+            # disconnect flags
+            self.area_sel_disconnect_flag = True
+
         elif self.select_method == _("Reference Object"):
             self.bound_obj_name = self.reference_combo.currentText()
             # Get source object.
@@ -1127,6 +1134,9 @@ class ToolPaint(AppTool, Gerber):
             self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release',
                                                                   self.app.on_mouse_click_release_over_plot)
 
+            # disconnect flags
+            self.poly_sel_disconnect_flag = False
+
             self.app.tool_shapes.clear(update=True)
 
             if self.poly_dict:
@@ -1250,6 +1260,9 @@ class ToolPaint(AppTool, Gerber):
             self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release',
                                                                   self.app.on_mouse_click_release_over_plot)
 
+            # disconnect flags
+            self.area_sel_disconnect_flag = False
+
             if len(self.sel_rect) == 0:
                 return
 
@@ -1360,41 +1373,47 @@ class ToolPaint(AppTool, Gerber):
             key = event.key
 
         if key == QtCore.Qt.Key_Escape or key == 'Escape':
-            try:
-                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)
-                    self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press)
-                else:
-                    self.app.plotcanvas.graph_event_disconnect(self.mr)
-                    self.app.plotcanvas.graph_event_disconnect(self.mm)
-                    self.app.plotcanvas.graph_event_disconnect(self.kp)
-            except Exception as e:
-                log.debug("ToolPaint.on_key_press() _1 --> %s" % str(e))
+            if self.area_sel_disconnect_flag is True:
+                try:
+                    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)
+                        self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press)
+                    else:
+                        self.app.plotcanvas.graph_event_disconnect(self.mr)
+                        self.app.plotcanvas.graph_event_disconnect(self.mm)
+                        self.app.plotcanvas.graph_event_disconnect(self.kp)
+                except Exception as e:
+                    log.debug("ToolPaint.on_key_press() _1 --> %s" % str(e))
 
-            try:
-                # restore the Grid snapping if it was active before
-                if self.grid_status_memory is True:
-                    self.app.ui.grid_snap_btn.trigger()
+                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 self.app.is_legacy is False:
-                    self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_single_poly_mouse_release)
-                    self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press)
-                else:
-                    self.app.plotcanvas.graph_event_disconnect(self.mr)
-                    self.app.plotcanvas.graph_event_disconnect(self.kp)
+            if self.poly_sel_disconnect_flag is False:
+                try:
+                    # restore the Grid snapping if it was active before
+                    if self.grid_status_memory is True:
+                        self.app.ui.grid_snap_btn.trigger()
 
-                self.app.tool_shapes.clear(update=True)
-            except Exception as e:
-                log.debug("ToolPaint.on_key_press() _2 --> %s" % str(e))
+                    if self.app.is_legacy is False:
+                        self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_single_poly_mouse_release)
+                        self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press)
+                    else:
+                        self.app.plotcanvas.graph_event_disconnect(self.mr)
+                        self.app.plotcanvas.graph_event_disconnect(self.kp)
 
-            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)
+                    self.app.tool_shapes.clear(update=True)
+                except Exception as e:
+                    log.debug("ToolPaint.on_key_press() _2 --> %s" % str(e))
 
+                self.app.mr = self.app.plotcanvas.graph_event_connect('mouse_release',
+                                                                      self.app.on_mouse_click_release_over_plot)
+                self.app.mp = self.app.plotcanvas.graph_event_connect('mouse_press',
+                                                                      self.app.on_mouse_click_over_plot)
             self.points = []
             self.poly_drawn = False
             self.poly_dict.clear()
@@ -1643,9 +1662,8 @@ class ToolPaint(AppTool, Gerber):
             self.app.inform.emit('[ERROR_NOTCL] %s' % _('Geometry could not be painted completely'))
             return None
 
-    def paint_poly(self, obj, inside_pt=None, poly_list=None, tooldia=None, order=None,
-                   method=None, outname=None, tools_storage=None,
-                   plot=True, run_threaded=True):
+    def paint_poly(self, obj, inside_pt=None, poly_list=None, tooldia=None, order=None, method=None, outname=None,
+                   tools_storage=None, plot=True, run_threaded=True):
         """
         Paints a polygon selected by clicking on its interior or by having a point coordinates given
 
@@ -1752,11 +1770,11 @@ class ToolPaint(AppTool, Gerber):
             conn = tools_storage[current_uid]['data']['tools_pathconnect']
             cont = tools_storage[current_uid]['data']['tools_paintcontour']
 
-            paint_margin = float(tools_storage[current_uid]['data']['tools_paintmargin'])
+            paint_offset = float(tools_storage[current_uid]['data']['tools_paintoffset'])
 
             poly_buf = []
             for pol in polygon_list:
-                buffered_pol = pol.buffer(-paint_margin)
+                buffered_pol = pol.buffer(-paint_offset)
                 if buffered_pol and not buffered_pol.is_empty:
                     poly_buf.append(buffered_pol)
 
@@ -1918,8 +1936,8 @@ class ToolPaint(AppTool, Gerber):
         else:
             job_thread(app_obj=self.app)
 
-    def paint_poly_all(self, obj, tooldia=None, order=None, method=None, outname=None,
-                       tools_storage=None, plot=True, run_threaded=True):
+    def paint_poly_all(self, obj, tooldia=None, order=None, method=None, outname=None, tools_storage=None, plot=True,
+                       run_threaded=True):
         """
         Paints all polygons in this object.
 
@@ -2069,11 +2087,11 @@ class ToolPaint(AppTool, Gerber):
                 conn = tools_storage[current_uid]['data']['tools_pathconnect']
                 cont = tools_storage[current_uid]['data']['tools_paintcontour']
 
-                paint_margin = float(tools_storage[current_uid]['data']['tools_paintmargin'])
+                paint_offset = float(tools_storage[current_uid]['data']['tools_paintoffset'])
                 poly_buf = []
                 for pol in painted_area:
                     pol = Polygon(pol) if not isinstance(pol, Polygon) else pol
-                    buffered_pol = pol.buffer(-paint_margin)
+                    buffered_pol = pol.buffer(-paint_offset)
                     if buffered_pol and not buffered_pol.is_empty:
                         poly_buf.append(buffered_pol)
 
@@ -2264,11 +2282,11 @@ class ToolPaint(AppTool, Gerber):
                 conn = tools_storage[current_uid]['data']['tools_pathconnect']
                 cont = tools_storage[current_uid]['data']['tools_paintcontour']
 
-                paint_margin = float(tools_storage[current_uid]['data']['tools_paintmargin'])
+                paint_offset = float(tools_storage[current_uid]['data']['tools_paintoffset'])
                 poly_buf = []
                 for pol in painted_area:
                     pol = Polygon(pol) if not isinstance(pol, Polygon) else pol
-                    buffered_pol = pol.buffer(-paint_margin)
+                    buffered_pol = pol.buffer(-paint_offset)
                     if buffered_pol and not buffered_pol.is_empty:
                         poly_buf.append(buffered_pol)
 
@@ -2573,12 +2591,12 @@ class ToolPaint(AppTool, Gerber):
                 conn = tools_storage[current_uid]['data']['tools_pathconnect']
                 cont = tools_storage[current_uid]['data']['tools_paintcontour']
 
-                paint_margin = float(tools_storage[current_uid]['data']['tools_paintmargin'])
+                paint_offset = float(tools_storage[current_uid]['data']['tools_paintoffset'])
 
                 poly_buf = []
                 for pol in painted_area:
                     pol = Polygon(pol) if not isinstance(pol, Polygon) else pol
-                    buffered_pol = pol.buffer(-paint_margin)
+                    buffered_pol = pol.buffer(-paint_offset)
                     if buffered_pol and not buffered_pol.is_empty:
                         poly_buf.append(buffered_pol)
 
@@ -2754,12 +2772,12 @@ class ToolPaint(AppTool, Gerber):
                 conn = tools_storage[current_uid]['data']['tools_pathconnect']
                 cont = tools_storage[current_uid]['data']['tools_paintcontour']
 
-                paint_margin = float(tools_storage[current_uid]['data']['tools_paintmargin'])
+                paint_offset = float(tools_storage[current_uid]['data']['tools_paintoffset'])
 
                 poly_buf = []
                 for pol in painted_area:
                     pol = Polygon(pol) if not isinstance(pol, Polygon) else pol
-                    buffered_pol = pol.buffer(-paint_margin)
+                    buffered_pol = pol.buffer(-paint_offset)
                     if buffered_pol and not buffered_pol.is_empty:
                         poly_buf.append(buffered_pol)
 
@@ -3535,19 +3553,19 @@ class PaintUI:
         grid4.addWidget(self.paintoverlap_entry, 1, 1)
 
         # Margin
-        marginlabel = QtWidgets.QLabel('%s:' % _('Margin'))
+        marginlabel = QtWidgets.QLabel('%s:' % _('Offset'))
         marginlabel.setToolTip(
             _("Distance by which to avoid\n"
               "the edges of the polygon to\n"
               "be painted.")
         )
-        self.paintmargin_entry = FCDoubleSpinner(callback=self.confirmation_message)
-        self.paintmargin_entry.set_precision(self.decimals)
-        self.paintmargin_entry.set_range(-9999.9999, 9999.9999)
-        self.paintmargin_entry.setObjectName('p_margin')
+        self.offset_entry = FCDoubleSpinner(callback=self.confirmation_message)
+        self.offset_entry.set_precision(self.decimals)
+        self.offset_entry.set_range(-9999.9999, 9999.9999)
+        self.offset_entry.setObjectName('p_offset')
 
         grid4.addWidget(marginlabel, 2, 0)
-        grid4.addWidget(self.paintmargin_entry, 2, 1)
+        grid4.addWidget(self.offset_entry, 2, 1)
 
         # Method
         methodlabel = QtWidgets.QLabel('%s:' % _('Method'))

+ 1 - 1
app_Main.py

@@ -4071,7 +4071,7 @@ class App(QtCore.QObject):
 
                       'cncjob_tooldia',
 
-                      'tools_paintmargin', 'tools_painttooldia', "tools_paintcutz", "tools_painttipdia",
+                      'tools_paintoffset', 'tools_painttooldia', "tools_paintcutz", "tools_painttipdia",
                       "tools_paintnewdia",
 
                       "tools_ncctools", "tools_nccmargin", "tools_ncccutz", "tools_ncctipdia",

+ 1 - 1
defaults.py

@@ -460,7 +460,7 @@ class FlatCAMDefaults:
         "tools_painttooldia": 0.3,
         "tools_paintorder": 'rev',
         "tools_paintoverlap": 20,
-        "tools_paintmargin": 0.0,
+        "tools_paintoffset": 0.0,
         "tools_paintmethod": _("Seed"),
         "tools_selectmethod": _("All"),
         "tools_paint_area_shape": "square",

+ 47 - 41
tclCommands/TclCommandCopperClear.py

@@ -194,42 +194,48 @@ class TclCommandCopperClear(TclCommand):
         # store here the default data for Geometry Data
         default_data = {}
         default_data.update({
-            "name": outname,
-            "plot": False,
-            "cutz": self.app.defaults["geometry_cutz"],
-            "vtipdia": 0.1,
-            "vtipangle": 30,
-            "travelz": self.app.defaults["geometry_travelz"],
-            "feedrate": self.app.defaults["geometry_feedrate"],
-            "feedrate_z": self.app.defaults["geometry_feedrate_z"],
-            "feedrate_rapid": self.app.defaults["geometry_feedrate_rapid"],
-            "dwell": self.app.defaults["geometry_dwell"],
-            "dwelltime": self.app.defaults["geometry_dwelltime"],
-            "multidepth": self.app.defaults["geometry_multidepth"],
-            "ppname_g": self.app.defaults["geometry_ppname_g"],
-            "depthperpass": self.app.defaults["geometry_depthperpass"],
-            "extracut": self.app.defaults["geometry_extracut"],
-            "extracut_length": self.app.defaults["geometry_extracut_length"],
-            "toolchange": self.app.defaults["geometry_toolchange"],
-            "toolchangez": self.app.defaults["geometry_toolchangez"],
-            "endz": self.app.defaults["geometry_endz"],
-            "endxy": self.app.defaults["geometry_endxy"],
-            "spindlespeed": self.app.defaults["geometry_spindlespeed"],
-            "toolchangexy": self.app.defaults["geometry_toolchangexy"],
-            "startz": self.app.defaults["geometry_startz"],
-
-            "area_exclusion": self.app.defaults["geometry_area_exclusion"],
-            "area_shape": self.app.defaults["geometry_area_shape"],
-            "area_strategy": self.app.defaults["geometry_area_strategy"],
-            "area_overz": float(self.app.defaults["geometry_area_overz"]),
-
-            "tooldia": self.app.defaults["tools_painttooldia"],
-            "tools_nccmargin": margin,
-            "tools_nccmethod": method_data,
-            "tools_nccref": select,
+            "name":             outname,
+            "plot":             False,
+            "cutz":             self.app.defaults["geometry_cutz"],
+            "vtipdia":          float(self.app.defaults["geometry_vtipdia"]),
+            "vtipangle":        float(self.app.defaults["geometry_vtipangle"]),
+            "travelz":          self.app.defaults["geometry_travelz"],
+            "feedrate":         self.app.defaults["geometry_feedrate"],
+            "feedrate_z":       self.app.defaults["geometry_feedrate_z"],
+            "feedrate_rapid":   self.app.defaults["geometry_feedrate_rapid"],
+            "dwell":            self.app.defaults["geometry_dwell"],
+            "dwelltime":        self.app.defaults["geometry_dwelltime"],
+            "multidepth":       self.app.defaults["geometry_multidepth"],
+            "ppname_g":         self.app.defaults["geometry_ppname_g"],
+            "depthperpass":     self.app.defaults["geometry_depthperpass"],
+            "extracut":         self.app.defaults["geometry_extracut"],
+            "extracut_length":  self.app.defaults["geometry_extracut_length"],
+            "toolchange":       self.app.defaults["geometry_toolchange"],
+            "toolchangez":      self.app.defaults["geometry_toolchangez"],
+            "endz":             self.app.defaults["geometry_endz"],
+            "endxy":            self.app.defaults["geometry_endxy"],
+            "spindlespeed":     self.app.defaults["geometry_spindlespeed"],
+            "toolchangexy":     self.app.defaults["geometry_toolchangexy"],
+            "startz":           self.app.defaults["geometry_startz"],
+
+            "area_exclusion":   self.app.defaults["geometry_area_exclusion"],
+            "area_shape":       self.app.defaults["geometry_area_shape"],
+            "area_strategy":    self.app.defaults["geometry_area_strategy"],
+            "area_overz":       float(self.app.defaults["geometry_area_overz"]),
+
+            "tooldia":              self.app.defaults["tools_painttooldia"],
+            "tools_nccoperation":   self.app.defaults["tools_nccoperation"],
+
+            "tools_nccmargin":  margin,
+            "tools_nccmethod":  method_data,
+            "tools_nccref":     select,
             "tools_nccconnect": connect,
             "tools_ncccontour": contour,
-            "tools_nccoverlap": overlap
+            "tools_nccoverlap": overlap,
+
+            "tools_ncc_offset_choice":  self.app.defaults["tools_ncc_offset_choice"],
+            "tools_ncc_offset_value":   self.app.defaults["tools_ncc_offset_value"],
+            "tools_nccmilling_type":    self.app.defaults["tools_nccmilling_type"]
         })
         ncc_tools = {}
 
@@ -238,13 +244,13 @@ class TclCommandCopperClear(TclCommand):
             tooluid += 1
             ncc_tools.update({
                 int(tooluid): {
-                    'tooldia': float('%.*f' % (obj.decimals, tool)),
-                    'offset': 'Path',
-                    'offset_value': 0.0,
-                    'type': 'Iso',
-                    'tool_type': 'C1',
-                    'data': dict(default_data),
-                    'solid_geometry': []
+                    'tooldia':          float('%.*f' % (obj.decimals, tool)),
+                    'offset':           'Path',
+                    'offset_value':     0.0,
+                    'type':             'Iso',
+                    'tool_type':        'C1',
+                    'data':             dict(default_data),
+                    'solid_geometry':   []
                 }
             })
             ncc_tools[int(tooluid)]['data']['tooldia'] = float('%.*f' % (obj.decimals, tool))

+ 44 - 44
tclCommands/TclCommandPaint.py

@@ -34,7 +34,7 @@ class TclCommandPaint(TclCommand):
         ('tooldia', str),
         ('overlap', float),
         ('order', str),
-        ('margin', float),
+        ('offset', float),
         ('method', str),
         ('connect', str),
         ('contour', str),
@@ -59,7 +59,7 @@ class TclCommandPaint(TclCommand):
                         'WARNING: No space is allowed between tool diameters. E.g: correct: 0.5,1 / incorrect: 0.5, 1'),
             ('overlap', 'Percentage of tool diameter to overlap current pass over previous pass. Float [0, 99.9999]\n'
                         'E.g: for a 25% from tool diameter overlap use -overlap 25'),
-            ('margin', 'Bounding box margin. Float number.'),
+            ('offset', 'Distance from the polygon border where painting starts. Float number.'),
             ('order', 'Can have the values: "no", "fwd" and "rev". String.\n'
                       'It is useful when there are multiple tools in tooldia parameter.\n'
                       '"no" -> the order used is the one provided.\n'
@@ -75,8 +75,8 @@ class TclCommandPaint(TclCommand):
                        'WARNING: No spaces allowed in the value. Use dot decimals separator.'),
             ('outname', 'Name of the resulting Geometry object. String. No spaces.'),
         ]),
-        'examples': ["paint obj_name -tooldia 0.3 -margin 0.1 -method 'seed' -all",
-                     "paint obj_name -tooldia 0.3 -margin 0.1 -method 'seed' -single 3.3,2.0"]
+        'examples': ["paint obj_name -tooldia 0.3 -offset 0.1 -method 'seed' -all",
+                     "paint obj_name -tooldia 0.3 -offset 0.1 -method 'seed' -single 3.3,2.0"]
     }
 
     def execute(self, args, unnamed_args):
@@ -114,10 +114,10 @@ class TclCommandPaint(TclCommand):
         else:
             order = str(self.app.defaults["tools_paintorder"])
 
-        if 'margin' in args:
-            margin = float(args['margin'])
+        if 'offset' in args:
+            offset = float(args['offset'])
         else:
-            margin = float(self.app.defaults["tools_paintmargin"])
+            offset = float(self.app.defaults["tools_paintoffset"])
 
         if 'method' in args:
             method = args['method']
@@ -172,43 +172,43 @@ class TclCommandPaint(TclCommand):
         # store here the default data for Geometry Data
         default_data = {}
         default_data.update({
-            "name": outname,
-            "plot": False,
-            "cutz": self.app.defaults["geometry_cutz"],
-            "vtipdia": 0.1,
-            "vtipangle": 30,
-            "travelz": self.app.defaults["geometry_travelz"],
-            "feedrate": self.app.defaults["geometry_feedrate"],
-            "feedrate_z": self.app.defaults["geometry_feedrate_z"],
-            "feedrate_rapid": self.app.defaults["geometry_feedrate_rapid"],
-            "dwell": self.app.defaults["geometry_dwell"],
-            "dwelltime": self.app.defaults["geometry_dwelltime"],
-            "multidepth": self.app.defaults["geometry_multidepth"],
-            "ppname_g": self.app.defaults["geometry_ppname_g"],
-            "depthperpass": self.app.defaults["geometry_depthperpass"],
-            "extracut": self.app.defaults["geometry_extracut"],
-            "extracut_length": self.app.defaults["geometry_extracut_length"],
-            "toolchange": self.app.defaults["geometry_toolchange"],
-            "toolchangez": self.app.defaults["geometry_toolchangez"],
-            "endz": self.app.defaults["geometry_endz"],
-            "endxy": self.app.defaults["geometry_endxy"],
-
-            "spindlespeed": self.app.defaults["geometry_spindlespeed"],
-            "toolchangexy": self.app.defaults["geometry_toolchangexy"],
-            "startz": self.app.defaults["geometry_startz"],
-
-            "area_exclusion": self.app.defaults["geometry_area_exclusion"],
-            "area_shape": self.app.defaults["geometry_area_shape"],
-            "area_strategy": self.app.defaults["geometry_area_strategy"],
-            "area_overz": float(self.app.defaults["geometry_area_overz"]),
-
-            "tooldia": self.app.defaults["tools_painttooldia"],
-            "paintmargin": margin,
-            "paintmethod": method,
-            "selectmethod": select,
-            "pathconnect": connect,
-            "paintcontour": contour,
-            "paintoverlap": overlap
+            "name":                 outname,
+            "plot":                 False,
+            "cutz":                 self.app.defaults["geometry_cutz"],
+            "vtipdia":              float(self.app.defaults["tools_painttipdia"]),
+            "vtipangle":            float(self.app.defaults["tools_painttipangle"]),
+            "travelz":              self.app.defaults["geometry_travelz"],
+            "feedrate":             self.app.defaults["geometry_feedrate"],
+            "feedrate_z":           self.app.defaults["geometry_feedrate_z"],
+            "feedrate_rapid":       self.app.defaults["geometry_feedrate_rapid"],
+            "dwell":                self.app.defaults["geometry_dwell"],
+            "dwelltime":            self.app.defaults["geometry_dwelltime"],
+            "multidepth":           self.app.defaults["geometry_multidepth"],
+            "ppname_g":             self.app.defaults["geometry_ppname_g"],
+            "depthperpass":         self.app.defaults["geometry_depthperpass"],
+            "extracut":             self.app.defaults["geometry_extracut"],
+            "extracut_length":      self.app.defaults["geometry_extracut_length"],
+            "toolchange":           self.app.defaults["geometry_toolchange"],
+            "toolchangez":          self.app.defaults["geometry_toolchangez"],
+            "endz":                 self.app.defaults["geometry_endz"],
+            "endxy":                self.app.defaults["geometry_endxy"],
+
+            "spindlespeed":         self.app.defaults["geometry_spindlespeed"],
+            "toolchangexy":         self.app.defaults["geometry_toolchangexy"],
+            "startz":               self.app.defaults["geometry_startz"],
+
+            "area_exclusion":       self.app.defaults["geometry_area_exclusion"],
+            "area_shape":           self.app.defaults["geometry_area_shape"],
+            "area_strategy":        self.app.defaults["geometry_area_strategy"],
+            "area_overz":           float(self.app.defaults["geometry_area_overz"]),
+
+            "tooldia":              self.app.defaults["tools_painttooldia"],
+            "tools_paintoffset":   offset,
+            "tools_paintmethod":    method,
+            "tools_selectmethod":   select,
+            "tools_pathconnect":    connect,
+            "tools_paintcontour":   contour,
+            "tools_paintoverlap":   overlap
         })
         paint_tools = {}