- Gerber Editor - the vertex number points are now calculated also for a selection of shapes

- Geometry Editor - the vertex number points are now calculated also for a selection of shapes
- Geometry Editor - made sure that the shapes cannot be selected while the simplification is in process because it will mess things
This commit is contained in:
Marius Stanciu
2020-12-14 20:08:33 +02:00
committed by Marius
parent 21d1569c03
commit 2d6b78d28c
3 changed files with 64 additions and 12 deletions

View File

@@ -13,6 +13,9 @@ CHANGELOG for FlatCAM beta
- for all centering functionality, now if the moved object is of 'geometry' kind it will have the source_file attribute updated with DXF code - for all centering functionality, now if the moved object is of 'geometry' kind it will have the source_file attribute updated with DXF code
- modified the centering in origin functionality to include a selection of choices in a dialog - modified the centering in origin functionality to include a selection of choices in a dialog
- fixed Locate in Object functionality to work in the situations where there are negative bounds values - fixed Locate in Object functionality to work in the situations where there are negative bounds values
- Gerber Editor - the vertex number points are now calculated also for a selection of shapes
- Geometry Editor - the vertex number points are now calculated also for a selection of shapes
- Geometry Editor - made sure that the shapes cannot be selected while the simplification is in process because it will mess things
13.12.2020 13.12.2020

View File

