- 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
This commit is contained in:
parent
28dac56051
commit
7c0cfac8de
@ -1250,6 +1250,7 @@ class App(QtCore.QObject):
|
|||||||
# Menu
|
# Menu
|
||||||
self.ui.menufilenewproject.triggered.connect(self.on_file_new_click)
|
self.ui.menufilenewproject.triggered.connect(self.on_file_new_click)
|
||||||
self.ui.menufilenewgeo.triggered.connect(self.new_geometry_object)
|
self.ui.menufilenewgeo.triggered.connect(self.new_geometry_object)
|
||||||
|
self.ui.menufilenewgrb.triggered.connect(self.new_gerber_object)
|
||||||
self.ui.menufilenewexc.triggered.connect(self.new_excellon_object)
|
self.ui.menufilenewexc.triggered.connect(self.new_excellon_object)
|
||||||
|
|
||||||
self.ui.menufileopengerber.triggered.connect(self.on_fileopengerber)
|
self.ui.menufileopengerber.triggered.connect(self.on_fileopengerber)
|
||||||
@ -2047,6 +2048,7 @@ class App(QtCore.QObject):
|
|||||||
self.ui.zoom_out_btn.triggered.connect(lambda: self.plotcanvas.zoom(1.5))
|
self.ui.zoom_out_btn.triggered.connect(lambda: self.plotcanvas.zoom(1.5))
|
||||||
|
|
||||||
self.ui.newgeo_btn.triggered.connect(self.new_geometry_object)
|
self.ui.newgeo_btn.triggered.connect(self.new_geometry_object)
|
||||||
|
self.ui.newgrb_btn.triggered.connect(self.new_gerber_object)
|
||||||
self.ui.newexc_btn.triggered.connect(self.new_excellon_object)
|
self.ui.newexc_btn.triggered.connect(self.new_excellon_object)
|
||||||
self.ui.editgeo_btn.triggered.connect(self.object2editor)
|
self.ui.editgeo_btn.triggered.connect(self.object2editor)
|
||||||
self.ui.update_obj_btn.triggered.connect(lambda: self.editor2object())
|
self.ui.update_obj_btn.triggered.connect(lambda: self.editor2object())
|
||||||
@ -2175,22 +2177,30 @@ class App(QtCore.QObject):
|
|||||||
log. debug("App.editor2object() --> Geometry --> %s" % str(e))
|
log. debug("App.editor2object() --> Geometry --> %s" % str(e))
|
||||||
|
|
||||||
elif isinstance(edited_obj, FlatCAMGerber):
|
elif isinstance(edited_obj, FlatCAMGerber):
|
||||||
|
new_obj = self.collection.get_active()
|
||||||
obj_type = "Gerber"
|
obj_type = "Gerber"
|
||||||
if cleanup is None:
|
if cleanup is None:
|
||||||
self.grb_editor.update_fcgerber(edited_obj)
|
self.grb_editor.update_fcgerber(edited_obj)
|
||||||
self.grb_editor.update_options(edited_obj)
|
self.grb_editor.update_options(new_obj)
|
||||||
self.grb_editor.deactivate()
|
self.grb_editor.deactivate()
|
||||||
|
|
||||||
# update the geo object options so it is including the bounding box values
|
# delete the old object (the source object) if it was an empty one
|
||||||
try:
|
if edited_obj.solid_geometry.is_empty:
|
||||||
xmin, ymin, xmax, ymax = edited_obj.bounds()
|
old_name = edited_obj.options['name']
|
||||||
edited_obj.options['xmin'] = xmin
|
self.collection.set_active(old_name)
|
||||||
edited_obj.options['ymin'] = ymin
|
self.collection.delete_active()
|
||||||
edited_obj.options['xmax'] = xmax
|
else:
|
||||||
edited_obj.options['ymax'] = ymax
|
# update the geo object options so it is including the bounding box values
|
||||||
except AttributeError as e:
|
# but don't do this for objects that are made out of empty source objects, it will fail
|
||||||
self.inform.emit(_("[WARNING] Object empty after edit."))
|
try:
|
||||||
log.debug("App.editor2object() --> Gerber --> %s" % str(e))
|
xmin, ymin, xmax, ymax = new_obj.bounds()
|
||||||
|
new_obj.options['xmin'] = xmin
|
||||||
|
new_obj.options['ymin'] = ymin
|
||||||
|
new_obj.options['xmax'] = xmax
|
||||||
|
new_obj.options['ymax'] = ymax
|
||||||
|
except Exception as e:
|
||||||
|
self.inform.emit(_("[WARNING] Object empty after edit."))
|
||||||
|
log.debug("App.editor2object() --> Gerber --> %s" % str(e))
|
||||||
|
|
||||||
elif isinstance(edited_obj, FlatCAMExcellon):
|
elif isinstance(edited_obj, FlatCAMExcellon):
|
||||||
obj_type = "Excellon"
|
obj_type = "Excellon"
|
||||||
@ -2842,7 +2852,7 @@ class App(QtCore.QObject):
|
|||||||
def new_excellon_object(self):
|
def new_excellon_object(self):
|
||||||
self.report_usage("new_excellon_object()")
|
self.report_usage("new_excellon_object()")
|
||||||
|
|
||||||
self.new_object('excellon', 'new_e', lambda x, y: None, plot=False)
|
self.new_object('excellon', 'new_exc', lambda x, y: None, plot=False)
|
||||||
|
|
||||||
def new_geometry_object(self):
|
def new_geometry_object(self):
|
||||||
self.report_usage("new_geometry_object()")
|
self.report_usage("new_geometry_object()")
|
||||||
@ -2850,7 +2860,19 @@ class App(QtCore.QObject):
|
|||||||
def initialize(obj, self):
|
def initialize(obj, self):
|
||||||
obj.multitool = False
|
obj.multitool = False
|
||||||
|
|
||||||
self.new_object('geometry', 'new_g', initialize, plot=False)
|
self.new_object('geometry', 'new_geo', initialize, plot=False)
|
||||||
|
|
||||||
|
def new_gerber_object(self):
|
||||||
|
self.report_usage("new_gerber_object()")
|
||||||
|
|
||||||
|
def initialize(grb_obj, self):
|
||||||
|
grb_obj.multitool = False
|
||||||
|
grb_obj.source_file = []
|
||||||
|
grb_obj.multigeo = False
|
||||||
|
grb_obj.follow = False
|
||||||
|
grb_obj.apertures = {}
|
||||||
|
|
||||||
|
self.new_object('gerber', 'new_grb', initialize, plot=False)
|
||||||
|
|
||||||
def on_object_created(self, obj, plot, autoselect):
|
def on_object_created(self, obj, plot, autoselect):
|
||||||
"""
|
"""
|
||||||
|
177
FlatCAMObj.py
177
FlatCAMObj.py
@ -458,8 +458,6 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
"bboxmargin": 0.0,
|
"bboxmargin": 0.0,
|
||||||
"bboxrounded": False,
|
"bboxrounded": False,
|
||||||
"aperture_display": False,
|
"aperture_display": False,
|
||||||
"aperture_scale_factor": 1.0,
|
|
||||||
"aperture_buffer_factor": 0.0,
|
|
||||||
"follow": False
|
"follow": False
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -511,8 +509,6 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
"bboxmargin": self.ui.bbmargin_entry,
|
"bboxmargin": self.ui.bbmargin_entry,
|
||||||
"bboxrounded": self.ui.bbrounded_cb,
|
"bboxrounded": self.ui.bbrounded_cb,
|
||||||
"aperture_display": self.ui.aperture_table_visibility_cb,
|
"aperture_display": self.ui.aperture_table_visibility_cb,
|
||||||
"aperture_scale_factor": self.ui.scale_aperture_entry,
|
|
||||||
"aperture_buffer_factor": self.ui.buffer_aperture_entry,
|
|
||||||
"follow": self.ui.follow_cb
|
"follow": self.ui.follow_cb
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -532,10 +528,6 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
self.ui.generate_noncopper_button.clicked.connect(self.on_generatenoncopper_button_click)
|
self.ui.generate_noncopper_button.clicked.connect(self.on_generatenoncopper_button_click)
|
||||||
self.ui.aperture_table_visibility_cb.stateChanged.connect(self.on_aperture_table_visibility_change)
|
self.ui.aperture_table_visibility_cb.stateChanged.connect(self.on_aperture_table_visibility_change)
|
||||||
self.ui.follow_cb.stateChanged.connect(self.on_follow_cb_click)
|
self.ui.follow_cb.stateChanged.connect(self.on_follow_cb_click)
|
||||||
self.ui.delete_aperture_button.clicked.connect(self.on_delete_aperture_click)
|
|
||||||
self.ui.scale_aperture_button.clicked.connect(self.on_scale_aperture_click)
|
|
||||||
self.ui.buffer_aperture_button.clicked.connect(self.on_buffer_aperture_click)
|
|
||||||
self.ui.new_grb_button.clicked.connect(self.on_new_modified_gerber)
|
|
||||||
|
|
||||||
# Show/Hide Advanced Options
|
# Show/Hide Advanced Options
|
||||||
if self.app.defaults["global_app_level"] == 'b':
|
if self.app.defaults["global_app_level"] == 'b':
|
||||||
@ -1000,34 +992,12 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
def on_aperture_table_visibility_change(self):
|
def on_aperture_table_visibility_change(self):
|
||||||
if self.ui.aperture_table_visibility_cb.isChecked():
|
if self.ui.aperture_table_visibility_cb.isChecked():
|
||||||
self.ui.apertures_table.setVisible(True)
|
self.ui.apertures_table.setVisible(True)
|
||||||
self.ui.delete_aperture_label.setVisible(True)
|
|
||||||
self.ui.delete_aperture_button.setVisible(True)
|
|
||||||
self.ui.scale_aperture_label.setVisible(True)
|
|
||||||
self.ui.scale_aperture_entry.setVisible(True)
|
|
||||||
self.ui.scale_aperture_button.setVisible(True)
|
|
||||||
|
|
||||||
self.ui.buffer_aperture_label.setVisible(True)
|
|
||||||
self.ui.buffer_aperture_entry.setVisible(True)
|
|
||||||
self.ui.buffer_aperture_button.setVisible(True)
|
|
||||||
|
|
||||||
self.ui.new_grb_label.setVisible(True)
|
|
||||||
self.ui.new_grb_button.setVisible(True)
|
|
||||||
self.ui.mark_all_cb.setVisible(True)
|
self.ui.mark_all_cb.setVisible(True)
|
||||||
self.ui.mark_all_cb.setChecked(False)
|
self.ui.mark_all_cb.setChecked(False)
|
||||||
else:
|
else:
|
||||||
self.ui.apertures_table.setVisible(False)
|
self.ui.apertures_table.setVisible(False)
|
||||||
self.ui.delete_aperture_label.setVisible(False)
|
|
||||||
self.ui.delete_aperture_button.setVisible(False)
|
|
||||||
self.ui.scale_aperture_label.setVisible(False)
|
|
||||||
self.ui.scale_aperture_entry.setVisible(False)
|
|
||||||
self.ui.scale_aperture_button.setVisible(False)
|
|
||||||
|
|
||||||
self.ui.buffer_aperture_label.setVisible(False)
|
|
||||||
self.ui.buffer_aperture_entry.setVisible(False)
|
|
||||||
self.ui.buffer_aperture_button.setVisible(False)
|
|
||||||
|
|
||||||
self.ui.new_grb_label.setVisible(False)
|
|
||||||
self.ui.new_grb_button.setVisible(False)
|
|
||||||
self.ui.mark_all_cb.setVisible(False)
|
self.ui.mark_all_cb.setVisible(False)
|
||||||
|
|
||||||
# on hide disable all mark plots
|
# on hide disable all mark plots
|
||||||
@ -1035,153 +1005,6 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
self.ui.apertures_table.cellWidget(row, 5).set_value(False)
|
self.ui.apertures_table.cellWidget(row, 5).set_value(False)
|
||||||
self.clear_plot_apertures()
|
self.clear_plot_apertures()
|
||||||
|
|
||||||
def on_delete_aperture_click(self, signal):
|
|
||||||
apid_to_del = []
|
|
||||||
|
|
||||||
# create a list of apertures to be deleted
|
|
||||||
for sel_item in self.ui.apertures_table.selectedItems():
|
|
||||||
sel_row = sel_item.row()
|
|
||||||
apid_to_del.append(self.ui.apertures_table.item(sel_row, 1).text())
|
|
||||||
|
|
||||||
# actual aperture removal
|
|
||||||
for apid in apid_to_del:
|
|
||||||
if apid in self.apertures:
|
|
||||||
self.apertures.pop(apid)
|
|
||||||
if apid in self.aperture_macros:
|
|
||||||
self.apertures_macros.pop(apid)
|
|
||||||
|
|
||||||
self.on_mark_cb_click_table()
|
|
||||||
|
|
||||||
def on_scale_aperture_click(self, signal):
|
|
||||||
try:
|
|
||||||
factor = self.ui.scale_aperture_entry.get_value()
|
|
||||||
except Exception as e:
|
|
||||||
log.debug("FlatCAMGerber.on_scale_aperture_click() --> %s" % str(e))
|
|
||||||
self.app.inform.emit(_(
|
|
||||||
"[ERROR_NOTCL] The aperture scale factor value is missing or wrong format."
|
|
||||||
))
|
|
||||||
return
|
|
||||||
|
|
||||||
def scale_recursion(geom):
|
|
||||||
if type(geom) == list or type(geom) is MultiPolygon:
|
|
||||||
geoms=list()
|
|
||||||
for local_geom in geom:
|
|
||||||
geoms.append(scale_recursion(local_geom))
|
|
||||||
return geoms
|
|
||||||
else:
|
|
||||||
return affinity.scale(geom, factor, factor, origin='center')
|
|
||||||
|
|
||||||
if not self.ui.apertures_table.selectedItems():
|
|
||||||
self.app.inform.emit(_(
|
|
||||||
"[WARNING_NOTCL] No aperture to scale. Select at least one aperture and try again."
|
|
||||||
))
|
|
||||||
return
|
|
||||||
|
|
||||||
for x in self.ui.apertures_table.selectedItems():
|
|
||||||
try:
|
|
||||||
apid = self.ui.apertures_table.item(x.row(), 1).text()
|
|
||||||
except Exception as e:
|
|
||||||
log.debug("FlatCAMGerber.on_scale_aperture_click() --> %s" % str(e))
|
|
||||||
|
|
||||||
self.apertures[apid]['solid_geometry'] = scale_recursion(self.apertures[apid]['solid_geometry'])
|
|
||||||
|
|
||||||
self.on_mark_cb_click_table()
|
|
||||||
|
|
||||||
def on_buffer_aperture_click(self, signal):
|
|
||||||
try:
|
|
||||||
buff_value = self.ui.buffer_aperture_entry.get_value()
|
|
||||||
except Exception as e:
|
|
||||||
log.debug("FlatCAMGerber.on_buffer_aperture_click() --> %s" % str(e))
|
|
||||||
self.app.inform.emit(_(
|
|
||||||
"[ERROR_NOTCL] The aperture buffer value is missing or wrong format."
|
|
||||||
))
|
|
||||||
return
|
|
||||||
|
|
||||||
def buffer_recursion(geom):
|
|
||||||
if type(geom) == list or type(geom) is MultiPolygon:
|
|
||||||
geoms=list()
|
|
||||||
for local_geom in geom:
|
|
||||||
geoms.append(buffer_recursion(local_geom))
|
|
||||||
return geoms
|
|
||||||
else:
|
|
||||||
return geom.buffer(buff_value, join_style=2)
|
|
||||||
|
|
||||||
if not self.ui.apertures_table.selectedItems():
|
|
||||||
self.app.inform.emit(_(
|
|
||||||
"[WARNING_NOTCL] No aperture to buffer. Select at least one aperture and try again."
|
|
||||||
))
|
|
||||||
return
|
|
||||||
|
|
||||||
for x in self.ui.apertures_table.selectedItems():
|
|
||||||
try:
|
|
||||||
apid = self.ui.apertures_table.item(x.row(), 1).text()
|
|
||||||
except Exception as e:
|
|
||||||
log.debug("FlatCAMGerber.on_buffer_aperture_click() --> %s" % str(e))
|
|
||||||
|
|
||||||
self.apertures[apid]['solid_geometry'] = buffer_recursion(self.apertures[apid]['solid_geometry'])
|
|
||||||
|
|
||||||
self.on_mark_cb_click_table()
|
|
||||||
|
|
||||||
def on_new_modified_gerber(self, signal):
|
|
||||||
|
|
||||||
name = '%s_ap_mod' % str(self.options['name'])
|
|
||||||
apertures = deepcopy(self.apertures)
|
|
||||||
options = self.options
|
|
||||||
|
|
||||||
# geometry storage
|
|
||||||
poly_buff = []
|
|
||||||
|
|
||||||
# How the object should be initialized
|
|
||||||
def obj_init(gerber_obj, app_obj):
|
|
||||||
assert isinstance(gerber_obj, FlatCAMGerber), \
|
|
||||||
"Expected to initialize a FlatCAMGerber but got %s" % type(gerber_obj)
|
|
||||||
|
|
||||||
gerber_obj.source_file = self.source_file
|
|
||||||
gerber_obj.multigeo = False
|
|
||||||
gerber_obj.follow = False
|
|
||||||
|
|
||||||
gerber_obj.apertures = apertures
|
|
||||||
for option in options:
|
|
||||||
# we don't want to overwrite the new name and we don't want to share the 'plot' state
|
|
||||||
# because the new object should ve visible even if the source is not visible
|
|
||||||
if option != 'name' and option != 'plot':
|
|
||||||
gerber_obj.options[option] = options[option]
|
|
||||||
|
|
||||||
# regenerate solid_geometry
|
|
||||||
app_obj.log.debug("Creating new Gerber object. Joining %s polygons.")
|
|
||||||
# for ap in apertures:
|
|
||||||
# for geo in apertures[ap]['solid_geometry']:
|
|
||||||
# poly_buff.append(geo)
|
|
||||||
poly_buff = [geo for ap in apertures for geo in apertures[ap]['solid_geometry']]
|
|
||||||
|
|
||||||
# buffering the poly_buff
|
|
||||||
new_geo = MultiPolygon(poly_buff)
|
|
||||||
new_geo = new_geo.buffer(0.0000001)
|
|
||||||
new_geo = new_geo.buffer(-0.0000001)
|
|
||||||
|
|
||||||
gerber_obj.solid_geometry = new_geo
|
|
||||||
|
|
||||||
app_obj.log.debug("Finished creation of a new Gerber object. Polygons joined.")
|
|
||||||
|
|
||||||
log.debug("on_new_modified_gerber()")
|
|
||||||
|
|
||||||
with self.app.proc_container.new(_("Generating Gerber")) as proc:
|
|
||||||
|
|
||||||
self.app.progress.emit(10)
|
|
||||||
|
|
||||||
### Object creation ###
|
|
||||||
ret = self.app.new_object("gerber", name, obj_init, autoselected=False)
|
|
||||||
if ret == 'fail':
|
|
||||||
self.app.inform.emit(_(
|
|
||||||
'[ERROR_NOTCL] Creation of Gerber failed.'
|
|
||||||
))
|
|
||||||
return
|
|
||||||
|
|
||||||
self.app.progress.emit(100)
|
|
||||||
|
|
||||||
# GUI feedback
|
|
||||||
self.app.inform.emit(_("[success] Created: %s") % name)
|
|
||||||
|
|
||||||
def convert_units(self, units):
|
def convert_units(self, units):
|
||||||
"""
|
"""
|
||||||
Converts the units of the object by scaling dimensions in all geometry
|
Converts the units of the object by scaling dimensions in all geometry
|
||||||
|
@ -14,6 +14,9 @@ CAD program, and create G-Code for Isolation routing.
|
|||||||
- Gerber Editor: added Add Track and Add Region functions
|
- Gerber Editor: added Add Track and Add Region functions
|
||||||
- Gerber Editor: fixed key shortcuts
|
- Gerber Editor: fixed key shortcuts
|
||||||
- fixed setting the Layout combobox in Preferences according to the current layout
|
- fixed setting the Layout combobox in Preferences according to the current layout
|
||||||
|
- 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
|
||||||
|
|
||||||
|
|
||||||
9.04.2019
|
9.04.2019
|
||||||
|
|
||||||
|
@ -1344,7 +1344,6 @@ class FlatCAMGrbEditor(QtCore.QObject):
|
|||||||
|
|
||||||
# create a reference to the source object
|
# create a reference to the source object
|
||||||
self.gerber_obj = orig_grb_obj
|
self.gerber_obj = orig_grb_obj
|
||||||
|
|
||||||
self.gerber_obj_options = orig_grb_obj.options
|
self.gerber_obj_options = orig_grb_obj.options
|
||||||
|
|
||||||
# Hide original geometry
|
# Hide original geometry
|
||||||
|
@ -66,6 +66,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
|
|||||||
self.menufilenewgeo.setToolTip(
|
self.menufilenewgeo.setToolTip(
|
||||||
_("Will create a new, empty Geometry Object.")
|
_("Will create a new, empty Geometry Object.")
|
||||||
)
|
)
|
||||||
|
self.menufilenewgrb = self.menufilenew.addAction(QtGui.QIcon('share/flatcam_icon32.png'), _('Gerber\tB'))
|
||||||
|
self.menufilenewgrb.setToolTip(
|
||||||
|
_("Will create a new, empty Gerber Object.")
|
||||||
|
)
|
||||||
self.menufilenewexc = self.menufilenew.addAction(QtGui.QIcon('share/drill16.png'), _('Excellon\tL'))
|
self.menufilenewexc = self.menufilenew.addAction(QtGui.QIcon('share/drill16.png'), _('Excellon\tL'))
|
||||||
self.menufilenewexc.setToolTip(
|
self.menufilenewexc.setToolTip(
|
||||||
_("Will create a new, empty Excellon Object.")
|
_("Will create a new, empty Excellon Object.")
|
||||||
@ -590,6 +594,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
|
|||||||
|
|
||||||
### Edit Toolbar ###
|
### Edit Toolbar ###
|
||||||
self.newgeo_btn = self.toolbargeo.addAction(QtGui.QIcon('share/new_geo32_bis.png'), _("New Blank Geometry"))
|
self.newgeo_btn = self.toolbargeo.addAction(QtGui.QIcon('share/new_geo32_bis.png'), _("New Blank Geometry"))
|
||||||
|
self.newgrb_btn = self.toolbargeo.addAction(QtGui.QIcon('share/new_geo32.png'), _("New Blank Gerber"))
|
||||||
self.newexc_btn = self.toolbargeo.addAction(QtGui.QIcon('share/new_exc32.png'), _("New Blank Excellon"))
|
self.newexc_btn = self.toolbargeo.addAction(QtGui.QIcon('share/new_exc32.png'), _("New Blank Excellon"))
|
||||||
self.toolbargeo.addSeparator()
|
self.toolbargeo.addSeparator()
|
||||||
self.editgeo_btn = self.toolbargeo.addAction(QtGui.QIcon('share/edit32.png'), _("Editor"))
|
self.editgeo_btn = self.toolbargeo.addAction(QtGui.QIcon('share/edit32.png'), _("Editor"))
|
||||||
@ -2070,6 +2075,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
|
|||||||
select.ui.plot_cb.toggle()
|
select.ui.plot_cb.toggle()
|
||||||
self.app.delete_selection_shape()
|
self.app.delete_selection_shape()
|
||||||
|
|
||||||
|
# New Geometry
|
||||||
|
if key == QtCore.Qt.Key_B:
|
||||||
|
self.app.new_gerber_object()
|
||||||
|
|
||||||
# Copy Object Name
|
# Copy Object Name
|
||||||
if key == QtCore.Qt.Key_E:
|
if key == QtCore.Qt.Key_E:
|
||||||
self.app.object2editor()
|
self.app.object2editor()
|
||||||
@ -2575,7 +2584,6 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
|
|||||||
if key == QtCore.Qt.Key_T or key == 'T':
|
if key == QtCore.Qt.Key_T or key == 'T':
|
||||||
self.app.grb_editor.launched_from_shortcuts = True
|
self.app.grb_editor.launched_from_shortcuts = True
|
||||||
## Current application units in Upper Case
|
## Current application units in Upper Case
|
||||||
self.units = self.general_defaults_group.general_app_group.units_radio.get_value().upper()
|
|
||||||
self.app.grb_editor.select_tool('track')
|
self.app.grb_editor.select_tool('track')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -244,94 +244,8 @@ class GerberObjectUI(ObjectUI):
|
|||||||
_("Mark the aperture instances on canvas."))
|
_("Mark the aperture instances on canvas."))
|
||||||
# self.apertures_table.setColumnHidden(5, True)
|
# self.apertures_table.setColumnHidden(5, True)
|
||||||
|
|
||||||
#### Aperture EDIT ####
|
|
||||||
self.transform_aperture_grid = QtWidgets.QGridLayout()
|
|
||||||
self.custom_box.addLayout(self.transform_aperture_grid)
|
|
||||||
|
|
||||||
# Delete Aperture
|
|
||||||
self.delete_aperture_label = QtWidgets.QLabel(_('Delete aperture:'))
|
|
||||||
self.delete_aperture_label.setToolTip(
|
|
||||||
_("Delete selected apertures.")
|
|
||||||
)
|
|
||||||
self.delete_aperture_label.setFixedWidth(90)
|
|
||||||
self.transform_aperture_grid.addWidget(self.delete_aperture_label, 0, 0)
|
|
||||||
|
|
||||||
self.delete_aperture_button = QtWidgets.QPushButton(_('Delete'))
|
|
||||||
self.delete_aperture_button.setToolTip(
|
|
||||||
_("Delete selected apertures.")
|
|
||||||
)
|
|
||||||
self.delete_aperture_button.setFixedWidth(70)
|
|
||||||
self.transform_aperture_grid.addWidget(self.delete_aperture_button, 0, 2)
|
|
||||||
|
|
||||||
# Scale Aperture Factor
|
|
||||||
self.scale_aperture_label = QtWidgets.QLabel(_('Scale Factor:'))
|
|
||||||
self.scale_aperture_label.setToolTip(
|
|
||||||
_("Change the size of the selected apertures.\n"
|
|
||||||
"Factor by which to multiply\n"
|
|
||||||
"geometric features of this object.")
|
|
||||||
)
|
|
||||||
self.scale_aperture_label.setFixedWidth(90)
|
|
||||||
self.transform_aperture_grid.addWidget(self.scale_aperture_label, 1, 0)
|
|
||||||
|
|
||||||
self.scale_aperture_entry = FloatEntry2()
|
|
||||||
self.transform_aperture_grid.addWidget(self.scale_aperture_entry, 1, 1)
|
|
||||||
|
|
||||||
# Scale Button
|
|
||||||
self.scale_aperture_button = QtWidgets.QPushButton(_('Scale'))
|
|
||||||
self.scale_aperture_button.setToolTip(
|
|
||||||
_("Perform scaling operation on the selected apertures.")
|
|
||||||
)
|
|
||||||
self.scale_aperture_button.setFixedWidth(70)
|
|
||||||
self.transform_aperture_grid.addWidget(self.scale_aperture_button, 1, 2)
|
|
||||||
|
|
||||||
# Buffer Aperture Factor
|
|
||||||
self.buffer_aperture_label = QtWidgets.QLabel(_('Buffer Factor:'))
|
|
||||||
self.buffer_aperture_label.setToolTip(
|
|
||||||
_("Change the size of the selected apertures.\n"
|
|
||||||
"Factor by which to expand/shrink\n"
|
|
||||||
"geometric features of this object.")
|
|
||||||
)
|
|
||||||
self.buffer_aperture_label.setFixedWidth(90)
|
|
||||||
self.transform_aperture_grid.addWidget(self.buffer_aperture_label, 2, 0)
|
|
||||||
|
|
||||||
self.buffer_aperture_entry = FloatEntry2()
|
|
||||||
self.transform_aperture_grid.addWidget(self.buffer_aperture_entry, 2, 1)
|
|
||||||
|
|
||||||
# Buffer Button
|
|
||||||
self.buffer_aperture_button = QtWidgets.QPushButton(_('Buffer'))
|
|
||||||
self.buffer_aperture_button.setToolTip(
|
|
||||||
_("Perform buffer operation on the selected apertures.")
|
|
||||||
)
|
|
||||||
self.buffer_aperture_button.setFixedWidth(70)
|
|
||||||
self.transform_aperture_grid.addWidget(self.buffer_aperture_button, 2, 2)
|
|
||||||
|
|
||||||
new_hlay = QtWidgets.QHBoxLayout()
|
|
||||||
self.custom_box.addLayout(new_hlay)
|
|
||||||
|
|
||||||
self.new_grb_label = QtWidgets.QLabel(_("<b>Generate new Gerber Object:</b>"))
|
|
||||||
self.new_grb_label.setToolTip(
|
|
||||||
_("Will generate a new Gerber object from the changed apertures.")
|
|
||||||
)
|
|
||||||
new_hlay.addWidget(self.new_grb_label)
|
|
||||||
|
|
||||||
new_hlay.addStretch()
|
|
||||||
|
|
||||||
self.new_grb_button = FCButton(_('Go'))
|
|
||||||
self.new_grb_button.setToolTip(
|
|
||||||
_("Will generate a new Gerber object from the changed apertures.\n"
|
|
||||||
"This new object can then be isolated etc."))
|
|
||||||
self.new_grb_button.setFixedWidth(70)
|
|
||||||
new_hlay.addWidget(self.new_grb_button)
|
|
||||||
|
|
||||||
# start with apertures table hidden
|
# start with apertures table hidden
|
||||||
self.apertures_table.setVisible(False)
|
self.apertures_table.setVisible(False)
|
||||||
self.scale_aperture_label.setVisible(False)
|
|
||||||
self.scale_aperture_entry.setVisible(False)
|
|
||||||
self.scale_aperture_button.setVisible(False)
|
|
||||||
|
|
||||||
self.buffer_aperture_label.setVisible(False)
|
|
||||||
self.buffer_aperture_entry.setVisible(False)
|
|
||||||
self.buffer_aperture_button.setVisible(False)
|
|
||||||
|
|
||||||
# Isolation Routing
|
# Isolation Routing
|
||||||
self.isolation_routing_label = QtWidgets.QLabel(_("<b>Isolation Routing:</b>"))
|
self.isolation_routing_label = QtWidgets.QLabel(_("<b>Isolation Routing:</b>"))
|
||||||
|
Loading…
Reference in New Issue
Block a user