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

- Gerber Editor: autoincrement aperture code when adding new apertures
- Gerber Editor: automatically calculate the size of the rectangular aperture

Marius Stanciu 6 лет назад
Родитель
Сommit
8fb952b6ad
2 измененных файлов с 60 добавлено и 37 удалено
  1. 2 1
      README.md
  2. 58 36
      flatcamEditors/FlatCAMGrbEditor.py

+ 2 - 1
README.md

@@ -17,7 +17,8 @@ CAD program, and create G-Code for Isolation routing.
 - created menu links and shortcut keys for adding a new empty Gerber objects; on update of the edited Gerber, if the source object was an empty one (new blank one) this source obj will be deleted
 - created menu links and shortcut keys for adding a new empty Gerber objects; on update of the edited Gerber, if the source object was an empty one (new blank one) this source obj will be deleted
 - removed the old apertures editing from Gerber Obj selected tab
 - removed the old apertures editing from Gerber Obj selected tab
 - Gerber Editor: added Add Pad (circular or rectangular type only)
 - Gerber Editor: added Add Pad (circular or rectangular type only)
-
+- Gerber Editor: autoincrement aperture code when adding new apertures
+- Gerber Editor: automatically calculate the size of the rectangular aperture
 
 
 9.04.2019
 9.04.2019
 
 

+ 58 - 36
flatcamEditors/FlatCAMGrbEditor.py

@@ -600,7 +600,10 @@ class FlatCAMGrbEditor(QtCore.QObject):
 
 
         apsize_lbl = QtWidgets.QLabel(_('Aperture Size:'))
         apsize_lbl = QtWidgets.QLabel(_('Aperture Size:'))
         apsize_lbl.setToolTip(
         apsize_lbl.setToolTip(
-        _("Size for the new aperture")
+        _("Size for the new aperture.\n"
+          "If aperture type is 'R' then this value\n"
+          "is automatically calculated as:\n"
+          "sqrt(width**2 + height**2)")
         )
         )
         grid1.addWidget(apsize_lbl, 2, 0)
         grid1.addWidget(apsize_lbl, 2, 0)
 
 
@@ -639,13 +642,14 @@ class FlatCAMGrbEditor(QtCore.QObject):
 
 
         self.addaperture_btn = QtWidgets.QPushButton(_('Go'))
         self.addaperture_btn = QtWidgets.QPushButton(_('Go'))
         self.addaperture_btn.setToolTip(
         self.addaperture_btn.setToolTip(
-           _( "Add a new aperture to the aperture list")
+           _( "Add a new aperture to the aperture list.")
         )
         )
         grid1.addWidget(self.addaperture_btn, 5, 1)
         grid1.addWidget(self.addaperture_btn, 5, 1)
 
 
         apdelete_lbl = QtWidgets.QLabel('<b>%s</b>' % _('Del Aperture:'))
         apdelete_lbl = QtWidgets.QLabel('<b>%s</b>' % _('Del Aperture:'))
         apdelete_lbl.setToolTip(
         apdelete_lbl.setToolTip(
-            _( "Delete a aperture in the aperture list")
+            _( "Delete a aperture in the aperture list.\n"
+               "It will delete also the associated geometry.")
         )
         )
         grid1.addWidget(apdelete_lbl, 6, 0)
         grid1.addWidget(apdelete_lbl, 6, 0)
 
 
@@ -913,6 +917,11 @@ class FlatCAMGrbEditor(QtCore.QObject):
             tt_aperture = self.sorted_apid[i]
             tt_aperture = self.sorted_apid[i]
             self.tool2tooldia[i + 1] = tt_aperture
             self.tool2tooldia[i + 1] = tt_aperture
 
 
+        if self.units == "IN":
+            self.apsize_entry.set_value(0.039)
+        else:
+            self.apsize_entry.set_value(1.00)
+
     def build_ui(self):
     def build_ui(self):
 
 
         try:
         try:
@@ -933,11 +942,6 @@ class FlatCAMGrbEditor(QtCore.QObject):
         self.edited_obj_name = self.gerber_obj.options['name']
         self.edited_obj_name = self.gerber_obj.options['name']
         self.name_entry.set_value(self.edited_obj_name)
         self.name_entry.set_value(self.edited_obj_name)
 
 
-        if self.units == "IN":
-            self.apsize_entry.set_value(0.039)
-        else:
-            self.apsize_entry.set_value(1.00)
-
         self.apertures_row = 0
         self.apertures_row = 0
         aper_no = self.apertures_row + 1
         aper_no = self.apertures_row + 1
 
 
