- Gerber Editor - started to work on a new editor tool: Eraser
This commit is contained in:
parent
008afb3ca8
commit
511df19793
@ -12,6 +12,7 @@ CAD program, and create G-Code for Isolation routing.
|
|||||||
20.05.2019
|
20.05.2019
|
||||||
|
|
||||||
- more PEP8 changes in Gerber editor
|
- more PEP8 changes in Gerber editor
|
||||||
|
- Gerber Editor - started to work on a new editor tool: Eraser
|
||||||
|
|
||||||
19.05.2019
|
19.05.2019
|
||||||
|
|
||||||
|
@ -1954,6 +1954,163 @@ class FCApertureCopy(FCApertureMove):
|
|||||||
self.draw_app.app.inform.emit(_("[success] Done. Apertures copied."))
|
self.draw_app.app.inform.emit(_("[success] Done. Apertures copied."))
|
||||||
|
|
||||||
|
|
||||||
|
class FCEraser(FCShapeTool):
|
||||||
|
def __init__(self, draw_app):
|
||||||
|
DrawTool.__init__(self, draw_app)
|
||||||
|
self.name = 'eraser'
|
||||||
|
|
||||||
|
self.origin = None
|
||||||
|
self.destination = None
|
||||||
|
self.selected_apertures = []
|
||||||
|
|
||||||
|
if self.draw_app.launched_from_shortcuts is True:
|
||||||
|
self.draw_app.launched_from_shortcuts = False
|
||||||
|
self.draw_app.app.inform.emit(_("Select a shape to act as deletion area ..."))
|
||||||
|
else:
|
||||||
|
self.draw_app.app.inform.emit(_("Click to erase ..."))
|
||||||
|
|
||||||
|
self.current_storage = None
|
||||||
|
self.geometry = []
|
||||||
|
|
||||||
|
for index in self.draw_app.apertures_table.selectedIndexes():
|
||||||
|
row = index.row()
|
||||||
|
# on column 1 in tool tables we hold the aperture codes, and we retrieve them as strings
|
||||||
|
aperture_on_row = self.draw_app.apertures_table.item(row, 1).text()
|
||||||
|
self.selected_apertures.append(aperture_on_row)
|
||||||
|
|
||||||
|
# Switch notebook to Selected page
|
||||||
|
self.draw_app.app.ui.notebook.setCurrentWidget(self.draw_app.app.ui.selected_tab)
|
||||||
|
|
||||||
|
self.sel_limit = self.draw_app.app.defaults["gerber_editor_sel_limit"]
|
||||||
|
|
||||||
|
def set_origin(self, origin):
|
||||||
|
self.origin = origin
|
||||||
|
|
||||||
|
def click(self, point):
|
||||||
|
self.draw_app.apertures_table.clearSelection()
|
||||||
|
sel_aperture = set()
|
||||||
|
|
||||||
|
for storage in self.draw_app.storage_dict:
|
||||||
|
try:
|
||||||
|
for geo_el in self.draw_app.storage_dict[storage]['geometry']:
|
||||||
|
if 'solid' in geo_el.geo:
|
||||||
|
geometric_data = geo_el.geo['solid']
|
||||||
|
if Point(point).within(geometric_data):
|
||||||
|
self.draw_app.selected = []
|
||||||
|
self.draw_app.selected.append(geo_el)
|
||||||
|
sel_aperture.add(storage)
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# select the aperture in the Apertures Table that is associated with the selected shape
|
||||||
|
try:
|
||||||
|
self.draw_app.apertures_table.cellPressed.disconnect()
|
||||||
|
except Exception as e:
|
||||||
|
log.debug("FlatCAMGrbEditor.FCEraser.click_release() --> %s" % str(e))
|
||||||
|
|
||||||
|
self.draw_app.apertures_table.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
|
||||||
|
for aper in sel_aperture:
|
||||||
|
for row in range(self.draw_app.apertures_table.rowCount()):
|
||||||
|
if str(aper) == self.draw_app.apertures_table.item(row, 1).text():
|
||||||
|
self.draw_app.apertures_table.selectRow(row)
|
||||||
|
self.draw_app.last_aperture_selected = aper
|
||||||
|
self.draw_app.apertures_table.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||||
|
|
||||||
|
self.draw_app.apertures_table.cellPressed.connect(self.draw_app.on_row_selected)
|
||||||
|
|
||||||
|
if len(self.draw_app.get_selected()) == 0:
|
||||||
|
return "Nothing to move."
|
||||||
|
|
||||||
|
if self.origin is None:
|
||||||
|
self.set_origin(point)
|
||||||
|
self.draw_app.app.inform.emit(_("Click to erase ..."))
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.destination = point
|
||||||
|
self.make()
|
||||||
|
|
||||||
|
# MS: always return to the Select Tool
|
||||||
|
self.draw_app.select_tool("select")
|
||||||
|
return
|
||||||
|
|
||||||
|
# def click_release(self, point):
|
||||||
|
# self.draw_app.apertures_table.clearSelection()
|
||||||
|
# sel_aperture = set()
|
||||||
|
#
|
||||||
|
# for storage in self.draw_app.storage_dict:
|
||||||
|
# try:
|
||||||
|
# for geo_el in self.draw_app.storage_dict[storage]['geometry']:
|
||||||
|
# if 'solid' in geo_el.geo:
|
||||||
|
# geometric_data = geo_el.geo['solid']
|
||||||
|
# if Point(point).within(geometric_data):
|
||||||
|
# self.draw_app.selected = []
|
||||||
|
# self.draw_app.selected.append(geo_el)
|
||||||
|
# sel_aperture.add(storage)
|
||||||
|
# except KeyError:
|
||||||
|
# pass
|
||||||
|
#
|
||||||
|
# # select the aperture in the Apertures Table that is associated with the selected shape
|
||||||
|
# try:
|
||||||
|
# self.draw_app.apertures_table.cellPressed.disconnect()
|
||||||
|
# except Exception as e:
|
||||||
|
# log.debug("FlatCAMGrbEditor.FCEraser.click_release() --> %s" % str(e))
|
||||||
|
#
|
||||||
|
# self.draw_app.apertures_table.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
|
||||||
|
# for aper in sel_aperture:
|
||||||
|
# for row in range(self.draw_app.apertures_table.rowCount()):
|
||||||
|
# if str(aper) == self.draw_app.apertures_table.item(row, 1).text():
|
||||||
|
# self.draw_app.apertures_table.selectRow(row)
|
||||||
|
# self.draw_app.last_aperture_selected = aper
|
||||||
|
# self.draw_app.apertures_table.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||||
|
#
|
||||||
|
# self.draw_app.apertures_table.cellPressed.connect(self.draw_app.on_row_selected)
|
||||||
|
#
|
||||||
|
# return ""
|
||||||
|
|
||||||
|
def make(self):
|
||||||
|
# Create new geometry
|
||||||
|
dx = self.destination[0] - self.origin[0]
|
||||||
|
dy = self.destination[1] - self.origin[1]
|
||||||
|
sel_shapes_to_be_deleted = []
|
||||||
|
|
||||||
|
self.draw_app.plot_all()
|
||||||
|
self.draw_app.app.inform.emit(_("[success] Done. Apertures Move completed."))
|
||||||
|
|
||||||
|
def clean_up(self):
|
||||||
|
self.draw_app.selected = []
|
||||||
|
self.draw_app.apertures_table.clearSelection()
|
||||||
|
self.draw_app.plot_all()
|
||||||
|
|
||||||
|
def utility_geometry(self, data=None):
|
||||||
|
"""
|
||||||
|
Temporary geometry on screen while using this tool.
|
||||||
|
|
||||||
|
:param data:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
geo_list = []
|
||||||
|
|
||||||
|
if self.origin is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if len(self.draw_app.get_selected()) == 0:
|
||||||
|
return None
|
||||||
|
|
||||||
|
dx = data[0] - self.origin[0]
|
||||||
|
dy = data[1] - self.origin[1]
|
||||||
|
|
||||||
|
for geom in self.draw_app.get_selected():
|
||||||
|
new_geo_el = dict()
|
||||||
|
if 'solid' in geom.geo:
|
||||||
|
new_geo_el['solid'] = affinity.translate(geom.geo['solid'], xoff=dx, yoff=dy)
|
||||||
|
if 'follow' in geom.geo:
|
||||||
|
new_geo_el['follow'] = affinity.translate(geom.geo['follow'], xoff=dx, yoff=dy)
|
||||||
|
if 'clear' in geom.geo:
|
||||||
|
new_geo_el['clear'] = affinity.translate(geom.geo['clear'], xoff=dx, yoff=dy)
|
||||||
|
geo_list.append(deepcopy(new_geo_el))
|
||||||
|
return DrawToolUtilityShape(geo_list)
|
||||||
|
|
||||||
|
|
||||||
class FCApertureSelect(DrawTool):
|
class FCApertureSelect(DrawTool):
|
||||||
def __init__(self, grb_editor_app):
|
def __init__(self, grb_editor_app):
|
||||||
DrawTool.__init__(self, grb_editor_app)
|
DrawTool.__init__(self, grb_editor_app)
|
||||||
@ -2468,6 +2625,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
|
|||||||
"constructor": FCBuffer},
|
"constructor": FCBuffer},
|
||||||
"scale": {"button": self.app.ui.aperture_scale_btn,
|
"scale": {"button": self.app.ui.aperture_scale_btn,
|
||||||
"constructor": FCScale},
|
"constructor": FCScale},
|
||||||
|
"eraser": {"button": self.app.ui.aperture_eraser_btn,
|
||||||
|
"constructor": FCEraser},
|
||||||
"copy": {"button": self.app.ui.aperture_copy_btn,
|
"copy": {"button": self.app.ui.aperture_copy_btn,
|
||||||
"constructor": FCApertureCopy},
|
"constructor": FCApertureCopy},
|
||||||
"transform": {"button": self.app.ui.grb_transform_btn,
|
"transform": {"button": self.app.ui.grb_transform_btn,
|
||||||
|
@ -720,6 +720,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
|
|||||||
|
|
||||||
self.aperture_buffer_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/buffer16-2.png'), _('Buffer'))
|
self.aperture_buffer_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/buffer16-2.png'), _('Buffer'))
|
||||||
self.aperture_scale_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/scale32.png'), _('Scale'))
|
self.aperture_scale_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/scale32.png'), _('Scale'))
|
||||||
|
self.aperture_eraser_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/eraser26.png'), _('Eraser'))
|
||||||
|
|
||||||
self.grb_edit_toolbar.addSeparator()
|
self.grb_edit_toolbar.addSeparator()
|
||||||
self.aperture_copy_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/copy32.png'), _("Copy"))
|
self.aperture_copy_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/copy32.png'), _("Copy"))
|
||||||
self.aperture_delete_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/trash32.png'),
|
self.aperture_delete_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/trash32.png'),
|
||||||
@ -1942,6 +1944,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
|
|||||||
|
|
||||||
self.aperture_buffer_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/buffer16-2.png'), _('Buffer'))
|
self.aperture_buffer_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/buffer16-2.png'), _('Buffer'))
|
||||||
self.aperture_scale_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/scale32.png'), _('Scale'))
|
self.aperture_scale_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/scale32.png'), _('Scale'))
|
||||||
|
self.aperture_eraser_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/eraser26.png'), _('Eraser'))
|
||||||
|
|
||||||
self.grb_edit_toolbar.addSeparator()
|
self.grb_edit_toolbar.addSeparator()
|
||||||
self.aperture_copy_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/copy32.png'), _("Copy"))
|
self.aperture_copy_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/copy32.png'), _("Copy"))
|
||||||
self.aperture_delete_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/trash32.png'),
|
self.aperture_delete_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/trash32.png'),
|
||||||
|
BIN
share/eraser26.png
Normal file
BIN
share/eraser26.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
Loading…
Reference in New Issue
Block a user