- in Gerber Editor: if the aperture size is 0 then an aperture code 0 is added (if it does not exist yet)
- in Gerber Editor: when the Eraser tool is used, after it is applied if some geometries elements are empty, they are now removed
This commit is contained in:
@@ -7,6 +7,11 @@ CHANGELOG for FlatCAM beta
|
|||||||
|
|
||||||
=================================================
|
=================================================
|
||||||
|
|
||||||
|
22.02.2022
|
||||||
|
|
||||||
|
- in Gerber Editor: if the aperture size is 0 then an aperture code 0 is added (if it does not exist yet)
|
||||||
|
- in Gerber Editor: when the Eraser tool is used, after it is applied if some geometries elements are empty, they are now removed
|
||||||
|
|
||||||
20.02.2022
|
20.02.2022
|
||||||
|
|
||||||
- fixed a minor error in the Gerber Editor which created a graphic glitch on shape selection
|
- fixed a minor error in the Gerber Editor which created a graphic glitch on shape selection
|
||||||
|
|||||||
@@ -2485,17 +2485,25 @@ class EraserEditorGrb(ShapeToolEditorGrb):
|
|||||||
eraser_sel_shapes = unary_union(eraser_sel_shapes)
|
eraser_sel_shapes = unary_union(eraser_sel_shapes)
|
||||||
|
|
||||||
for storage in self.draw_app.storage_dict:
|
for storage in self.draw_app.storage_dict:
|
||||||
|
to_delete = []
|
||||||
try:
|
try:
|
||||||
for geo_el in self.draw_app.storage_dict[storage]['geometry']:
|
for idx, geo_el in enumerate(self.draw_app.storage_dict[storage]['geometry']):
|
||||||
if 'solid' in geo_el.geo:
|
if 'solid' in geo_el.geo:
|
||||||
geometric_data = geo_el.geo['solid']
|
geometric_data = geo_el.geo['solid']
|
||||||
if eraser_sel_shapes.within(geometric_data) or eraser_sel_shapes.intersects(geometric_data):
|
if eraser_sel_shapes.within(geometric_data) or eraser_sel_shapes.intersects(geometric_data):
|
||||||
geos = geometric_data.difference(eraser_sel_shapes)
|
geos = geometric_data.difference(eraser_sel_shapes)
|
||||||
|
if geos is None or geos.is_empty:
|
||||||
|
to_delete.append(idx)
|
||||||
|
continue
|
||||||
geos = geos.buffer(0)
|
geos = geos.buffer(0)
|
||||||
geo_el.geo['solid'] = deepcopy(geos)
|
geo_el.geo['solid'] = deepcopy(geos)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# delete empty geometries
|
||||||
|
for td in to_delete[::-1]:
|
||||||
|
self.draw_app.storage_dict[storage]['geometry'].pop(td)
|
||||||
|
|
||||||
self.draw_app.delete_utility_geometry()
|
self.draw_app.delete_utility_geometry()
|
||||||
self.draw_app.plot_all()
|
self.draw_app.plot_all()
|
||||||
self.draw_app.app.inform.emit('[success] %s' % _("Done."))
|
self.draw_app.app.inform.emit('[success] %s' % _("Done."))
|
||||||
@@ -3430,11 +3438,11 @@ class AppGerberEditor(QtCore.QObject):
|
|||||||
|
|
||||||
self.ui.aptype_cb.currentIndexChanged.connect(self.on_aptype_changed)
|
self.ui.aptype_cb.currentIndexChanged.connect(self.on_aptype_changed)
|
||||||
|
|
||||||
self.ui.addaperture_btn.clicked.connect(self.on_aperture_add)
|
self.ui.addaperture_btn.clicked.connect(lambda: self.on_aperture_add())
|
||||||
self.ui.apsize_entry.returnPressed.connect(self.on_aperture_add)
|
self.ui.apsize_entry.returnPressed.connect(lambda: self.on_aperture_add())
|
||||||
self.ui.apdim_entry.returnPressed.connect(self.on_aperture_add)
|
self.ui.apdim_entry.returnPressed.connect(lambda: self.on_aperture_add())
|
||||||
|
|
||||||
self.ui.delaperture_btn.clicked.connect(self.on_aperture_delete)
|
self.ui.delaperture_btn.clicked.connect(lambda: self.on_aperture_delete())
|
||||||
self.ui.apertures_table.cellPressed.connect(self.on_row_selected)
|
self.ui.apertures_table.cellPressed.connect(self.on_row_selected)
|
||||||
self.ui.apertures_table.selectionModel().selectionChanged.connect(self.on_table_selection)
|
self.ui.apertures_table.selectionModel().selectionChanged.connect(self.on_table_selection)
|
||||||
|
|
||||||
@@ -3771,7 +3779,9 @@ class AppGerberEditor(QtCore.QObject):
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.ui.apsize_entry.set_value(size_val)
|
self.ui.apsize_entry.set_value(size_val)
|
||||||
|
# self.oldapcode_newapcode dict keeps the evidence on current aperture codes as keys and gets
|
||||||
|
# updated on values each time a aperture code is edited or added
|
||||||
|
self.oldapcode_newapcode[ap_code] = ap_code
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.app.log.error("AppGerberEditor.on_aperture_add() --> "
|
self.app.log.error("AppGerberEditor.on_aperture_add() --> "
|
||||||
"the R or O aperture dims has to be in a "
|
"the R or O aperture dims has to be in a "
|
||||||
@@ -3793,15 +3803,25 @@ class AppGerberEditor(QtCore.QObject):
|
|||||||
_("Aperture size value is missing or wrong format. Add it and retry."))
|
_("Aperture size value is missing or wrong format. Add it and retry."))
|
||||||
return
|
return
|
||||||
|
|
||||||
self.storage_dict[ap_code] = {
|
if size_val == 0.0:
|
||||||
'type': type_val,
|
if 0 not in self.tid2apcode:
|
||||||
'size': size_val,
|
self.storage_dict[0] = {
|
||||||
'geometry': []
|
'type': 'REG',
|
||||||
}
|
'size': 0.0,
|
||||||
|
'geometry': []
|
||||||
|
}
|
||||||
|
self.oldapcode_newapcode[0] = 0
|
||||||
|
|
||||||
# self.oldapcode_newapcode dict keeps the evidence on current aperture codes as keys and gets updated on
|
else:
|
||||||
# values each time a aperture code is edited or added
|
self.storage_dict[ap_code] = {
|
||||||
self.oldapcode_newapcode[ap_code] = ap_code
|
'type': type_val,
|
||||||
|
'size': size_val,
|
||||||
|
'geometry': []
|
||||||
|
}
|
||||||
|
|
||||||
|
# self.oldapcode_newapcode dict keeps the evidence on current aperture codes as keys and gets
|
||||||
|
# updated on values each time a aperture code is edited or added
|
||||||
|
self.oldapcode_newapcode[ap_code] = ap_code
|
||||||
else:
|
else:
|
||||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Aperture already in the aperture table."))
|
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Aperture already in the aperture table."))
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user