@@ -1058,6 +1062,9 @@ class FlatCAMGrbEditor(QtCore.QObject):
         self.apertures_table.itemChanged.connect(self.on_tool_edit)
         self.apertures_table.itemChanged.connect(self.on_tool_edit)
         self.apertures_table.cellPressed.connect(self.on_row_selected)
         self.apertures_table.cellPressed.connect(self.on_row_selected)
 
 
+        # for convenience set the next aperture code in the apcode field
+        self.apcode_entry.set_value(max(self.tool2tooldia.values()) + 1)
+
     def on_aperture_add(self, apid=None):
     def on_aperture_add(self, apid=None):
         self.is_modified = True
         self.is_modified = True
         if apid:
         if apid:
@@ -1069,36 +1076,45 @@ class FlatCAMGrbEditor(QtCore.QObject):
                 self.app.inform.emit(_("[WARNING_NOTCL] Aperture code value is missing or wrong format. "
                 self.app.inform.emit(_("[WARNING_NOTCL] Aperture code value is missing or wrong format. "
                                        "Add it and retry."))
                                        "Add it and retry."))
                 return
                 return
+            if ap_id == '':
+                self.app.inform.emit(_("[WARNING_NOTCL] Aperture code value is missing or wrong format. "
+                                       "Add it and retry."))
+                return
 
 
         if ap_id not in self.olddia_newdia:
         if ap_id not in self.olddia_newdia:
             self.storage_dict[ap_id] = {}
             self.storage_dict[ap_id] = {}
 
 
             type_val = self.aptype_cb.currentText()
             type_val = self.aptype_cb.currentText()
             self.storage_dict[ap_id]['type'] = type_val
             self.storage_dict[ap_id]['type'] = type_val
-            try:
-                size_val = float(self.apsize_entry.get_value())
-            except ValueError:
-                # try to convert comma to decimal point. if it's still not working error message and return
-                try:
-                    size_val = float(self.apsize_entry.get_value().replace(',', '.'))
-                    self.apsize_entry.set_value(size_val)
-                except ValueError:
-                    self.app.inform.emit(_("[WARNING_NOTCL] Aperture size value is missing or wrong format. "
-                                           "Add it and retry."))
-                    return
-            self.storage_dict[ap_id]['size'] = size_val
 
 
             if type_val == 'R':
             if type_val == 'R':
                 try:
                 try:
                     dims = self.apdim_entry.get_value()
                     dims = self.apdim_entry.get_value()
                     self.storage_dict[ap_id]['width'] = dims[0]
                     self.storage_dict[ap_id]['width'] = dims[0]
                     self.storage_dict[ap_id]['height'] = dims[1]
                     self.storage_dict[ap_id]['height'] = dims[1]
+
+                    size_val = math.sqrt((dims[0] ** 2) + (dims[1] ** 2))
+                    self.apsize_entry.set_value(size_val)
+
                 except Exception as e:
                 except Exception as e:
                     log.error("FlatCAMGrbEditor.on_aperture_add() --> the R aperture dims has to be in a "
                     log.error("FlatCAMGrbEditor.on_aperture_add() --> the R aperture dims has to be in a "
                               "tuple format (x,y)\nError: %s" % str(e))
                               "tuple format (x,y)\nError: %s" % str(e))
                     self.app.inform.emit(_("[WARNING_NOTCL] Aperture dimensions value is missing or wrong format. "
                     self.app.inform.emit(_("[WARNING_NOTCL] Aperture dimensions value is missing or wrong format. "
                                            "Add it in format (width, height) and retry."))
                                            "Add it in format (width, height) and retry."))
                     return
                     return
+            else:
+                try:
+                    size_val = float(self.apsize_entry.get_value())
+                except ValueError:
+                    # try to convert comma to decimal point. if it's still not working error message and return
+                    try:
+                        size_val = float(self.apsize_entry.get_value().replace(',', '.'))
+                        self.apsize_entry.set_value(size_val)
+                    except ValueError:
+                        self.app.inform.emit(_("[WARNING_NOTCL] Aperture size value is missing or wrong format. "
+                                               "Add it and retry."))
+                        return
+            self.storage_dict[ap_id]['size'] = size_val
 
 
             self.storage_dict[ap_id]['solid_geometry'] = []
             self.storage_dict[ap_id]['solid_geometry'] = []
             self.storage_dict[ap_id]['follow_geometry'] = []
             self.storage_dict[ap_id]['follow_geometry'] = []