@@ -2593,6 +2593,10 @@ class FCSelect(DrawTool):
# list where we store the overlapped shapes under our mouse left click position # list where we store the overlapped shapes under our mouse left click position
over_shape_list = [] over_shape_list = []
if self.draw_app.interdict_selection is True:
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' % _("Selection not allowed. Wait ..."))
return
# pos[0] and pos[1] are the mouse click coordinates (x, y) # pos[0] and pos[1] are the mouse click coordinates (x, y)
for ____ in self.storage.get_objects(): for ____ in self.storage.get_objects():
# first method of click selection -> inconvenient # first method of click selection -> inconvenient
@@ -3352,6 +3356,10 @@ class AppGeoEditor(QtCore.QObject):
self.app = app self.app = app
self.canvas = app.plotcanvas self.canvas = app.plotcanvas
self.decimals = app.decimals self.decimals = app.decimals
self.units = self.app.defaults['units']
# when True the Editor can't do selection due of an ongoing process
self.interdict_selection = False
self.geo_edit_widget = QtWidgets.QWidget() self.geo_edit_widget = QtWidgets.QWidget()
# ## Box for custom widgets # ## Box for custom widgets
@@ -3526,7 +3534,6 @@ class AppGeoEditor(QtCore.QObject):
self.geo_tol_entry.set_precision(self.decimals) self.geo_tol_entry.set_precision(self.decimals)
self.geo_tol_entry.setSingleStep(10 ** -self.decimals) self.geo_tol_entry.setSingleStep(10 ** -self.decimals)
self.geo_tol_entry.set_range(0.0000, 10000.0000) self.geo_tol_entry.set_range(0.0000, 10000.0000)
self.geo_tol_entry.set_value(10 ** -self.decimals)
grid0.addWidget(simplification_tol_lbl, 32, 0) grid0.addWidget(simplification_tol_lbl, 32, 0)
grid0.addWidget(self.geo_tol_entry, 32, 1, 1, 2) grid0.addWidget(self.geo_tol_entry, 32, 1, 1, 2)
@@ -3820,7 +3827,7 @@ class AppGeoEditor(QtCore.QObject):
self.is_empty_entry.set_value('None') self.is_empty_entry.set_value('None')
self.is_valid_entry.set_value('None') self.is_valid_entry.set_value('None')
self.geo_vertex_entry.set_value(0.0) self.geo_vertex_entry.set_value(0.0)
self.geo_tol_entry.set_value(10 ** -self.decimals) self.geo_tol_entry.set_value(0.01 if self.units == 'MM' else 0.0004)
self.geo_zoom.set_value(False) self.geo_zoom.set_value(False)
def build_ui(self): def build_ui(self):
@@ -3874,6 +3881,7 @@ class AppGeoEditor(QtCore.QObject):
def update_ui(self): def update_ui(self):
self.selected = [] self.selected = []
last_obj_shape = None last_obj_shape = None
last_id = None
selected_tree_items = self.tw.selectedItems() selected_tree_items = self.tw.selectedItems()
for sel in selected_tree_items: for sel in selected_tree_items:
@@ -3882,6 +3890,7 @@ class AppGeoEditor(QtCore.QObject):
if id(obj_shape) == int(sel.text(0)): if id(obj_shape) == int(sel.text(0)):
self.selected.append(obj_shape) self.selected.append(obj_shape)
last_obj_shape = obj_shape last_obj_shape = obj_shape
last_id = sel.text(0)
except ValueError: except ValueError:
pass pass
@@ -3969,6 +3978,8 @@ class AppGeoEditor(QtCore.QObject):
self.geo_coords_entry.setText(str(coords)) self.geo_coords_entry.setText(str(coords))
self.geo_vertex_entry.set_value(vertex_nr) self.geo_vertex_entry.set_value(vertex_nr)
self.app.inform.emit('%s: %s' % (_("Last selected shape ID"), str(last_id)))
def on_tree_geo_click(self): def on_tree_geo_click(self):
try: try:
@@ -3988,6 +3999,7 @@ class AppGeoEditor(QtCore.QObject):
def task_job(): def task_job():
with self.app.proc_container.new('%s...' % _("Simplify")): with self.app.proc_container.new('%s...' % _("Simplify")):
self.interdict_selection = True
for sel in selected_tree_items: for sel in selected_tree_items:
for obj_shape in self.storage.get_objects(): for obj_shape in self.storage.get_objects():
try: try:
@@ -4004,7 +4016,7 @@ class AppGeoEditor(QtCore.QObject):
self.add_shape(DrawToolShape(geo), build_ui=False) self.add_shape(DrawToolShape(geo), build_ui=False)
self.plot_all() self.plot_all()
self.interdict_selection = False
self.build_ui_sig.emit() self.build_ui_sig.emit()
self.app.worker_task.emit({'fcn': task_job, 'params': []}) self.app.worker_task.emit({'fcn': task_job, 'params': []})
@@ -4784,7 +4796,9 @@ class AppGeoEditor(QtCore.QObject):
self.selected = [] self.selected = []
self.selected = sel_objects_list self.selected = sel_objects_list
# if selection is done on canvas update the Tree in Selected Tab with the selection # #############################################################################################################
# ######### if selection is done on canvas update the Tree in Selected Tab with the selection ###############
# #############################################################################################################
try: try:
self.tw.itemClicked.disconnect(self.on_tree_geo_click) self.tw.itemClicked.disconnect(self.on_tree_geo_click)
except (AttributeError, TypeError): except (AttributeError, TypeError):
@@ -4803,6 +4817,23 @@ class AppGeoEditor(QtCore.QObject):
iterator += 1 iterator += 1
# #############################################################################################################
# ################### calculate vertex numbers for all selected shapes ######################################
# #############################################################################################################
vertex_nr = 0
for sha in sel_objects_list:
sha_geo_solid = sha.geo
if sha_geo_solid.geom_type == 'Polygon':
sha_geo_solid_coords = list(sha_geo_solid.exterior.coords)
elif sha_geo_solid.geom_type in ['LinearRing', 'LineString']:
sha_geo_solid_coords = list(sha_geo_solid.coords)
else:
sha_geo_solid_coords = []
vertex_nr += len(sha_geo_solid_coords)
self.geo_vertex_entry.set_value(vertex_nr)
self.tw.itemClicked.connect(self.on_tree_geo_click) self.tw.itemClicked.connect(self.on_tree_geo_click)
self.plot_all() self.plot_all()
@@ -5154,6 +5185,8 @@ class AppGeoEditor(QtCore.QObject):
self.set_ui() self.set_ui()
self.units = self.app.defaults['units']
# Hide original geometry # Hide original geometry
self.fcgeometry = fcgeometry self.fcgeometry = fcgeometry
fcgeometry.visible = False fcgeometry.visible = False

View File

