- working in Excellon Editor to Tool Resize to consider the slots, too

This commit is contained in:
Marius Stanciu
2019-08-16 01:50:30 +03:00
parent c886e3300c
commit 3a5622ffc6
2 changed files with 55 additions and 17 deletions

View File

@@ -9,6 +9,10 @@ CAD program, and create G-Code for Isolation routing.
================================================= =================================================
16.08.2019
- working in Excellon Editor to Tool Resize to consider the slots, too
15.08.2019 15.08.2019
- added Edit -> Preferences GUI and storage for the Excellon Editor Add Slots - added Edit -> Preferences GUI and storage for the Excellon Editor Add Slots

View File

@@ -852,6 +852,11 @@ class FCDrillResize(FCShapeTool):
def make(self): def make(self):
self.draw_app.is_modified = True self.draw_app.is_modified = True
try:
self.draw_app.tools_table_exc.itemChanged.disconnect()
except TypeError:
pass
try: try:
new_dia = self.draw_app.resdrill_entry.get_value() new_dia = self.draw_app.resdrill_entry.get_value()
except: except:
@@ -909,8 +914,7 @@ class FCDrillResize(FCShapeTool):
except KeyError: except KeyError:
# if the exception happen here then we are not dealing with slots neither # if the exception happen here then we are not dealing with slots neither
# therefore something else is not OK so we return # therefore something else is not OK so we return
self.draw_app.app.inform.emit( self.draw_app.app.inform.emit(_("[ERROR_NOTCL] Cancelled."))
_("[ERROR_NOTCL] Cancelled."))
return return
sel_shapes_to_be_deleted.append(select_shape) sel_shapes_to_be_deleted.append(select_shape)
@@ -928,16 +932,31 @@ class FCDrillResize(FCShapeTool):
self.draw_app.points_edit[new_dia].append((0, 0)) self.draw_app.points_edit[new_dia].append((0, 0))
self.geometry = [] self.geometry = []
# if following the resize of the drills there will be no more drills for the selected tool then for dia_key in list(self.draw_app.storage_dict.keys()):
# delete that tool # if following the resize of the drills there will be no more drills for some of the tools then
if not self.draw_app.points_edit[sel_dia]: # delete those tools
self.draw_app.on_tool_delete(sel_dia) try:
if not self.draw_app.points_edit[dia_key]:
self.draw_app.on_tool_delete(dia_key)
except KeyError:
# if the exception happen here then we are not dealing with drills but with slots
# so we try for them
try:
if not self.draw_app.slot_points_edit[dia_key]:
self.draw_app.on_tool_delete(dia_key)
except KeyError:
# if the exception happen here then we are not dealing with slots neither
# therefore something else is not OK so we return
self.draw_app.app.inform.emit(_("[ERROR_NOTCL] Cancelled."))
return
for shp in sel_shapes_to_be_deleted: for shp in sel_shapes_to_be_deleted:
self.draw_app.selected.remove(shp) self.draw_app.selected.remove(shp)
self.draw_app.build_ui() self.draw_app.build_ui()
self.draw_app.replot() self.draw_app.replot()
# we reactivate the signals after the after the tool editing
self.draw_app.tools_table_exc.itemChanged.connect(self.draw_app.on_tool_edit)
self.draw_app.app.inform.emit(_("[success] Done. Drill/Slot Resize completed.")) self.draw_app.app.inform.emit(_("[success] Done. Drill/Slot Resize completed."))
else: else:
@@ -2406,20 +2425,35 @@ class FlatCAMExcEditor(QtCore.QObject):
factor = current_table_dia_edited / dia_changed factor = current_table_dia_edited / dia_changed
geometry = [] geometry = []
scaled_geo = []
for shape_exc in self.storage_dict[dia_changed].get_objects(): for shape_exc in self.storage_dict[dia_changed].get_objects():
scaled_geo = MultiLineString( geo_list = []
[affinity.scale(subgeo, xfact=factor, yfact=factor, origin='center') for subgeo in shape_exc.geo] if isinstance(shape_exc.geo, MultiLineString) or isinstance(shape_exc.geo, MultiPolygon):
) for subgeo in shape_exc.geo:
geo_list.append(affinity.scale(subgeo, xfact=factor, yfact=factor, origin='center'))
scaled_geo = MultiLineString(geo_list)
elif isinstance(shape_exc.geo, Polygon):
scaled_geo = geo_list.append(affinity.scale(shape_exc.geo,
xfact=factor, yfact=factor, origin='center'))
if isinstance(shape_exc.geo, MultiLineString):
# add bogus drill points (for total count of drills) but only if the shape is a MultiLineString
# because the drills are MultiLineString
for k, v in self.olddia_newdia.items():
if v == current_table_dia_edited:
self.points_edit[k].append((0, 0))
break
else:
# the shape is a Polygon or MultiPolygon therefore we have to increase the slot numbers
for k, v in self.olddia_newdia.items():
if v == current_table_dia_edited:
self.slot_points_edit[k].append((0, 0))
break
geometry.append(DrawToolShape(scaled_geo)) geometry.append(DrawToolShape(scaled_geo))
# add bogus drill points (for total count of drills) # search for the old dia that correspond to the new dia and add the drills/slots in it's storage
for k, v in self.olddia_newdia.items(): # everything will be sorted out later, when the edited Excellon is updated
if v == current_table_dia_edited:
self.points_edit[k].append((0, 0))
break
# search for the old dia that correspond to the new dia and add the drills in it's storage
# everything will be sort out later, when the edited Excellon is updated
for k, v in self.olddia_newdia.items(): for k, v in self.olddia_newdia.items():
if v == current_table_dia_edited: if v == current_table_dia_edited:
self.add_exc_shape(geometry, self.storage_dict[k]) self.add_exc_shape(geometry, self.storage_dict[k])