@@ -1112,7 +1128,7 @@ class FlatCAMGrbEditor(QtCore.QObject):
 
 
         # since we add a new tool, we update also the initial state of the tool_table through it's dictionary
         # since we add a new tool, we update also the initial state of the tool_table through it's dictionary
         # we add a new entry in the tool2tooldia dict
         # we add a new entry in the tool2tooldia dict
-        self.tool2tooldia[len(self.olddia_newdia)] = ap_id
+        self.tool2tooldia[len(self.olddia_newdia)] = int(ap_id)
 
 
         self.app.inform.emit(_("[success] Added new aperture with dia: {apid}").format(apid=str(ap_id)))
         self.app.inform.emit(_("[success] Added new aperture with dia: {apid}").format(apid=str(ap_id)))
 
 
@@ -1121,10 +1137,9 @@ class FlatCAMGrbEditor(QtCore.QObject):
         # make a quick sort through the tool2tooldia dict so we find which row to select
         # make a quick sort through the tool2tooldia dict so we find which row to select
         row_to_be_selected = None
         row_to_be_selected = None
         for key in sorted(self.tool2tooldia):
         for key in sorted(self.tool2tooldia):
-            if self.tool2tooldia[key] == ap_id:
+            if self.tool2tooldia[key] == int(ap_id):
                 row_to_be_selected = int(key) - 1
                 row_to_be_selected = int(key) - 1
                 break
                 break
-
         self.apertures_table.selectRow(row_to_be_selected)
         self.apertures_table.selectRow(row_to_be_selected)
 
 
     def on_aperture_delete(self, apid=None):
     def on_aperture_delete(self, apid=None):
@@ -1235,9 +1250,11 @@ class FlatCAMGrbEditor(QtCore.QObject):
         if current_text == 'R':
         if current_text == 'R':
             self.apdim_lbl.show()
             self.apdim_lbl.show()
             self.apdim_entry.show()
             self.apdim_entry.show()
+            self.apsize_entry.setReadOnly(True)
         else:
         else:
             self.apdim_lbl.hide()
             self.apdim_lbl.hide()
             self.apdim_entry.hide()
             self.apdim_entry.hide()
+            self.apsize_entry.setReadOnly(False)
 
 
     def activate(self):
     def activate(self):
         self.connect_canvas_event_handlers()
         self.connect_canvas_event_handlers()
@@ -1405,19 +1422,21 @@ class FlatCAMGrbEditor(QtCore.QObject):
 
 
                 self.storage_dict[apid] = {}
                 self.storage_dict[apid] = {}
                 for k, v in self.gerber_obj.apertures[apid].items():
                 for k, v in self.gerber_obj.apertures[apid].items():
-                    if k == 'solid_geometry':
-                        for geo in v:
-                            if geo is not None:
-                                self.add_gerber_shape(DrawToolShape(geo), solid_storage_elem)
-                        self.storage_dict[apid][k] = solid_storage_elem
-                    elif k == 'follow_geometry':
-                        for geo in v:
-                            if geo is not None:
-                                self.add_gerber_shape(DrawToolShape(geo), follow_storage_elem)
-                        self.storage_dict[apid][k] = follow_storage_elem
-                    else:
-                        self.storage_dict[apid][k] = v
-
+                    try:
+                        if k == 'solid_geometry':
+                            for geo in v:
+                                if geo:
+                                    self.add_gerber_shape(DrawToolShape(geo), solid_storage_elem)
+                            self.storage_dict[apid][k] = solid_storage_elem
+                        elif k == 'follow_geometry':
+                            for geo in v:
+                                if geo is not None:
+                                    self.add_gerber_shape(DrawToolShape(geo), follow_storage_elem)
+                            self.storage_dict[apid][k] = follow_storage_elem
+                        else:
+                            self.storage_dict[apid][k] = v
+                    except Exception as e:
+                        log.debug("FlatCAMGrbEditor.edit_fcgerber().job_thread() --> %s" % str(e))
                 # Check promises and clear if exists
                 # Check promises and clear if exists
                 while True:
                 while True:
                     try:
                     try:
@@ -1426,6 +1445,9 @@ class FlatCAMGrbEditor(QtCore.QObject):
                     except ValueError:
                     except ValueError:
                         break
                         break
 
 
+        for k, v in self.gerber_obj.apertures.items():
+            print(k, v)
+
         for apid in self.gerber_obj.apertures:
         for apid in self.gerber_obj.apertures:
             self.grb_plot_promises.append(apid)
             self.grb_plot_promises.append(apid)
             self.app.worker_task.emit({'fcn': job_thread, 'params': [self, apid]})
             self.app.worker_task.emit({'fcn': job_thread, 'params': [self, apid]})