@@ -2953,7 +2953,7 @@ class AppGerberEditor(QtCore.QObject):
self.complete = True self.complete = True
self.set_ui() self.set_editor_ui()
self.app.log.debug("Initialization of the Gerber Editor is finished ...") self.app.log.debug("Initialization of the Gerber Editor is finished ...")
def make_callback(self, the_tool): def make_callback(self, the_tool):
@@ -2990,7 +2990,7 @@ class AppGerberEditor(QtCore.QObject):
self.tool_shape.pool = pool self.tool_shape.pool = pool
self.pool = pool self.pool = pool
def set_ui(self): def set_editor_ui(self):
# updated units # updated units
self.units = self.app.defaults['units'].upper() self.units = self.app.defaults['units'].upper()
self.decimals = self.app.decimals self.decimals = self.app.decimals
@@ -3567,7 +3567,6 @@ class AppGerberEditor(QtCore.QObject):
current_apid = self.last_aperture_selected current_apid = self.last_aperture_selected
new_geo['apid'] = deepcopy(current_apid) new_geo['apid'] = deepcopy(current_apid)
print(current_apid)
if 'solid' in obj_shape.geo: if 'solid' in obj_shape.geo:
new_geo['geo']['solid'] = obj_shape.geo['solid'].simplify(tolerance=tol) new_geo['geo']['solid'] = obj_shape.geo['solid'].simplify(tolerance=tol)
@@ -3657,6 +3656,7 @@ class AppGerberEditor(QtCore.QObject):
self.ui.is_valid_entry.setText(str(validity)) self.ui.is_valid_entry.setText(str(validity))
self.ui.geo_coords_entry.setText(str(coords)) self.ui.geo_coords_entry.setText(str(coords))
self.ui.geo_vertex_entry.set_value(vertex_nr) self.ui.geo_vertex_entry.set_value(vertex_nr)
def on_name_activate(self): def on_name_activate(self):
@@ -4035,7 +4035,7 @@ class AppGerberEditor(QtCore.QObject):
# self.grb_plot_promises.append(ap_code) # self.grb_plot_promises.append(ap_code)
# self.app.worker_task.emit({'fcn': job_thread, 'params': [ap_code]}) # self.app.worker_task.emit({'fcn': job_thread, 'params': [ap_code]})
# #
# self.set_ui() # self.set_editor_ui()
# #
# # do the delayed plot only if there is something to plot (the gerber is not empty) # # do the delayed plot only if there is something to plot (the gerber is not empty)
# try: # try:
@@ -4196,7 +4196,7 @@ class AppGerberEditor(QtCore.QObject):
def on_multiprocessing_finished(self): def on_multiprocessing_finished(self):
self.app.proc_container.update_view_text(' %s' % _("Setting up the UI")) self.app.proc_container.update_view_text(' %s' % _("Setting up the UI"))
self.app.inform.emit('[success] %s.' % _("Adding geometry finished. Preparing the GUI")) self.app.inform.emit('[success] %s.' % _("Adding geometry finished. Preparing the GUI"))
self.set_ui() self.set_editor_ui()
self.build_ui(first_run=True) self.build_ui(first_run=True)
self.plot_all() self.plot_all()
@@ -4316,9 +4316,6 @@ class AppGerberEditor(QtCore.QObject):
new_poly = new_poly.buffer(0.00000001) new_poly = new_poly.buffer(0.00000001)
new_poly = new_poly.buffer(-0.00000001) new_poly = new_poly.buffer(-0.00000001)
# for ad in grb_obj.apertures:
# print(ad, grb_obj.apertures[ad])
try: try:
__ = iter(new_poly) __ = iter(new_poly)
except TypeError: except TypeError:
@@ -4707,6 +4704,25 @@ class AppGerberEditor(QtCore.QObject):
self.last_aperture_selected = aper self.last_aperture_selected = aper
self.ui.apertures_table.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) self.ui.apertures_table.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
# #############################################################################################################
# ######################### calculate vertex numbers for all selected shapes ##################################
# #############################################################################################################
vertex_nr = 0
for sha in self.selected:
sha_geo = sha.geo
if 'solid' in sha_geo:
sha_geo_solid = sha_geo['solid']
if sha_geo_solid.geom_type == 'Polygon':
sha_geo_solid_coords = list(sha_geo_solid.exterior.coords)
elif sha_geo_solid.geom_type in ['LinearRing', 'LineString']:
sha_geo_solid_coords = list(sha_geo_solid.coords)
else:
sha_geo_solid_coords = []
vertex_nr += len(sha_geo_solid_coords)
self.ui.geo_vertex_entry.set_value(vertex_nr)
self.ui.apertures_table.cellPressed.connect(self.on_row_selected) self.ui.apertures_table.cellPressed.connect(self.on_row_selected)
self.plot_all() self.plot_all()