From 735a20242aaf37584b5a9c97578bb9d65d2ec1d6 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 28 Oct 2020 19:12:15 +0200 Subject: [PATCH] - upgraded the punch Gerber Tool - updated the Turkish translation strings (by Mehmet Kaya) --- CHANGELOG.md | 4 +- appObjects/FlatCAMGerber.py | 2 +- appTools/ToolPunchGerber.py | 678 ++++++++++++++++++------------- locale/tr/LC_MESSAGES/strings.mo | Bin 396170 -> 396294 bytes locale/tr/LC_MESSAGES/strings.po | 28 +- 5 files changed, 413 insertions(+), 299 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0d03843..5875eff1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,12 +27,14 @@ CHANGELOG for FlatCAM beta - fixed Tcl command Paint - temporary fix for comboboxes not finding the the value in the items when setting themselves with a value by defaulting to the first item in the list - fix in Tool Subtract where there was a typo +- upgraded the punch Gerber Tool +- updated the Turkish translation strings (by Mehmet Kaya) 27.10.2020 - created custom classes derived from TextEdit and from LineEdit where I overloaded the context menu and I made all the other classes that were inheriting from them to inherit from those new classes - minor fix in ToolsDB2UI -- updated the Turkuish translation strings (by Mehmet Kaya) +- updated the Turkish translation strings (by Mehmet Kaya) - fixed a bug in conversion of any to Gerber in the section of Excellon conversion - some PEP8 fixes - fixed a bug due of recent chagnes in FileMenuHandlers class diff --git a/appObjects/FlatCAMGerber.py b/appObjects/FlatCAMGerber.py index 84fdb795..f7de5282 100644 --- a/appObjects/FlatCAMGerber.py +++ b/appObjects/FlatCAMGerber.py @@ -212,7 +212,7 @@ class GerberObject(FlatCAMObj, Gerber): self.apertures_row = 0 aper_no = self.apertures_row + 1 sort = [] - for k, v in list(self.apertures.items()): + for k in list(self.apertures.keys()): sort.append(int(k)) sorted_apertures = sorted(sort) diff --git a/appTools/ToolPunchGerber.py b/appTools/ToolPunchGerber.py index 060cac96..eab09f7b 100644 --- a/appTools/ToolPunchGerber.py +++ b/appTools/ToolPunchGerber.py @@ -8,7 +8,7 @@ from PyQt5 import QtCore, QtWidgets, QtGui from appTool import AppTool -from appGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox +from appGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, FCComboBox, FCTable from copy import deepcopy import logging @@ -45,6 +45,8 @@ class ToolPunchGerber(AppTool): self.ui.reset_button.clicked.connect(self.set_tool_ui) self.ui.punch_object_button.clicked.connect(self.on_generate_object) + self.ui.gerber_object_combo.currentIndexChanged.connect(self.build_tool_ui) + self.ui.circular_cb.stateChanged.connect( lambda state: self.ui.circular_ring_entry.setDisabled(False) if state else @@ -97,6 +99,7 @@ class ToolPunchGerber(AppTool): AppTool.run(self) self.set_tool_ui() + self.build_tool_ui() self.app.ui.notebook.setTabText(2, _("Punch Tool")) @@ -106,6 +109,7 @@ class ToolPunchGerber(AppTool): def set_tool_ui(self): self.reset_fields() + self.ui_disconnect() self.ui_connect() self.ui.method_punch.set_value(self.app.defaults["tools_punch_hole_type"]) self.ui.select_all_cb.set_value(False) @@ -126,6 +130,69 @@ class ToolPunchGerber(AppTool): self.ui.factor_entry.set_value(float(self.app.defaults["tools_punch_hole_prop_factor"])) + def build_tool_ui(self): + # get the Gerber file who is the source of the punched Gerber + selection_index = self.ui.gerber_object_combo.currentIndex() + model_index = self.app.collection.index(selection_index, 0, self.ui.gerber_object_combo.rootModelIndex()) + obj = None + + try: + obj = model_index.internalPointer().obj + sort = [int(k) for k in obj.apertures.keys()] + sorted_apertures = sorted(sort) + except Exception: + # no object loaded + sorted_apertures = [] + + n = len(sorted_apertures) + self.ui.apertures_table.setRowCount(n) + + row = 0 + for ap_code in sorted_apertures: + ap_code = str(ap_code) + + ap_code_item = QtWidgets.QTableWidgetItem(ap_code) + ap_code_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + + ap_type_item = QtWidgets.QTableWidgetItem(str(obj.apertures[ap_code]['type'])) + ap_type_item.setFlags(QtCore.Qt.ItemIsEnabled) + + try: + if obj.apertures[ap_code]['size'] is not None: + size_val = self.app.dec_format(float(obj.apertures[ap_code]['size']), self.decimals) + ap_size_item = QtWidgets.QTableWidgetItem(str(size_val)) + else: + ap_size_item = QtWidgets.QTableWidgetItem('') + except KeyError: + ap_size_item = QtWidgets.QTableWidgetItem('') + ap_size_item.setFlags(QtCore.Qt.ItemIsEnabled) + + self.ui.apertures_table.setItem(row, 0, ap_code_item) # Aperture Code + self.ui.apertures_table.setItem(row, 1, ap_type_item) # Aperture Type + self.ui.apertures_table.setItem(row, 2, ap_size_item) # Aperture Dimensions + + # increment row + row += 1 + + self.ui.apertures_table.resizeColumnsToContents() + self.ui.apertures_table.resizeRowsToContents() + + vertical_header = self.ui.apertures_table.verticalHeader() + vertical_header.hide() + # self.ui.apertures_table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + horizontal_header = self.ui.apertures_table.horizontalHeader() + horizontal_header.setMinimumSectionSize(10) + horizontal_header.setDefaultSectionSize(70) + horizontal_header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) + horizontal_header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + + self.ui.apertures_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.ui.apertures_table.setSortingEnabled(False) + # self.ui.apertures_table.setMinimumHeight(self.ui.apertures_table.getHeight()) + # self.ui.apertures_table.setMaximumHeight(self.ui.apertures_table.getHeight()) + def on_select_all(self, state): self.ui_disconnect() if state: @@ -143,29 +210,29 @@ class ToolPunchGerber(AppTool): self.ui_connect() def on_method(self, val): - self.ui.exc_label.setEnabled(False) - self.ui.exc_combo.setEnabled(False) - self.ui.fixed_label.setEnabled(False) - self.ui.dia_label.setEnabled(False) - self.ui.dia_entry.setEnabled(False) - self.ui.ring_frame.setEnabled(False) - self.ui.prop_label.setEnabled(False) - self.ui.factor_label.setEnabled(False) - self.ui.factor_entry.setEnabled(False) + self.ui.exc_label.hide() + self.ui.exc_combo.hide() + self.ui.fixed_label.hide() + self.ui.dia_label.hide() + self.ui.dia_entry.hide() + self.ui.ring_frame.hide() + self.ui.prop_label.hide() + self.ui.factor_label.hide() + self.ui.factor_entry.hide() if val == 'exc': - self.ui.exc_label.setEnabled(True) - self.ui.exc_combo.setEnabled(True) + self.ui.exc_label.show() + self.ui.exc_combo.show() elif val == 'fixed': - self.ui.fixed_label.setEnabled(True) - self.ui.dia_label.setEnabled(True) - self.ui.dia_entry.setEnabled(True) + self.ui.fixed_label.show() + self.ui.dia_label.show() + self.ui.dia_entry.show() elif val == 'ring': - self.ui.ring_frame.setEnabled(True) + self.ui.ring_frame.show() elif val == 'prop': - self.ui.prop_label.setEnabled(True) - self.ui.factor_label.setEnabled(True) - self.ui.factor_entry.setEnabled(True) + self.ui.prop_label.show() + self.ui.factor_label.show() + self.ui.factor_entry.show() def ui_connect(self): self.ui.select_all_cb.stateChanged.connect(self.on_select_all) @@ -192,97 +259,114 @@ class ToolPunchGerber(AppTool): outname = name + "_punched" punch_method = self.ui.method_punch.get_value() + if punch_method == 'exc': + self.on_excellon_method(grb_obj, outname) + elif punch_method == 'fixed': + self.on_fixed_method(grb_obj, outname) + elif punch_method == 'ring': + self.on_ring_method(grb_obj, outname) + elif punch_method == 'prop': + self.on_proportional_method(grb_obj, outname) + + def on_excellon_method(self, grb_obj, outname): + # get the Excellon file whose geometry will create the punch holes + selection_index = self.ui.exc_combo.currentIndex() + model_index = self.app.collection.index(selection_index, 0, self.ui.exc_combo.rootModelIndex()) + + try: + exc_obj = model_index.internalPointer().obj + except Exception: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no Excellon object loaded ...")) + return new_options = {} for opt in grb_obj.options: new_options[opt] = deepcopy(grb_obj.options[opt]) - if punch_method == 'exc': + # this is the punching geometry + exc_solid_geometry = MultiPolygon(exc_obj.solid_geometry) + if isinstance(grb_obj.solid_geometry, list): + grb_solid_geometry = MultiPolygon(grb_obj.solid_geometry) + else: + grb_solid_geometry = grb_obj.solid_geometry - # get the Excellon file whose geometry will create the punch holes - selection_index = self.ui.exc_combo.currentIndex() - model_index = self.app.collection.index(selection_index, 0, self.ui.exc_combo.rootModelIndex()) + # create the punched Gerber solid_geometry + punched_solid_geometry = grb_solid_geometry.difference(exc_solid_geometry) - try: - exc_obj = model_index.internalPointer().obj - except Exception: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no Excellon object loaded ...")) - return + # update the gerber apertures to include the clear geometry so it can be exported successfully + new_apertures = deepcopy(grb_obj.apertures) + new_apertures_items = new_apertures.items() - # this is the punching geometry - exc_solid_geometry = MultiPolygon(exc_obj.solid_geometry) - if isinstance(grb_obj.solid_geometry, list): - grb_solid_geometry = MultiPolygon(grb_obj.solid_geometry) - else: - grb_solid_geometry = grb_obj.solid_geometry + # find maximum aperture id + new_apid = max([int(x) for x, __ in new_apertures_items]) - # create the punched Gerber solid_geometry - punched_solid_geometry = grb_solid_geometry.difference(exc_solid_geometry) + # store here the clear geometry, the key is the drill size + holes_apertures = {} - # update the gerber apertures to include the clear geometry so it can be exported successfully - new_apertures = deepcopy(grb_obj.apertures) - new_apertures_items = new_apertures.items() + for apid, val in new_apertures_items: + for elem in val['geometry']: + # make it work only for Gerber Flashes who are Points in 'follow' + if 'solid' in elem and isinstance(elem['follow'], Point): + for tool in exc_obj.tools: + clear_apid_size = exc_obj.tools[tool]['tooldia'] - # find maximum aperture id - new_apid = max([int(x) for x, __ in new_apertures_items]) + if 'drills' in exc_obj.tools[tool]['drills']: + for drill_pt in exc_obj.tools[tool]['drills']: + # since there may be drills that do not drill into a pad we test only for + # drills in a pad + if drill_pt.within(elem['solid']): + geo_elem = {} + geo_elem['clear'] = drill_pt - # store here the clear geometry, the key is the drill size - holes_apertures = {} + if clear_apid_size not in holes_apertures: + holes_apertures[clear_apid_size] = {} + holes_apertures[clear_apid_size]['type'] = 'C' + holes_apertures[clear_apid_size]['size'] = clear_apid_size + holes_apertures[clear_apid_size]['geometry'] = [] - for apid, val in new_apertures_items: - for elem in val['geometry']: - # make it work only for Gerber Flashes who are Points in 'follow' - if 'solid' in elem and isinstance(elem['follow'], Point): - for tool in exc_obj.tools: - clear_apid_size = exc_obj.tools[tool]['tooldia'] + holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem)) - if 'drills' in exc_obj.tools[tool]['drills']: - for drill_pt in exc_obj.tools[tool]['drills']: - # since there may be drills that do not drill into a pad we test only for - # drills in a pad - if drill_pt.within(elem['solid']): - geo_elem = {} - geo_elem['clear'] = drill_pt + # add the clear geometry to new apertures; it's easier than to test if there are apertures with the same + # size and add there the clear geometry + for hole_size, ap_val in holes_apertures.items(): + new_apid += 1 + new_apertures[str(new_apid)] = deepcopy(ap_val) - if clear_apid_size not in holes_apertures: - holes_apertures[clear_apid_size] = {} - holes_apertures[clear_apid_size]['type'] = 'C' - holes_apertures[clear_apid_size]['size'] = clear_apid_size - holes_apertures[clear_apid_size]['geometry'] = [] + def init_func(new_obj, app_obj): + new_obj.options.update(new_options) + new_obj.options['name'] = outname + new_obj.fill_color = deepcopy(grb_obj.fill_color) + new_obj.outline_color = deepcopy(grb_obj.outline_color) - holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem)) + new_obj.apertures = deepcopy(new_apertures) - # add the clear geometry to new apertures; it's easier than to test if there are apertures with the same - # size and add there the clear geometry - for hole_size, ap_val in holes_apertures.items(): - new_apid += 1 - new_apertures[str(new_apid)] = deepcopy(ap_val) + new_obj.solid_geometry = deepcopy(punched_solid_geometry) + new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None, + local_use=new_obj, use_thread=False) - def init_func(new_obj, app_obj): - new_obj.options.update(new_options) - new_obj.options['name'] = outname - new_obj.fill_color = deepcopy(grb_obj.fill_color) - new_obj.outline_color = deepcopy(grb_obj.outline_color) + self.app.app_obj.new_object('gerber', outname, init_func) - new_obj.apertures = deepcopy(new_apertures) + def on_fixed_method(self, grb_obj, outname): + punch_size = float(self.ui.dia_entry.get_value()) + if punch_size == 0.0: + self.app.inform.emit('[WARNING_NOTCL] %s' % _("The value of the fixed diameter is 0.0. Aborting.")) + return 'fail' - new_obj.solid_geometry = deepcopy(punched_solid_geometry) - new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None, - local_use=new_obj, use_thread=False) + fail_msg = _("Could not generate punched hole Gerber because the punch hole size is bigger than" + " some of the apertures in the Gerber object.") - self.app.app_obj.new_object('gerber', outname, init_func) - elif punch_method == 'fixed': - punch_size = float(self.ui.dia_entry.get_value()) + new_options = {} + for opt in grb_obj.options: + new_options[opt] = deepcopy(grb_obj.options[opt]) - if punch_size == 0.0: - self.app.inform.emit('[WARNING_NOTCL] %s' % _("The value of the fixed diameter is 0.0. Aborting.")) - return 'fail' + # selected codes in thre apertures UI table + sel_apid = [] + for it in self.ui.apertures_table.selectedItems(): + sel_apid.append(it.text()) - fail_msg = _("Could not generate punched hole Gerber because the punch hole size is bigger than" - " some of the apertures in the Gerber object.") - - punching_geo = [] - for apid in grb_obj.apertures: + punching_geo = [] + for apid in grb_obj.apertures: + if apid in sel_apid: if grb_obj.apertures[apid]['type'] == 'C' and self.ui.circular_cb.get_value(): for elem in grb_obj.apertures[apid]['geometry']: if 'follow' in elem: @@ -332,103 +416,112 @@ class ToolPunchGerber(AppTool): return 'fail' punching_geo.append(elem['follow'].buffer(punch_size / 2)) - punching_geo = MultiPolygon(punching_geo) - if isinstance(grb_obj.solid_geometry, list): - temp_solid_geometry = MultiPolygon(grb_obj.solid_geometry) - else: - temp_solid_geometry = grb_obj.solid_geometry - punched_solid_geometry = temp_solid_geometry.difference(punching_geo) + punching_geo = MultiPolygon(punching_geo) + if isinstance(grb_obj.solid_geometry, list): + temp_solid_geometry = MultiPolygon(grb_obj.solid_geometry) + else: + temp_solid_geometry = grb_obj.solid_geometry + punched_solid_geometry = temp_solid_geometry.difference(punching_geo) - if punched_solid_geometry == temp_solid_geometry: - self.app.inform.emit('[WARNING_NOTCL] %s' % - _("Could not generate punched hole Gerber because the newly created object " - "geometry is the same as the one in the source object geometry...")) - return 'fail' + if punched_solid_geometry == temp_solid_geometry: + self.app.inform.emit('[WARNING_NOTCL] %s' % + _("Could not generate punched hole Gerber because the newly created object " + "geometry is the same as the one in the source object geometry...")) + return 'fail' - # update the gerber apertures to include the clear geometry so it can be exported successfully - new_apertures = deepcopy(grb_obj.apertures) - new_apertures_items = new_apertures.items() + # update the gerber apertures to include the clear geometry so it can be exported successfully + new_apertures = deepcopy(grb_obj.apertures) + new_apertures_items = new_apertures.items() - # find maximum aperture id - new_apid = max([int(x) for x, __ in new_apertures_items]) + # find maximum aperture id + new_apid = max([int(x) for x, __ in new_apertures_items]) - # store here the clear geometry, the key is the drill size - holes_apertures = {} + # store here the clear geometry, the key is the drill size + holes_apertures = {} - for apid, val in new_apertures_items: - for elem in val['geometry']: - # make it work only for Gerber Flashes who are Points in 'follow' - if 'solid' in elem and isinstance(elem['follow'], Point): - for geo in punching_geo: - clear_apid_size = punch_size + for apid, val in new_apertures_items: + for elem in val['geometry']: + # make it work only for Gerber Flashes who are Points in 'follow' + if 'solid' in elem and isinstance(elem['follow'], Point): + for geo in punching_geo: + clear_apid_size = punch_size - # since there may be drills that do not drill into a pad we test only for drills in a pad - if geo.within(elem['solid']): - geo_elem = {} - geo_elem['clear'] = geo.centroid + # since there may be drills that do not drill into a pad we test only for drills in a pad + if geo.within(elem['solid']): + geo_elem = {} + geo_elem['clear'] = geo.centroid - if clear_apid_size not in holes_apertures: - holes_apertures[clear_apid_size] = {} - holes_apertures[clear_apid_size]['type'] = 'C' - holes_apertures[clear_apid_size]['size'] = clear_apid_size - holes_apertures[clear_apid_size]['geometry'] = [] + if clear_apid_size not in holes_apertures: + holes_apertures[clear_apid_size] = {} + holes_apertures[clear_apid_size]['type'] = 'C' + holes_apertures[clear_apid_size]['size'] = clear_apid_size + holes_apertures[clear_apid_size]['geometry'] = [] - holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem)) + holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem)) - # add the clear geometry to new apertures; it's easier than to test if there are apertures with the same - # size and add there the clear geometry - for hole_size, ap_val in holes_apertures.items(): - new_apid += 1 - new_apertures[str(new_apid)] = deepcopy(ap_val) + # add the clear geometry to new apertures; it's easier than to test if there are apertures with the same + # size and add there the clear geometry + for hole_size, ap_val in holes_apertures.items(): + new_apid += 1 + new_apertures[str(new_apid)] = deepcopy(ap_val) - def init_func(new_obj, app_obj): - new_obj.options.update(new_options) - new_obj.options['name'] = outname - new_obj.fill_color = deepcopy(grb_obj.fill_color) - new_obj.outline_color = deepcopy(grb_obj.outline_color) + def init_func(new_obj, app_obj): + new_obj.options.update(new_options) + new_obj.options['name'] = outname + new_obj.fill_color = deepcopy(grb_obj.fill_color) + new_obj.outline_color = deepcopy(grb_obj.outline_color) - new_obj.apertures = deepcopy(new_apertures) + new_obj.apertures = deepcopy(new_apertures) - new_obj.solid_geometry = deepcopy(punched_solid_geometry) - new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None, - local_use=new_obj, use_thread=False) + new_obj.solid_geometry = deepcopy(punched_solid_geometry) + new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None, + local_use=new_obj, use_thread=False) - self.app.app_obj.new_object('gerber', outname, init_func) - elif punch_method == 'ring': - circ_r_val = self.ui.circular_ring_entry.get_value() - oblong_r_val = self.ui.oblong_ring_entry.get_value() - square_r_val = self.ui.square_ring_entry.get_value() - rect_r_val = self.ui.rectangular_ring_entry.get_value() - other_r_val = self.ui.other_ring_entry.get_value() + self.app.app_obj.new_object('gerber', outname, init_func) - dia = None + def on_ring_method(self, grb_obj, outname): + circ_r_val = self.ui.circular_ring_entry.get_value() + oblong_r_val = self.ui.oblong_ring_entry.get_value() + square_r_val = self.ui.square_ring_entry.get_value() + rect_r_val = self.ui.rectangular_ring_entry.get_value() + other_r_val = self.ui.other_ring_entry.get_value() + dia = None - if isinstance(grb_obj.solid_geometry, list): - temp_solid_geometry = MultiPolygon(grb_obj.solid_geometry) - else: - temp_solid_geometry = grb_obj.solid_geometry + new_options = {} + for opt in grb_obj.options: + new_options[opt] = deepcopy(grb_obj.options[opt]) - punched_solid_geometry = temp_solid_geometry + if isinstance(grb_obj.solid_geometry, list): + temp_solid_geometry = MultiPolygon(grb_obj.solid_geometry) + else: + temp_solid_geometry = grb_obj.solid_geometry - new_apertures = deepcopy(grb_obj.apertures) - new_apertures_items = new_apertures.items() + punched_solid_geometry = temp_solid_geometry - # find maximum aperture id - new_apid = max([int(x) for x, __ in new_apertures_items]) + new_apertures = deepcopy(grb_obj.apertures) + new_apertures_items = new_apertures.items() - # store here the clear geometry, the key is the new aperture size - holes_apertures = {} + # find maximum aperture id + new_apid = max([int(x) for x, __ in new_apertures_items]) - for apid, apid_value in grb_obj.apertures.items(): - ap_type = apid_value['type'] - punching_geo = [] + # selected codes in the apertures UI table + sel_apid = [] + for it in self.ui.apertures_table.selectedItems(): + sel_apid.append(it.text()) + # store here the clear geometry, the key is the new aperture size + holes_apertures = {} + + for apid, apid_value in grb_obj.apertures.items(): + ap_type = apid_value['type'] + punching_geo = [] + + if apid in sel_apid: if ap_type == 'C' and self.ui.circular_cb.get_value(): dia = float(apid_value['size']) - (2 * circ_r_val) for elem in apid_value['geometry']: if 'follow' in elem and isinstance(elem['follow'], Point): punching_geo.append(elem['follow'].buffer(dia / 2)) - elif ap_type == 'O' and self.ui.oblong_cb.get_value(): width = float(apid_value['width']) height = float(apid_value['height']) @@ -442,7 +535,6 @@ class ToolPunchGerber(AppTool): if 'follow' in elem: if isinstance(elem['follow'], Point): punching_geo.append(elem['follow'].buffer(dia / 2)) - elif ap_type == 'R': width = float(apid_value['width']) height = float(apid_value['height']) @@ -466,7 +558,6 @@ class ToolPunchGerber(AppTool): if 'follow' in elem: if isinstance(elem['follow'], Point): punching_geo.append(elem['follow'].buffer(dia / 2)) - elif self.ui.other_cb.get_value(): try: dia = float(apid_value['size']) - (2 * other_r_val) @@ -486,88 +577,95 @@ class ToolPunchGerber(AppTool): if isinstance(elem['follow'], Point): punching_geo.append(elem['follow'].buffer(dia / 2)) - # if dia is None then none of the above applied so we skip the following - if dia is None: - continue + # if dia is None then none of the above applied so we skip the following + if dia is None: + continue - punching_geo = MultiPolygon(punching_geo) + punching_geo = MultiPolygon(punching_geo) - if punching_geo is None or punching_geo.is_empty: - continue + if punching_geo is None or punching_geo.is_empty: + continue - punched_solid_geometry = punched_solid_geometry.difference(punching_geo) + punched_solid_geometry = punched_solid_geometry.difference(punching_geo) - # update the gerber apertures to include the clear geometry so it can be exported successfully - for elem in apid_value['geometry']: - # make it work only for Gerber Flashes who are Points in 'follow' - if 'solid' in elem and isinstance(elem['follow'], Point): - clear_apid_size = dia - for geo in punching_geo: + # update the gerber apertures to include the clear geometry so it can be exported successfully + for elem in apid_value['geometry']: + # make it work only for Gerber Flashes who are Points in 'follow' + if 'solid' in elem and isinstance(elem['follow'], Point): + clear_apid_size = dia + for geo in punching_geo: - # since there may be drills that do not drill into a pad we test only for geos in a pad - if geo.within(elem['solid']): - geo_elem = {} - geo_elem['clear'] = geo.centroid + # since there may be drills that do not drill into a pad we test only for geos in a pad + if geo.within(elem['solid']): + geo_elem = {} + geo_elem['clear'] = geo.centroid - if clear_apid_size not in holes_apertures: - holes_apertures[clear_apid_size] = {} - holes_apertures[clear_apid_size]['type'] = 'C' - holes_apertures[clear_apid_size]['size'] = clear_apid_size - holes_apertures[clear_apid_size]['geometry'] = [] + if clear_apid_size not in holes_apertures: + holes_apertures[clear_apid_size] = {} + holes_apertures[clear_apid_size]['type'] = 'C' + holes_apertures[clear_apid_size]['size'] = clear_apid_size + holes_apertures[clear_apid_size]['geometry'] = [] - holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem)) + holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem)) - # add the clear geometry to new apertures; it's easier than to test if there are apertures with the same - # size and add there the clear geometry - for hole_size, ap_val in holes_apertures.items(): - new_apid += 1 - new_apertures[str(new_apid)] = deepcopy(ap_val) + # add the clear geometry to new apertures; it's easier than to test if there are apertures with the same + # size and add there the clear geometry + for hole_size, ap_val in holes_apertures.items(): + new_apid += 1 + new_apertures[str(new_apid)] = deepcopy(ap_val) - def init_func(new_obj, app_obj): - new_obj.options.update(new_options) - new_obj.options['name'] = outname - new_obj.fill_color = deepcopy(grb_obj.fill_color) - new_obj.outline_color = deepcopy(grb_obj.outline_color) + def init_func(new_obj, app_obj): + new_obj.options.update(new_options) + new_obj.options['name'] = outname + new_obj.fill_color = deepcopy(grb_obj.fill_color) + new_obj.outline_color = deepcopy(grb_obj.outline_color) - new_obj.apertures = deepcopy(new_apertures) + new_obj.apertures = deepcopy(new_apertures) - new_obj.solid_geometry = deepcopy(punched_solid_geometry) - new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None, - local_use=new_obj, use_thread=False) + new_obj.solid_geometry = deepcopy(punched_solid_geometry) + new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None, + local_use=new_obj, use_thread=False) - self.app.app_obj.new_object('gerber', outname, init_func) + self.app.app_obj.new_object('gerber', outname, init_func) - elif punch_method == 'prop': - prop_factor = self.ui.factor_entry.get_value() / 100.0 + def on_proportional_method(self, grb_obj, outname): + prop_factor = self.ui.factor_entry.get_value() / 100.0 + dia = None + new_options = {} + for opt in grb_obj.options: + new_options[opt] = deepcopy(grb_obj.options[opt]) - dia = None + if isinstance(grb_obj.solid_geometry, list): + temp_solid_geometry = MultiPolygon(grb_obj.solid_geometry) + else: + temp_solid_geometry = grb_obj.solid_geometry - if isinstance(grb_obj.solid_geometry, list): - temp_solid_geometry = MultiPolygon(grb_obj.solid_geometry) - else: - temp_solid_geometry = grb_obj.solid_geometry + punched_solid_geometry = temp_solid_geometry - punched_solid_geometry = temp_solid_geometry + new_apertures = deepcopy(grb_obj.apertures) + new_apertures_items = new_apertures.items() - new_apertures = deepcopy(grb_obj.apertures) - new_apertures_items = new_apertures.items() + # find maximum aperture id + new_apid = max([int(x) for x, __ in new_apertures_items]) - # find maximum aperture id - new_apid = max([int(x) for x, __ in new_apertures_items]) + # selected codes in the apertures UI table + sel_apid = [] + for it in self.ui.apertures_table.selectedItems(): + sel_apid.append(it.text()) - # store here the clear geometry, the key is the new aperture size - holes_apertures = {} + # store here the clear geometry, the key is the new aperture size + holes_apertures = {} - for apid, apid_value in grb_obj.apertures.items(): - ap_type = apid_value['type'] - punching_geo = [] + for apid, apid_value in grb_obj.apertures.items(): + ap_type = apid_value['type'] + punching_geo = [] + if apid in sel_apid: if ap_type == 'C' and self.ui.circular_cb.get_value(): dia = float(apid_value['size']) * prop_factor for elem in apid_value['geometry']: if 'follow' in elem and isinstance(elem['follow'], Point): punching_geo.append(elem['follow'].buffer(dia / 2)) - elif ap_type == 'O' and self.ui.oblong_cb.get_value(): width = float(apid_value['width']) height = float(apid_value['height']) @@ -581,7 +679,6 @@ class ToolPunchGerber(AppTool): if 'follow' in elem: if isinstance(elem['follow'], Point): punching_geo.append(elem['follow'].buffer(dia / 2)) - elif ap_type == 'R': width = float(apid_value['width']) height = float(apid_value['height']) @@ -605,7 +702,6 @@ class ToolPunchGerber(AppTool): if 'follow' in elem: if isinstance(elem['follow'], Point): punching_geo.append(elem['follow'].buffer(dia / 2)) - elif self.ui.other_cb.get_value(): try: dia = float(apid_value['size']) * prop_factor @@ -625,56 +721,56 @@ class ToolPunchGerber(AppTool): if isinstance(elem['follow'], Point): punching_geo.append(elem['follow'].buffer(dia / 2)) - # if dia is None then none of the above applied so we skip the following - if dia is None: - continue + # if dia is None then none of the above applied so we skip the following + if dia is None: + continue - punching_geo = MultiPolygon(punching_geo) + punching_geo = MultiPolygon(punching_geo) - if punching_geo is None or punching_geo.is_empty: - continue + if punching_geo is None or punching_geo.is_empty: + continue - punched_solid_geometry = punched_solid_geometry.difference(punching_geo) + punched_solid_geometry = punched_solid_geometry.difference(punching_geo) - # update the gerber apertures to include the clear geometry so it can be exported successfully - for elem in apid_value['geometry']: - # make it work only for Gerber Flashes who are Points in 'follow' - if 'solid' in elem and isinstance(elem['follow'], Point): - clear_apid_size = dia - for geo in punching_geo: + # update the gerber apertures to include the clear geometry so it can be exported successfully + for elem in apid_value['geometry']: + # make it work only for Gerber Flashes who are Points in 'follow' + if 'solid' in elem and isinstance(elem['follow'], Point): + clear_apid_size = dia + for geo in punching_geo: - # since there may be drills that do not drill into a pad we test only for geos in a pad - if geo.within(elem['solid']): - geo_elem = {} - geo_elem['clear'] = geo.centroid + # since there may be drills that do not drill into a pad we test only for geos in a pad + if geo.within(elem['solid']): + geo_elem = {} + geo_elem['clear'] = geo.centroid - if clear_apid_size not in holes_apertures: - holes_apertures[clear_apid_size] = {} - holes_apertures[clear_apid_size]['type'] = 'C' - holes_apertures[clear_apid_size]['size'] = clear_apid_size - holes_apertures[clear_apid_size]['geometry'] = [] + if clear_apid_size not in holes_apertures: + holes_apertures[clear_apid_size] = {} + holes_apertures[clear_apid_size]['type'] = 'C' + holes_apertures[clear_apid_size]['size'] = clear_apid_size + holes_apertures[clear_apid_size]['geometry'] = [] - holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem)) + holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem)) - # add the clear geometry to new apertures; it's easier than to test if there are apertures with the same - # size and add there the clear geometry - for hole_size, ap_val in holes_apertures.items(): - new_apid += 1 - new_apertures[str(new_apid)] = deepcopy(ap_val) + # add the clear geometry to new apertures; it's easier than to test if there are apertures with the same + # size and add there the clear geometry + for hole_size, ap_val in holes_apertures.items(): + new_apid += 1 + new_apertures[str(new_apid)] = deepcopy(ap_val) - def init_func(new_obj, app_obj): - new_obj.options.update(new_options) - new_obj.options['name'] = outname - new_obj.fill_color = deepcopy(grb_obj.fill_color) - new_obj.outline_color = deepcopy(grb_obj.outline_color) + def init_func(new_obj, app_obj): + new_obj.options.update(new_options) + new_obj.options['name'] = outname + new_obj.fill_color = deepcopy(grb_obj.fill_color) + new_obj.outline_color = deepcopy(grb_obj.outline_color) - new_obj.apertures = deepcopy(new_apertures) + new_obj.apertures = deepcopy(new_apertures) - new_obj.solid_geometry = deepcopy(punched_solid_geometry) - new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None, - local_use=new_obj, use_thread=False) + new_obj.solid_geometry = deepcopy(punched_solid_geometry) + new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None, + local_use=new_obj, use_thread=False) - self.app.app_obj.new_object('gerber', outname, init_func) + self.app.app_obj.new_object('gerber', outname, init_func) def reset_fields(self): self.ui.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) @@ -738,9 +834,18 @@ class PunchUI: grid_lay.addWidget(self.padt_label, 3, 0, 1, 2) + pad_all_grid = QtWidgets.QGridLayout() + pad_all_grid.setColumnStretch(0, 0) + pad_all_grid.setColumnStretch(1, 1) + grid_lay.addLayout(pad_all_grid, 5, 0, 1, 2) + + pad_grid = QtWidgets.QGridLayout() + pad_grid.setColumnStretch(0, 0) + pad_all_grid.addLayout(pad_grid, 0, 0) + # Select all self.select_all_cb = FCCheckBox('%s' % _("ALL")) - grid_lay.addWidget(self.select_all_cb) + pad_grid.addWidget(self.select_all_cb, 0, 0) # Circular Aperture Selection self.circular_cb = FCCheckBox('%s' % _("Circular")) @@ -748,7 +853,7 @@ class PunchUI: _("Process Circular Pads.") ) - grid_lay.addWidget(self.circular_cb, 5, 0, 1, 2) + pad_grid.addWidget(self.circular_cb, 1, 0) # Oblong Aperture Selection self.oblong_cb = FCCheckBox('%s' % _("Oblong")) @@ -756,7 +861,7 @@ class PunchUI: _("Process Oblong Pads.") ) - grid_lay.addWidget(self.oblong_cb, 6, 0, 1, 2) + pad_grid.addWidget(self.oblong_cb, 2, 0) # Square Aperture Selection self.square_cb = FCCheckBox('%s' % _("Square")) @@ -764,7 +869,7 @@ class PunchUI: _("Process Square Pads.") ) - grid_lay.addWidget(self.square_cb, 7, 0, 1, 2) + pad_grid.addWidget(self.square_cb, 3, 0) # Rectangular Aperture Selection self.rectangular_cb = FCCheckBox('%s' % _("Rectangular")) @@ -772,7 +877,7 @@ class PunchUI: _("Process Rectangular Pads.") ) - grid_lay.addWidget(self.rectangular_cb, 8, 0, 1, 2) + pad_grid.addWidget(self.rectangular_cb, 4, 0) # Others type of Apertures Selection self.other_cb = FCCheckBox('%s' % _("Others")) @@ -780,7 +885,29 @@ class PunchUI: _("Process pads not in the categories above.") ) - grid_lay.addWidget(self.other_cb, 9, 0, 1, 2) + pad_grid.addWidget(self.other_cb, 5, 0) + + # Aperture Table + self.apertures_table = FCTable() + pad_all_grid.addWidget(self.apertures_table, 0, 1) + + self.apertures_table.setColumnCount(3) + self.apertures_table.setHorizontalHeaderLabels([_('Code'), _('Type'), _('Size')]) + self.apertures_table.setSortingEnabled(False) + self.apertures_table.setRowCount(0) + self.apertures_table.resizeColumnsToContents() + self.apertures_table.resizeRowsToContents() + + self.apertures_table.horizontalHeaderItem(0).setToolTip( + _("Aperture Code")) + self.apertures_table.horizontalHeaderItem(1).setToolTip( + _("Type of aperture: circular, rectangle, macros etc")) + self.apertures_table.horizontalHeaderItem(2).setToolTip( + _("Aperture Size:")) + + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred) + self.apertures_table.setSizePolicy(sizePolicy) + self.apertures_table.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) separator_line = QtWidgets.QFrame() separator_line.setFrameShape(QtWidgets.QFrame.HLine) @@ -832,11 +959,6 @@ class PunchUI: grid0.addWidget(self.exc_label, 3, 0, 1, 2) grid0.addWidget(self.exc_combo, 4, 0, 1, 2) - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - grid0.addWidget(separator_line, 5, 0, 1, 2) - # Fixed Dia self.fixed_label = QtWidgets.QLabel('%s' % _("Fixed Diameter")) grid0.addWidget(self.fixed_label, 6, 0, 1, 2) @@ -854,11 +976,9 @@ class PunchUI: grid0.addWidget(self.dia_label, 8, 0) grid0.addWidget(self.dia_entry, 8, 1) - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - grid0.addWidget(separator_line, 9, 0, 1, 2) - + # ############################################################################################################# + # RING FRAME + # ############################################################################################################# self.ring_frame = QtWidgets.QFrame() self.ring_frame.setContentsMargins(0, 0, 0, 0) grid0.addWidget(self.ring_frame, 10, 0, 1, 2) @@ -946,11 +1066,7 @@ class PunchUI: self.grid1.addWidget(self.other_ring_label, 7, 0) self.grid1.addWidget(self.other_ring_entry, 7, 1) - - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Sunken) - grid0.addWidget(separator_line, 11, 0, 1, 2) + # ############################################################################################################# # Proportional value self.prop_label = QtWidgets.QLabel('%s' % _("Proportional Diameter")) @@ -1012,10 +1128,10 @@ class PunchUI: self.rectangular_ring_entry.setEnabled(False) self.other_ring_entry.setEnabled(False) - self.dia_entry.setDisabled(True) - self.dia_label.setDisabled(True) - self.factor_label.setDisabled(True) - self.factor_entry.setDisabled(True) + self.dia_entry.hide() + self.dia_label.hide() + self.factor_label.hide() + self.factor_entry.hide() # #################################### FINSIHED GUI ########################### # ############################################################################# diff --git a/locale/tr/LC_MESSAGES/strings.mo b/locale/tr/LC_MESSAGES/strings.mo index a9456957004b21c106c4f86a15a55196731dd7e1..4a39bc60eb7a348c7c1467279186177761d5261a 100644 GIT binary patch delta 73271 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
eSAn|?sXgq@z$GertJHZ7k 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 OJ1gz2m*@I(b^3p5v4cVY diff --git a/locale/tr/LC_MESSAGES/strings.po b/locale/tr/LC_MESSAGES/strings.po index a16bb3d1..e19c4010 100644 --- a/locale/tr/LC_MESSAGES/strings.po +++ b/locale/tr/LC_MESSAGES/strings.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: 2020-10-28 10:58+0200\n" -"PO-Revision-Date: 2020-10-28 10:58+0200\n" +"PO-Revision-Date: 2020-10-28 15:13+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: tr_TR\n" @@ -89,10 +89,8 @@ msgid "Bookmark added." msgstr "Yer işareti eklendi." #: Bookmark.py:243 app_Main.py:3207 app_Main.py:3249 -#, fuzzy -#| msgid "Backup" msgid "Backup Site" -msgstr "Yedekleme" +msgstr "Alternatif Web Sayfası" #: Bookmark.py:244 msgid "This bookmark can not be removed" @@ -4986,7 +4984,7 @@ msgstr "Gerber Özellikleri" #: appGUI/MainGUI.py:610 msgid "Shortcuts List" -msgstr "" +msgstr "Klavye Kısayol Listesi" #: appGUI/MainGUI.py:610 appGUI/MainGUI.py:4398 msgid "F3" @@ -13722,11 +13720,11 @@ msgstr "Hatanın nedeni" #: appObjects/ObjectCollection.py:1195 msgid "All objects are selected." -msgstr "Hatanın nedeni." +msgstr "Nesnelerin Tümü Seçildi." #: appObjects/ObjectCollection.py:1205 msgid "Objects selection is cleared." -msgstr "Nesnelerin seçimi temizlendi." +msgstr "Nesnelerin seçimi kaldırıldı." #: appParsers/ParseExcellon.py:292 msgid "This is GCODE mark" @@ -18536,20 +18534,18 @@ msgid "" "If you can't get any informations about the application\n" "use the YouTube channel link from the Help menu." msgstr "" -"Aşağıdaki durumlarda bu girişe başka bir\n" -"sitede izin verilecektir:\n" +"Bu giriş, aşağıdaki durumlarda başka bir web sayfasına yönlendirecektir:\n" "\n" -"1. FlatCAM.org web sitesi çalışmıyor\n" -"2. Birisi FlatCAM projesini çatalladı ve \n" -"kendi web sitesine işaret etmek istiyor\n" +"1. FlatCAM.org sayfası kapandığında\n" +"2. Birisi FlatCAM projesini kopyaladığında ve sizi kendi web sayfasına \n" +"yönlendirmek istediğinde\n" "\n" -"Uygulama'in beta sürümü hakkında herhangi\n" -"bir bilgi alamıyorsanız, Yardım menüsündeki\n" -"YouTube kanalı bağlantısını kullanın." +"Uygulama hakkında bilgi alamazsanız, Yardım menüsünden \n" +"\"YouTube Kanalı\" bağlantısını kullanın." #: app_Main.py:3294 msgid "Alternative website" -msgstr "Alternatif web sitesi" +msgstr "Alternatif Web Sayfası" #: app_Main.py:3636 msgid "Selected Excellon file extensions registered with FlatCAM."