diff --git a/CHANGELOG.md b/CHANGELOG.md index 1231e6a3..6b4e2267 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ CHANGELOG for FlatCAM beta - in Markers Plugin made sure that whenever new markers are added, the previous ones are first cleared so there is no accumulative action - in Markers Plugin added utility geometry for the manual mode +- refactored the is_legacy object to use_3d_engine +- made sure that there is no longer a double action when toggling the object visibility ('plot' attribute) 30.10.2021 diff --git a/appCommon/Common.py b/appCommon/Common.py index f2d7fb33..2bb5134e 100644 --- a/appCommon/Common.py +++ b/appCommon/Common.py @@ -241,7 +241,7 @@ class ExclusionAreas(QtCore.QObject): self.app.log.debug("+ Adding Exclusion Areas") # Storage for shapes, storage that can be used by FlatCAm tools for utility geometry # VisPy visuals - if self.app.is_legacy is False: + if self.app.use_3d_engine: try: self.exclusion_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) except AttributeError: @@ -310,7 +310,7 @@ class ExclusionAreas(QtCore.QObject): self.solid_geometry = solid_geo self.obj_type = obj_type - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -333,7 +333,7 @@ class ExclusionAreas(QtCore.QObject): :return: None :rtype: """ - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos # event_is_dragging = event.is_dragging right_button = 2 @@ -475,7 +475,7 @@ class ExclusionAreas(QtCore.QObject): # AppTool.delete_tool_selection_shape(self, shapes_storage=self.exclusion_shapes) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) # self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) @@ -529,7 +529,7 @@ class ExclusionAreas(QtCore.QObject): :return: None :rtype: """ - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) else: @@ -564,7 +564,7 @@ class ExclusionAreas(QtCore.QObject): """ shape_type = self.shape_type_button.get_value() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging # right_button = 2 @@ -697,7 +697,7 @@ class ExclusionAreas(QtCore.QObject): if isinstance(geo_el['shape'], Polygon): self.exclusion_shapes.add( geo_el['shape'], color=color, face_color=color_t, update=True, layer=0, tolerance=None) - if self.app.is_legacy is True: + if self.app.use_3d_engine: self.exclusion_shapes.redraw() # if there are still some exclusion areas in the storage diff --git a/appDatabase.py b/appDatabase.py index 67c1d4c3..caef424b 100644 --- a/appDatabase.py +++ b/appDatabase.py @@ -1370,8 +1370,6 @@ class ToolsDB2(QtWidgets.QWidget): tool_id: { 'name': 'new_tool' 'tooldia': self.app.defaults["tools_mill_tooldia"] - 'offset': 'Path' - 'offset_value': 0.0 'data': dict() } } diff --git a/appEditors/AppExcEditor.py b/appEditors/AppExcEditor.py index f23093ed..93e8b821 100644 --- a/appEditors/AppExcEditor.py +++ b/appEditors/AppExcEditor.py @@ -1799,7 +1799,7 @@ class AppExcEditor(QtCore.QObject): self.tolerance = float(self.app.defaults["global_tolerance"]) / 20 # VisPy Visuals - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.shapes = self.canvas.new_shape_collection(layers=1) if self.canvas.big_cursor is True: self.tool_shape = self.canvas.new_shape_collection(layers=1, line_width=2) @@ -2643,7 +2643,7 @@ class AppExcEditor(QtCore.QObject): # make sure that the shortcuts key and mouse events will no longer be linked to the methods from FlatCAMApp # but those from AppGeoEditor - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -2680,7 +2680,7 @@ class AppExcEditor(QtCore.QObject): self.app.on_mouse_double_click_over_plot) self.app.collection.view.clicked.connect(self.app.collection.on_mouse_down) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_press', self.on_canvas_click) self.canvas.graph_event_disconnect('mouse_move', self.on_canvas_move) self.canvas.graph_event_disconnect('mouse_release', self.on_exc_click_release) @@ -3242,7 +3242,7 @@ class AppExcEditor(QtCore.QObject): :param event: Event object dispatched by VisPy :return: None """ - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos # event_is_dragging = event.is_dragging # right_button = 2 @@ -3311,7 +3311,7 @@ class AppExcEditor(QtCore.QObject): :return: None """ - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos # event_is_dragging = event.is_dragging right_button = 2 @@ -3396,7 +3396,7 @@ class AppExcEditor(QtCore.QObject): if not self.app.plotcanvas.native.hasFocus(): self.app.plotcanvas.native.setFocus() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging right_button = 2 diff --git a/appEditors/AppGeoEditor.py b/appEditors/AppGeoEditor.py index a7fda20f..8537b4a4 100644 --- a/appEditors/AppGeoEditor.py +++ b/appEditors/AppGeoEditor.py @@ -3658,7 +3658,7 @@ class AppGeoEditor(QtCore.QObject): # VisPy visuals self.fcgeometry = None - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.shapes = self.app.plotcanvas.new_shape_collection(layers=1) self.tool_shape = self.app.plotcanvas.new_shape_collection(layers=1) else: @@ -4027,7 +4027,7 @@ class AppGeoEditor(QtCore.QObject): ymin = xmin ymax = xmax - if self.app.is_legacy is False: + if self.app.use_3d_engine: rect = Rect(xmin, ymin, xmax, ymax) rect.left, rect.right = xmin, xmax rect.bottom, rect.top = ymin, ymax @@ -4348,7 +4348,7 @@ class AppGeoEditor(QtCore.QObject): self.mm = self.canvas.graph_event_connect('mouse_move', self.on_canvas_move) self.mr = self.canvas.graph_event_connect('mouse_release', self.on_canvas_click_release) - if self.app.is_legacy is False: + if self.app.use_3d_engine: # make sure that the shortcuts key and mouse events will no longer be linked to the methods from FlatCAMApp # but those from AppGeoEditor self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) @@ -4406,7 +4406,7 @@ class AppGeoEditor(QtCore.QObject): self.app.on_mouse_double_click_over_plot) # self.app.collection.view.clicked.connect(self.app.collection.on_mouse_down) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_press', self.on_canvas_click) self.canvas.graph_event_disconnect('mouse_move', self.on_canvas_move) self.canvas.graph_event_disconnect('mouse_release', self.on_canvas_click_release) @@ -4673,7 +4673,7 @@ class AppGeoEditor(QtCore.QObject): :param event: Event object dispatched by Matplotlib :return: None """ - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos else: event_pos = (event.xdata, event.ydata) @@ -4727,7 +4727,7 @@ class AppGeoEditor(QtCore.QObject): :param event: Event object dispatched by VisPy SceneCavas :return: None """ - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging right_button = 2 @@ -4823,7 +4823,7 @@ class AppGeoEditor(QtCore.QObject): self.draw_utility_geometry(geo=geo) def on_canvas_click_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos # event_is_dragging = event.is_dragging right_button = 2 diff --git a/appEditors/AppGerberEditor.py b/appEditors/AppGerberEditor.py index 384c630b..0cc6632a 100644 --- a/appEditors/AppGerberEditor.py +++ b/appEditors/AppGerberEditor.py @@ -2825,7 +2825,7 @@ class ImportEditorGrb(QtCore.QObject, DrawTool): self.mr = self.canvas.graph_event_connect('mouse_release', self.on_mouse_click_release) # disconnect old - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_press', self.draw_app.on_canvas_click) self.canvas.graph_event_disconnect('mouse_move', self.draw_app.on_canvas_move) self.canvas.graph_event_disconnect('mouse_release', self.draw_app.on_canvas_click_release) @@ -2839,7 +2839,7 @@ class ImportEditorGrb(QtCore.QObject, DrawTool): self.draw_app.mm = self.canvas.graph_event_connect('mouse_move', self.draw_app.on_canvas_move) self.draw_app.mr = self.canvas.graph_event_connect('mouse_release', self.draw_app.on_canvas_click_release) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_press', self.on_mouse_click) self.canvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.canvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) @@ -2849,7 +2849,7 @@ class ImportEditorGrb(QtCore.QObject, DrawTool): self.canvas.graph_event_disconnect(self.mr) def on_mouse_click(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos else: event_pos = (event.xdata, event.ydata) @@ -2869,7 +2869,7 @@ class ImportEditorGrb(QtCore.QObject, DrawTool): if not self.app.plotcanvas.native.hasFocus(): self.app.plotcanvas.native.setFocus() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos self.event_is_dragging = event.is_dragging right_button = 2 @@ -2942,9 +2942,9 @@ class ImportEditorGrb(QtCore.QObject, DrawTool): def on_mouse_click_release(self, event): left_button = 1 - right_button = 2 if self.app.is_legacy is False else 3 + right_button = 2 if self.app.use_3d_engine else 3 - event_pos = event.pos if self.app.is_legacy is False else (event.xdata, event.ydata) + event_pos = event.pos if self.app.use_3d_engine else (event.xdata, event.ydata) try: x = float(event_pos[0]) y = float(event_pos[1]) @@ -3304,7 +3304,7 @@ class AppGerberEditor(QtCore.QObject): self.gerber_obj_options = {} # VisPy Visuals - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.shapes = self.canvas.new_shape_collection(layers=1) self.tool_shape = self.canvas.new_shape_collection(layers=1) self.ma_annotation = self.canvas.new_text_group() @@ -4149,7 +4149,7 @@ class AppGerberEditor(QtCore.QObject): ymin = xmin ymax = xmax - if self.app.is_legacy is False: + if self.app.use_3d_engine: rect = Rect(xmin, ymin, xmax, ymax) rect.left, rect.right = xmin, xmax rect.bottom, rect.top = ymin, ymax @@ -4368,7 +4368,7 @@ class AppGerberEditor(QtCore.QObject): self.mm = self.canvas.graph_event_connect('mouse_move', self.on_canvas_move) self.mr = self.canvas.graph_event_connect('mouse_release', self.on_canvas_click_release) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.canvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) self.canvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -4416,7 +4416,7 @@ class AppGerberEditor(QtCore.QObject): self.app.mdc = self.canvas.graph_event_connect('mouse_double_click', self.app.on_mouse_double_click_over_plot) self.app.collection.view.clicked.connect(self.app.collection.on_mouse_down) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_press', self.on_canvas_click) self.canvas.graph_event_disconnect('mouse_move', self.on_canvas_move) self.canvas.graph_event_disconnect('mouse_release', self.on_canvas_click_release) @@ -5169,15 +5169,7 @@ class AppGerberEditor(QtCore.QObject): :param event: Event object dispatched by VisPy :return: None """ - if self.app.is_legacy is False: - event_pos = event.pos - # event_is_dragging = event.is_dragging - # right_button = 2 - else: - event_pos = (event.xdata, event.ydata) - # event_is_dragging = self.app.plotcanvas.is_dragging - # right_button = 3 - + event_pos = event.pos if self.app.use_3d_engine else (event.xdata, event.ydata) self.pos = self.canvas.translate_coords(event_pos) if self.app.grid_status(): @@ -5238,13 +5230,11 @@ class AppGerberEditor(QtCore.QObject): def on_canvas_click_release(self, event): self.modifiers = QtWidgets.QApplication.keyboardModifiers() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos - # event_is_dragging = event.is_dragging right_button = 2 else: event_pos = (event.xdata, event.ydata) - # event_is_dragging = self.app.plotcanvas.is_dragging right_button = 3 pos_canvas = self.canvas.translate_coords(event_pos) @@ -5421,7 +5411,7 @@ class AppGerberEditor(QtCore.QObject): if not self.app.plotcanvas.native.hasFocus(): self.app.plotcanvas.native.setFocus() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging right_button = 2 @@ -5697,7 +5687,7 @@ class AppGerberEditor(QtCore.QObject): # calculate the bounds values for the edited Gerber object xmin, ymin, xmax, ymax = all_geo.bounds - if self.app.is_legacy is False: + if self.app.use_3d_engine: new_rect = Rect(xmin, ymin, xmax, ymax) self.app.plotcanvas.fit_view(rect=new_rect) else: diff --git a/appGUI/VisPyVisuals.py b/appGUI/VisPyVisuals.py index 5ca0496e..f1abdb6a 100644 --- a/appGUI/VisPyVisuals.py +++ b/appGUI/VisPyVisuals.py @@ -137,6 +137,7 @@ class ShapeGroup(object): self._collection = collection self._indexes = [] self._visible = True + self._enabled = True self._color = None def add(self, **kwargs): @@ -198,6 +199,23 @@ class ShapeGroup(object): self._collection.redraw([]) + @property + def enabled(self): + """ + Another way to toggle visibility on canvas + :return: + :rtype: + """ + return self._enabled + + @enabled.setter + def enabled(self, value): + """ + Another way to toggle visibility on canvas + :param value: bool + """ + self._collection.enabled = value + def update_visibility(self, state, indexes=None): if indexes: for i in indexes: diff --git a/appObjects/FlatCAMCNCJob.py b/appObjects/FlatCAMCNCJob.py index 1c465bc9..74279f17 100644 --- a/appObjects/FlatCAMCNCJob.py +++ b/appObjects/FlatCAMCNCJob.py @@ -154,7 +154,7 @@ class CNCJobObject(FlatCAMObj, CNCjob): gcodenr_re_string = r'([+-]?\d*\.\d+)' self.g_nr_re = re.compile(gcodenr_re_string) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.text_col = self.app.plotcanvas.new_text_collection() self.text_col.enabled = True self.annotation = self.app.plotcanvas.new_text_group(collection=self.text_col) @@ -1348,19 +1348,19 @@ class CNCJobObject(FlatCAMObj, CNCjob): self.shapes.redraw() except (ObjectDeleted, AttributeError): self.shapes.clear(update=True) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.annotation.clear(update=True) # Annotations shapes plotting try: - if self.app.is_legacy is False: + if self.app.use_3d_engine: if self.ui.annotation_cb.get_value() and visible: self.plot_annotations(obj=self, visible=True) else: self.plot_annotations(obj=self, visible=False) except (ObjectDeleted, AttributeError): - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.annotation.clear(update=True) def on_annotation_change(self, val): @@ -1369,19 +1369,17 @@ class CNCJobObject(FlatCAMObj, CNCjob): :return: """ - if self.app.is_legacy is False: - # self.text_col.visible = True if val == 2 else False - # self.plot(kind=self.ui.cncplot_method_combo.get_value()) + if self.app.use_3d_engine: # Annotations shapes plotting try: - if self.app.is_legacy is False: + if self.app.use_3d_engine: if val and self.ui.plot_cb.get_value(): self.plot_annotations(obj=self, visible=True) else: self.plot_annotations(obj=self, visible=False) except (ObjectDeleted, AttributeError): - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.annotation.clear(update=True) # self.annotation.redraw() diff --git a/appObjects/FlatCAMExcellon.py b/appObjects/FlatCAMExcellon.py index c0f90f09..aa899e60 100644 --- a/appObjects/FlatCAMExcellon.py +++ b/appObjects/FlatCAMExcellon.py @@ -1197,7 +1197,7 @@ class ExcellonObject(FlatCAMObj, Excellon): if not FlatCAMObj.plot(self): return - if self.app.is_legacy is False: + if self.app.use_3d_engine: def random_color(): r_color = np.random.rand(4) r_color[3] = 1 diff --git a/appObjects/FlatCAMGeometry.py b/appObjects/FlatCAMGeometry.py index db7ac361..e2e893ed 100644 --- a/appObjects/FlatCAMGeometry.py +++ b/appObjects/FlatCAMGeometry.py @@ -1369,7 +1369,7 @@ class GeometryObject(FlatCAMObj, Geometry): for sub_el in element: self.plot_element(sub_el, color=color) except TypeError: # Element is not iterable... - # if self.app.is_legacy is False: + # if self.app.use_3d_engine: self.add_shape(shape=element, color=color, visible=visible, layer=0) def plot(self, visible=None, kind=None, plot_tool=None): @@ -1389,7 +1389,7 @@ class GeometryObject(FlatCAMObj, Geometry): if not FlatCAMObj.plot(self): return - if self.app.is_legacy is False: + if self.app.use_3d_engine: def random_color(): r_color = np.random.rand(4) r_color[3] = 1 @@ -1452,6 +1452,7 @@ class GeometryObject(FlatCAMObj, Geometry): def on_plot_cb_click(self): if self.muted_ui: return + self.read_form_item('plot') self.plot() diff --git a/appObjects/FlatCAMGerber.py b/appObjects/FlatCAMGerber.py index f201fafb..72f40349 100644 --- a/appObjects/FlatCAMGerber.py +++ b/appObjects/FlatCAMGerber.py @@ -915,7 +915,7 @@ class GerberObject(FlatCAMObj, Gerber): else: geometry = self.solid_geometry - if self.app.is_legacy is False: + if self.app.use_3d_engine: def random_color(): r_color = np.random.rand(4) r_color[3] = 1 @@ -976,7 +976,7 @@ class GerberObject(FlatCAMObj, Gerber): :return: """ - log.debug(str(inspect.stack()[1][3]) + " --> GerberObject.plot_aperture()") + # log.debug(str(inspect.stack()[1][3]) + " --> GerberObject.plot_aperture()") # Does all the required setup and returns False # if the 'ptint' option is set to False. @@ -1042,7 +1042,7 @@ class GerberObject(FlatCAMObj, Gerber): if self.mark_shapes_storage: if aperture == 'all': - val = False if self.app.is_legacy is True else True + val = True if self.app.use_3d_engine else False self.mark_shapes.clear(update=val) else: for shape_key in self.mark_shapes_storage[aperture]: diff --git a/appObjects/FlatCAMObj.py b/appObjects/FlatCAMObj.py index 7e0bb8da..1890c1c1 100644 --- a/appObjects/FlatCAMObj.py +++ b/appObjects/FlatCAMObj.py @@ -92,10 +92,9 @@ class FlatCAMObj(QtCore.QObject): self.axes = None self.kind = None # Override with proper name - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.shapes = self.app.plotcanvas.new_shape_group() self.mark_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) - # self.shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, pool=self.app.pool, layers=2) else: self.shapes = ShapeCollectionLegacy(obj=self, app=self.app, name=name) self.mark_shapes = ShapeCollectionLegacy(obj=self, app=self.app, name=name + "_mark_shapes") @@ -161,12 +160,101 @@ class FlatCAMObj(QtCore.QObject): # Update form on programmatically options change self.set_form_item(key) - # Set object visibility - if key == 'plot': + # Set object visibility for objects that are edited + if key == 'plot' and self.app.call_source != 'app': self.visible = self.options['plot'] self.optionChanged.emit(key) + def plot(self, kind=None): + """ + Plot this object (Extend this method to implement the actual plotting). + Call this in descendants before doing the plotting. + + :param kind: Used by only some of the FlatCAM objects + :return: Whether to continue plotting or not depending on the "plot" option. Boolean + """ + # log.debug(str(inspect.stack()[1][3]) + " --> FlatCAMObj.plot()") + + if self.deleted: + return False + + self.clear() + return True + + def single_object_plot(self): + def plot_task(): + with self.app.proc_container.new('%s ...' % _("Plotting")): + self.plot() + self.app.app_obj.object_changed.emit(self) + + self.app.worker_task.emit({'fcn': plot_task, 'params': []}) + + def add_shape(self, **kwargs): + tol = kwargs['tolerance'] if 'tolerance' in kwargs else self.drawing_tolerance + + if self.deleted: + raise ObjectDeleted() + else: + key = self.shapes.add(tolerance=tol, **kwargs) + return key + + def add_mark_shape(self, **kwargs): + tol = kwargs['tolerance'] if 'tolerance' in kwargs else self.drawing_tolerance + + if self.deleted: + raise ObjectDeleted() + else: + key = self.mark_shapes.add(tolerance=tol, layer=0, **kwargs) + return key + + @property + def visible(self): + ''' + This property is used by Editors to turn off plotting for the original object that is edited, + such that when deleting certain elements there is no background plot in place to confuse things. + :return: + :rtype: + ''' + return self.shapes.visible + + @visible.setter + def visible(self, value, threaded=True): + log.debug("FlatCAMObj.visible()") + + # self.shapes.enabled = not self.shapes.enabled + + current_visibility = self.shapes.visible + self.shapes.visible = current_visibility # maybe this is slower in VisPy? use enabled property? + def task(visibility): + if visibility is True: + if value is False: + self.shapes.visible = False + else: + if value is True: + self.shapes.visible = True + + if self.app.use_3d_engine: + # Not all object types has annotations + try: + self.annotation.visible = value + except Exception: + pass + + if threaded: + self.app.worker_task.emit({'fcn': task, 'params': [current_visibility]}) + else: + task(current_visibility) + + def clear(self, update=False): + self.shapes.clear(update) + + # Not all object types has annotations + try: + self.annotation.clear(update) + except Exception: + pass + def set_ui(self, ui): self.ui = ui @@ -372,30 +460,6 @@ class FlatCAMObj(QtCore.QObject): pass # self.app.log.warning("Failed to read option from field: %s" % option) - def plot(self, kind=None): - """ - Plot this object (Extend this method to implement the actual plotting). - Call this in descendants before doing the plotting. - - :param kind: Used by only some of the FlatCAM objects - :return: Whether to continue plotting or not depending on the "plot" option. Boolean - """ - log.debug(str(inspect.stack()[1][3]) + " --> FlatCAMObj.plot()") - - if self.deleted: - return False - - self.clear() - return True - - def single_object_plot(self): - def plot_task(): - with self.app.proc_container.new('%s ...' % _("Plotting")): - self.plot() - self.app.app_obj.object_changed.emit(self) - - self.app.worker_task.emit({'fcn': plot_task, 'params': []}) - def serialize(self): """ Returns a representation of the object as a dictionary so @@ -416,24 +480,6 @@ class FlatCAMObj(QtCore.QObject): """ return - def add_shape(self, **kwargs): - tol = kwargs['tolerance'] if 'tolerance' in kwargs else self.drawing_tolerance - - if self.deleted: - raise ObjectDeleted() - else: - key = self.shapes.add(tolerance=tol, **kwargs) - return key - - def add_mark_shape(self, **kwargs): - tol = kwargs['tolerance'] if 'tolerance' in kwargs else self.drawing_tolerance - - if self.deleted: - raise ObjectDeleted() - else: - key = self.mark_shapes.add(tolerance=tol, layer=0, **kwargs) - return key - def update_filters(self, last_ext, filter_string): """ Will modify the filter string that is used when saving a file (a list of file extensions) to have the last @@ -927,37 +973,6 @@ class FlatCAMObj(QtCore.QObject): def poly2rings(poly): return [poly.exterior] + [interior for interior in poly.interiors] - @property - def visible(self): - return self.shapes.visible - - @visible.setter - def visible(self, value, threaded=True): - log.debug("FlatCAMObj.visible()") - - current_visibility = self.shapes.visible - # self.shapes.visible = value # maybe this is slower in VisPy? use enabled property? - - def task(visibility): - if visibility is True: - if value is False: - self.shapes.visible = False - else: - if value is True: - self.shapes.visible = True - - if self.app.is_legacy is False: - # Not all object types has annotations - try: - self.annotation.visible = value - except Exception: - pass - - if threaded: - self.app.worker_task.emit({'fcn': task, 'params': [current_visibility]}) - else: - task(current_visibility) - @property def drawing_tolerance(self): self.units = self.app.app_units.upper() @@ -969,15 +984,6 @@ class FlatCAMObj(QtCore.QObject): self.units = self.app.app_units.upper() self._drawing_tolerance = value if self.units == 'MM' or not self.units else value / 25.4 - def clear(self, update=False): - self.shapes.clear(update) - - # Not all object types has annotations - try: - self.annotation.clear(update) - except Exception: - pass - def delete(self): # Free resources del self.ui diff --git a/appObjects/ObjectCollection.py b/appObjects/ObjectCollection.py index 1c7b017d..da8951f9 100644 --- a/appObjects/ObjectCollection.py +++ b/appObjects/ObjectCollection.py @@ -725,7 +725,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): self.endRemoveRows() # ############ OBJECT DELETION FROM MODEL STOPS HERE #################### - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.redraw() if select_project: @@ -778,7 +778,7 @@ class ObjectCollection(QtCore.QAbstractItemModel): self.endRemoveRows() # ############ OBJECT DELETION FROM MODEL STOPS HERE #################### - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.redraw() if select_project: diff --git a/appPlugins/ToolAlignObjects.py b/appPlugins/ToolAlignObjects.py index 73d7c1fe..60cfccdb 100644 --- a/appPlugins/ToolAlignObjects.py +++ b/appPlugins/ToolAlignObjects.py @@ -217,13 +217,13 @@ class AlignObjects(AppTool): self.app.inform.emit('%s: %s' % (_("First Point"), _("Click on the START point."))) self.mr = self.canvas.graph_event_connect('mouse_release', self.on_mouse_click_release) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) else: self.canvas.graph_event_disconnect(self.app.mr) def on_mouse_click_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos right_button = 2 self.app.event_is_dragging = self.app.event_is_dragging @@ -361,7 +361,7 @@ class AlignObjects(AppTool): self.app.mr = self.canvas.graph_event_connect('mouse_release', self.app.on_mouse_click_release_over_plot) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) else: self.canvas.graph_event_disconnect(self.mr) diff --git a/appPlugins/ToolCalibration.py b/appPlugins/ToolCalibration.py index 6b053ab1..4e4d2e5e 100644 --- a/appPlugins/ToolCalibration.py +++ b/appPlugins/ToolCalibration.py @@ -238,7 +238,7 @@ class ToolCalibration(AppTool): self.mr = self.canvas.graph_event_connect('mouse_release', self.on_mouse_click_release) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) else: self.canvas.graph_event_disconnect(self.app.mr) @@ -250,7 +250,7 @@ class ToolCalibration(AppTool): self.app.inform.emit(_("Get First calibration point. Bottom Left...")) def on_mouse_click_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos right_button = 2 self.app.event_is_dragging = self.app.event_is_dragging @@ -748,7 +748,7 @@ class ToolCalibration(AppTool): self.app.mr = self.canvas.graph_event_connect('mouse_release', self.app.on_mouse_click_release_over_plot) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) else: self.canvas.graph_event_disconnect(self.mr) diff --git a/appPlugins/ToolCopperThieving.py b/appPlugins/ToolCopperThieving.py index cebd4a20..078ba574 100644 --- a/appPlugins/ToolCopperThieving.py +++ b/appPlugins/ToolCopperThieving.py @@ -415,7 +415,7 @@ class ToolCopperThieving(AppTool): # To be called after clicking on the plot. def on_mouse_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos # event_is_dragging = event.is_dragging right_button = 2 @@ -482,7 +482,7 @@ class ToolCopperThieving(AppTool): # called on mouse move def on_mouse_move(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging # right_button = 2 @@ -1212,7 +1212,7 @@ class ToolCopperThieving(AppTool): def connect_event_handlers(self): if self.handlers_connected is False: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -1227,7 +1227,7 @@ class ToolCopperThieving(AppTool): def disconnect_event_handlers(self): if self.handlers_connected is True: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) else: diff --git a/appPlugins/ToolCutOut.py b/appPlugins/ToolCutOut.py index 647bffd1..21c1a466 100644 --- a/appPlugins/ToolCutOut.py +++ b/appPlugins/ToolCutOut.py @@ -1537,7 +1537,7 @@ class CutOut(AppTool): self.app.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Could not retrieve object"), name)) return - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('key_press', self.app.ui.keyPressEvent) self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -1737,7 +1737,7 @@ class CutOut(AppTool): # To be called after clicking on the plot. def on_mouse_click_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos # event_is_dragging = event.is_dragging right_button = 2 @@ -1763,7 +1763,7 @@ class CutOut(AppTool): # if RMB then we exit elif event.button == right_button and self.mouse_is_dragging is False: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) @@ -1853,7 +1853,7 @@ class CutOut(AppTool): self.app.on_mouse_move_over_plot(event=event) - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging # right_button = 2 @@ -1989,7 +1989,7 @@ class CutOut(AppTool): if key == QtCore.Qt.Key.Key_Escape or key == 'Escape': if self.mouse_events_connected is True: self.mouse_events_connected = False - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) diff --git a/appPlugins/ToolDblSided.py b/appPlugins/ToolDblSided.py index 14126763..9c50bf39 100644 --- a/appPlugins/ToolDblSided.py +++ b/appPlugins/ToolDblSided.py @@ -402,13 +402,13 @@ class DblSidedTool(AppTool): self.app.inform.emit('%s.' % _("Click on canvas within the desired Excellon drill hole")) self.mr = self.canvas.graph_event_connect('mouse_release', self.on_mouse_click_release) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) else: self.canvas.graph_event_disconnect(self.app.mr) def on_mouse_click_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos right_button = 2 self.app.event_is_dragging = self.app.event_is_dragging @@ -496,7 +496,7 @@ class DblSidedTool(AppTool): def disconnect_events(self): self.app.mr = self.canvas.graph_event_connect('mouse_release', self.app.on_mouse_click_release_over_plot) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) else: self.canvas.graph_event_disconnect(self.mr) diff --git a/appPlugins/ToolDistance.py b/appPlugins/ToolDistance.py index 8266bff2..a35fd24b 100644 --- a/appPlugins/ToolDistance.py +++ b/appPlugins/ToolDistance.py @@ -80,7 +80,7 @@ class Distance(AppTool): self.mouse_is_dragging = False # VisPy visuals - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.sel_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) else: from appGUI.PlotCanvasLegacy import ShapeCollectionLegacy @@ -221,7 +221,7 @@ class Distance(AppTool): # we disconnect the mouse/key handlers from wherever the measurement tool was called if self.app.call_source == 'app': - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) self.canvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.canvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -231,7 +231,7 @@ class Distance(AppTool): self.canvas.graph_event_disconnect(self.app.mr) elif self.app.call_source == 'geo_editor': - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_move', self.app.geo_editor.on_canvas_move) self.canvas.graph_event_disconnect('mouse_press', self.app.geo_editor.on_canvas_click) self.canvas.graph_event_disconnect('mouse_release', self.app.geo_editor.on_canvas_click_release) @@ -241,7 +241,7 @@ class Distance(AppTool): self.canvas.graph_event_disconnect(self.app.geo_editor.mr) elif self.app.call_source == 'exc_editor': - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_move', self.app.exc_editor.on_canvas_move) self.canvas.graph_event_disconnect('mouse_press', self.app.exc_editor.on_canvas_click) self.canvas.graph_event_disconnect('mouse_release', self.app.exc_editor.on_exc_click_release) @@ -251,7 +251,7 @@ class Distance(AppTool): self.canvas.graph_event_disconnect(self.app.exc_editor.mr) elif self.app.call_source == 'grb_editor': - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_move', self.app.grb_editor.on_canvas_move) self.canvas.graph_event_disconnect('mouse_press', self.app.grb_editor.on_canvas_click) self.canvas.graph_event_disconnect('mouse_release', self.app.grb_editor.on_grb_click_release) @@ -285,7 +285,7 @@ class Distance(AppTool): self.app.grb_editor.on_grb_click_release) # disconnect the mouse/key events from functions of measurement tool - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.canvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.canvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) else: @@ -329,7 +329,7 @@ class Distance(AppTool): snap_enabled = self.ui.snap_center_cb.get_value() multipoint = self.ui.multipoint_cb.get_value() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos right_button = 2 event_is_dragging = self.mouse_is_dragging @@ -506,7 +506,7 @@ class Distance(AppTool): multipoint = self.ui.multipoint_cb.get_value() try: # May fail in case mouse not within axes - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos self.mouse_is_dragging = event.is_dragging else: @@ -656,7 +656,7 @@ class Distance(AppTool): self.last_shape = self.sel_shapes.add(meas_line, color=color, update=True, layer=0, tolerance=None, linewidth=2) - if self.app.is_legacy is True: + if self.app.use_3d_engine: self.sel_shapes.redraw() def delete_all_shapes(self): diff --git a/appPlugins/ToolDrilling.py b/appPlugins/ToolDrilling.py index ac83ea45..2828d0cc 100644 --- a/appPlugins/ToolDrilling.py +++ b/appPlugins/ToolDrilling.py @@ -1682,7 +1682,7 @@ class ToolDrilling(AppTool, Excellon): self.delete_sel_shape() - if self.app.is_legacy is False: + if self.app.use_3d_engine: face = self.app.defaults['global_sel_fill'][:-2] + str(hex(int(0.2 * 255)))[2:] outline = self.app.defaults['global_sel_line'][:-2] + str(hex(int(0.8 * 255)))[2:] else: @@ -1693,7 +1693,7 @@ class ToolDrilling(AppTool, Excellon): sel_rect = self.app.exc_areas.exclusion_areas_storage[row]['shape'] self.app.move_tool.sel_shapes.add(sel_rect, color=outline, face_color=face, update=True, layer=0, tolerance=None) - if self.app.is_legacy is True: + if self.app.use_3d_engine: self.app.move_tool.sel_shapes.redraw() def clear_selection(self): diff --git a/appPlugins/ToolFiducials.py b/appPlugins/ToolFiducials.py index b7d6aefb..de9bfc0e 100644 --- a/appPlugins/ToolFiducials.py +++ b/appPlugins/ToolFiducials.py @@ -608,7 +608,7 @@ class ToolFiducials(AppTool): self.on_exit() def on_mouse_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos right_button = 2 self.app.event_is_dragging = self.app.event_is_dragging @@ -756,7 +756,7 @@ class ToolFiducials(AppTool): def connect_event_handlers(self): if self.handlers_connected is False: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) else: @@ -769,7 +769,7 @@ class ToolFiducials(AppTool): def disconnect_event_handlers(self): if self.handlers_connected is True: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) else: self.app.plotcanvas.graph_event_disconnect(self.mr) diff --git a/appPlugins/ToolFollow.py b/appPlugins/ToolFollow.py index 8ece35d8..bc34b5ee 100644 --- a/appPlugins/ToolFollow.py +++ b/appPlugins/ToolFollow.py @@ -225,7 +225,7 @@ class ToolFollow(AppTool, Gerber): else: self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the start point of the area.")) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -401,9 +401,8 @@ class ToolFollow(AppTool, Gerber): # To be called after clicking on the plot. def on_mouse_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos - # event_is_dragging = event.is_dragging right_button = 2 else: event_pos = (event.xdata, event.ydata) @@ -495,7 +494,7 @@ class ToolFollow(AppTool, Gerber): self.delete_tool_selection_shape() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) @@ -523,7 +522,7 @@ class ToolFollow(AppTool, Gerber): def on_mouse_move(self, event): shape_type = self.ui.area_shape_radio.get_value() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging # right_button = 2 @@ -626,7 +625,7 @@ class ToolFollow(AppTool, Gerber): if key == QtCore.Qt.Key.Key_Escape or key == 'Escape': if self.area_sel_disconnect_flag is True: try: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) diff --git a/appPlugins/ToolIsolation.py b/appPlugins/ToolIsolation.py index 4470e30d..181a06d5 100644 --- a/appPlugins/ToolIsolation.py +++ b/appPlugins/ToolIsolation.py @@ -1675,7 +1675,7 @@ class ToolIsolation(AppTool, Gerber): elif selection == 1: # Area Selection self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the start point of the area.")) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -1703,7 +1703,7 @@ class ToolIsolation(AppTool, Gerber): self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_poly_mouse_click_release) self.kp = self.app.plotcanvas.graph_event_connect('key_press', self.on_key_press) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) else: @@ -2434,7 +2434,7 @@ class ToolIsolation(AppTool, Gerber): return new_geometry def on_poly_mouse_click_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos right_button = 2 self.app.event_is_dragging = self.app.event_is_dragging @@ -2502,7 +2502,7 @@ class ToolIsolation(AppTool, Gerber): if self.grid_status_memory is True: self.app.ui.grid_snap_btn.trigger() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_poly_mouse_click_release) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) else: @@ -2640,13 +2640,11 @@ class ToolIsolation(AppTool, Gerber): def on_mouse_release(self, event): shape_type = self.ui.area_shape_radio.get_value() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos - # event_is_dragging = event.is_dragging right_button = 2 else: event_pos = (event.xdata, event.ydata) - # event_is_dragging = self.app.plotcanvas.is_dragging right_button = 3 event_pos = self.app.plotcanvas.translate_coords(event_pos) @@ -2728,7 +2726,7 @@ class ToolIsolation(AppTool, Gerber): self.delete_tool_selection_shape() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) @@ -2758,14 +2756,12 @@ class ToolIsolation(AppTool, Gerber): def on_mouse_move(self, event): shape_type = self.ui.area_shape_radio.get_value() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging - # right_button = 2 else: event_pos = (event.xdata, event.ydata) event_is_dragging = self.app.plotcanvas.is_dragging - # right_button = 3 curr_pos = self.app.plotcanvas.translate_coords(event_pos) @@ -2855,7 +2851,7 @@ class ToolIsolation(AppTool, Gerber): if key == QtCore.Qt.Key.Key_Escape or key == 'Escape': if self.area_sel_disconnect_flag is True: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) @@ -2876,7 +2872,7 @@ class ToolIsolation(AppTool, Gerber): if self.grid_status_memory is True: self.app.ui.grid_snap_btn.trigger() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_poly_mouse_click_release) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) else: diff --git a/appPlugins/ToolLevelling.py b/appPlugins/ToolLevelling.py index f8ba257b..1ce2df63 100644 --- a/appPlugins/ToolLevelling.py +++ b/appPlugins/ToolLevelling.py @@ -262,7 +262,7 @@ class ToolLevelling(AppTool, CNCjob): name = '' # Shapes container for the Voronoi cells in Autolevelling - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.probing_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) else: self.probing_shapes = ShapeCollectionLegacy(obj=self, app=self.app, name=name + "_probing_shapes") @@ -351,7 +351,7 @@ class ToolLevelling(AppTool, CNCjob): self.ui.al_frame.setDisabled(False) # Shapes container for the Voronoi cells in Autolevelling - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.probing_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) else: self.probing_shapes = ShapeCollectionLegacy(obj=self, app=self.app, name=obj_name + "_probing_shapes") @@ -602,7 +602,7 @@ class ToolLevelling(AppTool, CNCjob): self.app.inform.emit(_("Click on canvas to add a Probe Point...")) self.app.defaults['global_selection_shape'] = False - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('key_press', self.app.ui.keyPressEvent) self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -673,7 +673,7 @@ class ToolLevelling(AppTool, CNCjob): def plot_probing_geo(self, geometry, visibility, custom_color=None): if visibility: - if self.app.is_legacy is False: + if self.app.use_3d_engine: def random_color(): r_color = np.random.rand(4) r_color[3] = 0.5 @@ -695,7 +695,7 @@ class ToolLevelling(AppTool, CNCjob): return new_color try: - # if self.app.is_legacy is False: + # if self.app.use_3d_engine: # color = "#0000FFFE" # else: # color = "#0000FFFE" @@ -816,13 +816,11 @@ class ToolLevelling(AppTool, CNCjob): # To be called after clicking on the plot. def on_mouse_click_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos - # event_is_dragging = event.is_dragging right_button = 2 else: event_pos = (event.xdata, event.ydata) - # event_is_dragging = self.app.plotcanvas.is_dragging right_button = 3 try: @@ -873,7 +871,7 @@ class ToolLevelling(AppTool, CNCjob): # if RMB then we exit elif event.button == right_button and self.mouse_is_dragging is False: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) else: @@ -951,7 +949,7 @@ class ToolLevelling(AppTool, CNCjob): if key == QtCore.Qt.Key.Key_Escape or key == 'Escape': if self.mouse_events_connected is True: self.mouse_events_connected = False - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release) else: diff --git a/appPlugins/ToolMarkers.py b/appPlugins/ToolMarkers.py index ae913bd1..f47c7e45 100644 --- a/appPlugins/ToolMarkers.py +++ b/appPlugins/ToolMarkers.py @@ -1059,7 +1059,7 @@ class ToolMarkers(AppTool): def connect_event_handlers(self): if self.handlers_connected is False: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) else: @@ -1072,7 +1072,7 @@ class ToolMarkers(AppTool): def disconnect_event_handlers(self): if self.handlers_connected is True: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) else: self.app.plotcanvas.graph_event_disconnect(self.mr) @@ -1089,7 +1089,7 @@ class ToolMarkers(AppTool): pass def on_mouse_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos right_button = 2 self.app.event_is_dragging = self.app.event_is_dragging @@ -1135,7 +1135,7 @@ class ToolMarkers(AppTool): for shape in [line_geo_hor, line_geo_vert]: self.temp_shapes.add(shape, color=outline, update=True, layer=0, tolerance=None) - if self.app.is_legacy is True: + if self.app.use_3d_engine: self.temp_shapes.redraw() def clear_utility_geometry(self): diff --git a/appPlugins/ToolMilling.py b/appPlugins/ToolMilling.py index 8853bafe..6bacb593 100644 --- a/appPlugins/ToolMilling.py +++ b/appPlugins/ToolMilling.py @@ -3427,7 +3427,7 @@ class ToolMilling(AppTool, Excellon): self.delete_sel_shape() - if self.app.is_legacy is False: + if self.app.use_3d_engine: face = self.app.defaults['global_sel_fill'][:-2] + str(hex(int(0.2 * 255)))[2:] outline = self.app.defaults['global_sel_line'][:-2] + str(hex(int(0.8 * 255)))[2:] else: @@ -3438,7 +3438,7 @@ class ToolMilling(AppTool, Excellon): sel_rect = self.app.exc_areas.exclusion_areas_storage[row]['shape'] self.app.move_tool.sel_shapes.add(sel_rect, color=outline, face_color=face, update=True, layer=0, tolerance=None) - if self.app.is_legacy is True: + if self.app.use_3d_engine: self.app.move_tool.sel_shapes.redraw() def clear_selection(self): diff --git a/appPlugins/ToolMove.py b/appPlugins/ToolMove.py index feb6175a..cf8c9021 100644 --- a/appPlugins/ToolMove.py +++ b/appPlugins/ToolMove.py @@ -47,7 +47,7 @@ class ToolMove(AppTool): self.old_coords = [] # VisPy visuals - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.sel_shapes = ShapeCollection(parent=self.app.plotcanvas.view.scene, layers=1) else: from appGUI.PlotCanvasLegacy import ShapeCollectionLegacy @@ -73,7 +73,7 @@ class ToolMove(AppTool): if self.isVisible(): self.setVisible(False) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_move) self.app.plotcanvas.graph_event_disconnect('mouse_press', self.on_left_click) self.app.plotcanvas.graph_event_disconnect('key_release', self.on_key_press) @@ -117,11 +117,7 @@ class ToolMove(AppTool): # this is necessary because right mouse click and middle mouse click # are used for panning on the canvas - if self.app.is_legacy is False: - event_pos = event.pos - else: - event_pos = (event.xdata, event.ydata) - + event_pos = event.pos if self.app.use_3d_engine else (event.xdata, event.ydata) if event.button == 1: if self.clicked_move == 0: pos_canvas = self.app.plotcanvas.translate_coords(event_pos) @@ -239,12 +235,7 @@ class ToolMove(AppTool): self.app.worker_task.emit({'fcn': worker_task, 'params': []}) def on_move(self, event): - - if self.app.is_legacy is False: - event_pos = event.pos - else: - event_pos = (event.xdata, event.ydata) - + event_pos = event.pos if self.app.use_3d_engine else (event.xdata, event.ydata) try: x = float(event_pos[0]) y = float(event_pos[1]) @@ -308,7 +299,7 @@ class ToolMove(AppTool): self.old_coords = [p1, p2, p3, p4] self.draw_shape(Polygon(self.old_coords)) - if self.app.is_legacy is True: + if self.app.use_3d_engine: self.sel_shapes.redraw() def update_sel_bbox(self, pos): @@ -320,7 +311,7 @@ class ToolMove(AppTool): pt4 = (self.old_coords[3][0] + pos[0], self.old_coords[3][1] + pos[1]) self.draw_shape(Polygon([pt1, pt2, pt3, pt4])) - if self.app.is_legacy is True: + if self.app.use_3d_engine: self.sel_shapes.redraw() def delete_shape(self): diff --git a/appPlugins/ToolNCC.py b/appPlugins/ToolNCC.py index d51978dc..e35f4e6a 100644 --- a/appPlugins/ToolNCC.py +++ b/appPlugins/ToolNCC.py @@ -1590,7 +1590,7 @@ class NonCopperClear(AppTool, Gerber): elif self.select_method == 1: # Area Selection self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the start point of the area.")) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -1625,7 +1625,7 @@ class NonCopperClear(AppTool, Gerber): # To be called after clicking on the plot. def on_mouse_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos # event_is_dragging = event.is_dragging right_button = 2 @@ -1713,7 +1713,7 @@ class NonCopperClear(AppTool, Gerber): self.delete_tool_selection_shape() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) @@ -1746,14 +1746,12 @@ class NonCopperClear(AppTool, Gerber): def on_mouse_move(self, event): shape_type = self.ui.area_shape_radio.get_value() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging - # right_button = 2 else: event_pos = (event.xdata, event.ydata) event_is_dragging = self.app.plotcanvas.is_dragging - # right_button = 3 curr_pos = self.app.plotcanvas.translate_coords(event_pos) @@ -1843,7 +1841,7 @@ class NonCopperClear(AppTool, Gerber): if key == QtCore.Qt.Key.Key_Escape or key == 'Escape': if self.area_sel_disconnect_flag is True: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) @@ -1857,7 +1855,7 @@ class NonCopperClear(AppTool, Gerber): if self.grid_status_memory is True: self.app.ui.grid_snap_btn.trigger() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_single_poly_mouse_release) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) else: diff --git a/appPlugins/ToolPaint.py b/appPlugins/ToolPaint.py index 88717644..2b1adaa8 100644 --- a/appPlugins/ToolPaint.py +++ b/appPlugins/ToolPaint.py @@ -1202,7 +1202,7 @@ class ToolPaint(AppTool, Gerber): self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_single_poly_mouse_release) self.kp = self.app.plotcanvas.graph_event_connect('key_press', self.on_key_press) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) else: @@ -1215,7 +1215,7 @@ class ToolPaint(AppTool, Gerber): elif self.select_method == 2: # _("Area Selection") self.app.inform.emit('[WARNING_NOTCL] %s' % _("Click the start point of the area.")) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.app.on_mouse_move_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) @@ -1247,7 +1247,7 @@ class ToolPaint(AppTool, Gerber): # To be called after clicking on the plot. def on_single_poly_mouse_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos right_button = 2 event_is_dragging = self.app.event_is_dragging @@ -1306,7 +1306,7 @@ class ToolPaint(AppTool, Gerber): if self.grid_status_memory is True: self.app.ui.grid_snap_btn.trigger() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_single_poly_mouse_release) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) else: @@ -1333,7 +1333,7 @@ class ToolPaint(AppTool, Gerber): # To be called after clicking on the plot. def on_mouse_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos # event_is_dragging = event.is_dragging right_button = 2 @@ -1428,7 +1428,7 @@ class ToolPaint(AppTool, Gerber): self.delete_tool_selection_shape() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) @@ -1459,7 +1459,7 @@ class ToolPaint(AppTool, Gerber): def on_mouse_move(self, event): shape_type = self.ui.area_shape_radio.get_value() - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos event_is_dragging = event.is_dragging # right_button = 2 @@ -1562,7 +1562,7 @@ class ToolPaint(AppTool, Gerber): if key == QtCore.Qt.Key.Key_Escape or key == 'Escape': if self.area_sel_disconnect_flag is True: try: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) @@ -1586,7 +1586,7 @@ class ToolPaint(AppTool, Gerber): if self.grid_status_memory is True: self.app.ui.grid_snap_btn.trigger() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_single_poly_mouse_release) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) else: diff --git a/appPlugins/ToolPunchGerber.py b/appPlugins/ToolPunchGerber.py index 81100f5b..a127f6e8 100644 --- a/appPlugins/ToolPunchGerber.py +++ b/appPlugins/ToolPunchGerber.py @@ -554,7 +554,7 @@ class ToolPunchGerber(AppTool, Gerber): self.mr = self.app.plotcanvas.graph_event_connect('mouse_release', self.on_single_poly_mouse_release) self.kp = self.app.plotcanvas.graph_event_connect('key_press', self.on_key_press) - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot) self.app.plotcanvas.graph_event_disconnect('mouse_press', self.app.on_mouse_click_over_plot) else: @@ -1657,7 +1657,7 @@ class ToolPunchGerber(AppTool, Gerber): # To be called after clicking on the plot. def on_single_poly_mouse_release(self, event): - if self.app.is_legacy is False: + if self.app.use_3d_engine: event_pos = event.pos right_button = 2 event_is_dragging = self.app.event_is_dragging @@ -1733,7 +1733,7 @@ class ToolPunchGerber(AppTool, Gerber): if self.grid_status_memory is True: self.app.ui.grid_snap_btn.trigger() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_single_poly_mouse_release) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) else: @@ -1805,7 +1805,7 @@ class ToolPunchGerber(AppTool, Gerber): if key == QtCore.Qt.Key.Key_Escape or key == 'Escape': if self.area_sel_disconnect_flag is True: try: - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) @@ -1829,7 +1829,7 @@ class ToolPunchGerber(AppTool, Gerber): if self.grid_status_memory is True: self.app.ui.grid_snap_btn.trigger() - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_single_poly_mouse_release) self.app.plotcanvas.graph_event_disconnect('key_press', self.on_key_press) else: diff --git a/appPlugins/ToolQRCode.py b/appPlugins/ToolQRCode.py index 8aec77d4..04578c29 100644 --- a/appPlugins/ToolQRCode.py +++ b/appPlugins/ToolQRCode.py @@ -434,7 +434,7 @@ class QRCode(AppTool): for shape in offset_geo: self.shapes.add(shape, color=outline, update=True, layer=0, tolerance=None) - if self.app.is_legacy is True: + if self.app.use_3d_engine: self.shapes.redraw() def delete_utility_geo(self): @@ -442,11 +442,7 @@ class QRCode(AppTool): self.shapes.redraw() def on_mouse_move(self, event): - if self.app.is_legacy is False: - event_pos = event.pos - else: - event_pos = (event.xdata, event.ydata) - + event_pos = event.pos if self.app.use_3d_engine else (event.xdata, event.ydata) try: x = float(event_pos[0]) y = float(event_pos[1]) @@ -473,11 +469,7 @@ class QRCode(AppTool): # this is necessary because right mouse click and middle mouse click # are used for panning on the canvas - if self.app.is_legacy is False: - event_pos = event.pos - else: - event_pos = (event.xdata, event.ydata) - + event_pos = event.pos if self.app.use_3d_engine else (event.xdata, event.ydata) if event.button == 1: pos_canvas = self.app.plotcanvas.translate_coords(event_pos) self.delete_utility_geo() @@ -562,7 +554,7 @@ class QRCode(AppTool): self.app.worker_task.emit({'fcn': worker_task, 'params': []}) def on_exit(self): - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move) self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release) self.app.plotcanvas.graph_event_disconnect('key_release', self.on_key_release) diff --git a/appTool.py b/appTool.py index 8d2a3d94..21924b1f 100644 --- a/appTool.py +++ b/appTool.py @@ -165,7 +165,7 @@ class AppTool(QtWidgets.QWidget): color_t = face_color[:-2] + str(hex(int(face_alpha * 255)))[2:] s_storage.add(sel_rect, color=color, face_color=color_t, update=True, layer=0, tolerance=None) - if self.app.is_legacy is True: + if self.app.use_3d_engine: s_storage.redraw() def draw_selection_shape_polygon(self, points, **kwargs): @@ -207,7 +207,7 @@ class AppTool(QtWidgets.QWidget): color_t = face_color[:-2] + str(hex(int(face_alpha * 255)))[2:] s_storage.add(sel_rect, color=color, face_color=color_t, update=True, layer=0, tolerance=None) - if self.app.is_legacy is True: + if self.app.use_3d_engine: s_storage.redraw() def delete_tool_selection_shape(self, **kwargs): @@ -277,7 +277,7 @@ class AppTool(QtWidgets.QWidget): elif not geo.is_valid: s_storage.add(geo, color="red", face_color=color_t_error, update=True, layer=0, tolerance=None) - if self.app.is_legacy is True: + if self.app.use_3d_engine: s_storage.redraw() def delete_moving_selection_shape(self, **kwargs): diff --git a/app_Main.py b/app_Main.py index 5b86cb42..c78cc43c 100644 --- a/app_Main.py +++ b/app_Main.py @@ -1096,10 +1096,10 @@ class App(QtCore.QObject): # ######################################## SETUP Plot Area ################################################## # ########################################################################################################### + self.use_3d_engine = True # determine if the Legacy Graphic Engine is to be used or the OpenGL one - self.is_legacy = True - if self.defaults["global_graphic_engine"] == '3D': - self.is_legacy = False + if self.defaults["global_graphic_engine"] == '2D': + self.use_3d_engine = False # PlotCanvas Event signals disconnect id holders self.mp = None @@ -1139,7 +1139,7 @@ class App(QtCore.QObject): # Storage for shapes, storage that can be used by FlatCAm tools for utility geometry # VisPy visuals - if self.is_legacy is False: + if self.use_3d_engine: try: self.tool_shapes = ShapeCollection(parent=self.plotcanvas.view.scene, layers=1) except AttributeError: @@ -1151,8 +1151,7 @@ class App(QtCore.QObject): from appGUI.PlotCanvasLegacy import ShapeCollectionLegacy self.tool_shapes = ShapeCollectionLegacy(obj=self, app=self, name="tool") - # Storage for Hover Shapes - # will use the default Matplotlib axes + # Storage for Hover Shapes will use the default Matplotlib axes self.hover_shapes = ShapeCollectionLegacy(obj=self, app=self, name='hover') end_plot_time = time.time() @@ -4036,19 +4035,19 @@ class App(QtCore.QObject): self.log.debug("App.quit_application() --> Gerber Editor deactivated.") # disconnect the mouse events - if self.is_legacy: - self.plotcanvas.graph_event_disconnect(self.mm) - self.plotcanvas.graph_event_disconnect(self.mp) - self.plotcanvas.graph_event_disconnect(self.mr) - self.plotcanvas.graph_event_disconnect(self.mdc) - self.plotcanvas.graph_event_disconnect(self.kp) - else: + if self.use_3d_engine: self.mm = self.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move_over_plot) self.mp = self.plotcanvas.graph_event_disconnect('mouse_press', self.on_mouse_click_over_plot) self.mr = self.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_click_release_over_plot) self.mdc = self.plotcanvas.graph_event_disconnect('mouse_double_click', self.on_mouse_double_click_over_plot) self.kp = self.plotcanvas.graph_event_disconnect('key_press', self.ui.keyPressEvent) + else: + self.plotcanvas.graph_event_disconnect(self.mm) + self.plotcanvas.graph_event_disconnect(self.mp) + self.plotcanvas.graph_event_disconnect(self.mr) + self.plotcanvas.graph_event_disconnect(self.mdc) + self.plotcanvas.graph_event_disconnect(self.kp) self.preferencesUiManager.save_defaults(silent=True) self.log.debug("App.quit_application() --> App Defaults saved.") @@ -5226,11 +5225,10 @@ class App(QtCore.QObject): self.log.debug("Nothing selected for deletion") return - if self.is_legacy is True: + if self.use_3d_engine is False: # Remove plot only if the object was plotted otherwise delaxes will fail if isPlotted: try: - # self.plotcanvas.figure.delaxes(self.collection.get_active().axes) self.plotcanvas.figure.delaxes(self.collection.get_active().shapes.axes) except Exception as e: self.log.error("App.delete_first_selected() --> %s" % str(e)) @@ -5265,10 +5263,10 @@ class App(QtCore.QObject): for obj in self.collection.get_list(): obj.plot() self.plotcanvas.fit_view() - if self.is_legacy: - self.plotcanvas.graph_event_disconnect(self.mp_zc) - else: + if self.use_3d_engine: self.plotcanvas.graph_event_disconnect('mouse_release', self.on_set_zero_click) + else: + self.plotcanvas.graph_event_disconnect(self.mp_zc) self.inhibit_context_menu = False self.worker_task.emit({'fcn': worker_task, 'params': []}) @@ -5292,19 +5290,15 @@ class App(QtCore.QObject): :return: """ noplot_sig = noplot + right_button = 2 if self.use_3d_engine else 3 - if self.is_legacy is False: - right_button = 2 - else: - right_button = 3 - - def worker_task(): - with self.proc_container.new(_("Setting Origin...")): - obj_list = self.collection.get_list() + def worker_task(app_obj): + with app_obj.proc_container.new(_("Setting Origin...")): + obj_list = app_obj.collection.get_list() for obj in obj_list: obj.offset((x, y)) - self.app_obj.object_changed.emit(obj) + app_obj.app_obj.object_changed.emit(obj) # Update the object bounding box options a, b, c, d = obj.bounds() @@ -5320,22 +5314,22 @@ class App(QtCore.QObject): # not all objects have this attribute pass - self.inform.emit('[success] %s...' % _('Origin set')) + app_obj.inform.emit('[success] %s...' % _('Origin set')) for obj in obj_list: out_name = obj.options["name"] if obj.kind == 'gerber': - obj.source_file = self.f_handlers.export_gerber( + obj.source_file = app_obj.f_handlers.export_gerber( obj_name=out_name, filename=None, local_use=obj, use_thread=False) elif obj.kind == 'excellon': - obj.source_file = self.f_handlers.export_excellon( + obj.source_file = app_obj.f_handlers.export_excellon( obj_name=out_name, filename=None, local_use=obj, use_thread=False) elif obj.kind == 'geometry': - obj.source_file = self.f_handlers.export_dxf( + obj.source_file = app_obj.f_handlers.export_dxf( obj_name=out_name, filename=None, local_use=obj, use_thread=False) if noplot_sig is False: - self.replot_signal.emit([]) + app_obj.replot_signal.emit([]) if location is not None: if len(location) != 2: @@ -5345,17 +5339,14 @@ class App(QtCore.QObject): x, y = location if use_thread is True: - self.worker_task.emit({'fcn': worker_task, 'params': []}) + self.worker_task.emit({'fcn': worker_task, 'params': [self]}) else: - worker_task() + worker_task(self) self.should_we_save = True return if event is not None and event.button == 1: - if self.is_legacy is False: - event_pos = event.pos - else: - event_pos = (event.xdata, event.ydata) + event_pos = event.pos if self.use_3d_engine else (event.xdata, event.ydata) pos_canvas = self.plotcanvas.translate_coords(event_pos) if self.grid_status(): @@ -5373,11 +5364,12 @@ class App(QtCore.QObject): self.should_we_save = True elif event is not None and event.button == right_button: if self.ui.popMenu.mouse_is_panning is False: - if self.is_legacy: - self.plotcanvas.graph_event_disconnect(self.mp_zc) - else: + if self.use_3d_engine: self.plotcanvas.graph_event_disconnect('mouse_release', self.on_set_zero_click) self.inhibit_context_menu = False + else: + self.plotcanvas.graph_event_disconnect(self.mp_zc) + self.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) def on_move2origin(self, use_thread=True): @@ -5655,7 +5647,7 @@ class App(QtCore.QObject): cursor = QtGui.QCursor() - if self.is_legacy is False: + if self.use_3d_engine: # I don't know where those differences come from but they are constant for the current # execution of the application and they are multiples of a value around 0.0263mm. # In a random way sometimes they are more sometimes they are less @@ -5802,7 +5794,7 @@ class App(QtCore.QObject): cursor = QtGui.QCursor() - if self.is_legacy is False: + if self.use_3d_engine: # I don't know where those differences come from but they are constant for the current # execution of the application and they are multiples of a value around 0.0263mm. # In a random way sometimes they are more sometimes they are less @@ -6598,7 +6590,7 @@ class App(QtCore.QObject): self.tools_db_tab.ui_connect() def on_3d_area(self): - if self.is_legacy is True: + if self.use_3d_engine is False: msg = '[ERROR_NOTCL] %s' % _("Not available for Legacy 2D graphic mode.") self.inform.emit(msg) return @@ -7087,14 +7079,9 @@ class App(QtCore.QObject): :return: None """ - if self.is_legacy is False: - self.plotcanvas.update() - else: - self.plotcanvas.auto_adjust_axes() - + self.plotcanvas.update() if self.use_3d_engine else self.plotcanvas.auto_adjust_axes() self.on_zoom_fit() self.collection.update_view() - # self.inform.emit(_("Done.")) def on_toolbar_replot(self): """ @@ -7103,17 +7090,11 @@ class App(QtCore.QObject): :return: None """ - self.log.debug("on_toolbar_replot()") - try: obj = self.collection.get_active() - if obj: - obj.read_form() - else: - self.on_zoom_fit() - except AttributeError as e: + obj.read_form() if obj else self.on_zoom_fit() + except Exception as e: self.log.debug("on_toolbar_replot() -> %s" % str(e)) - pass self.plot_all() @@ -7230,21 +7211,12 @@ class App(QtCore.QObject): """ self.pos = [] - if self.is_legacy is False: - event_pos = event.pos - # pan_button = 2 if self.defaults["global_pan_button"] == '2'else 3 - # # Set the mouse button for panning - # self.plotcanvas.view.camera.pan_button_setting = pan_button - else: - event_pos = (event.xdata, event.ydata) - # Matplotlib has the middle and right buttons mapped in reverse compared with VisPy - # pan_button = 3 if self.defaults["global_pan_button"] == '2' else 2 + event_pos = event.pos if self.use_3d_engine else (event.xdata, event.ydata) + self.pos_canvas = self.plotcanvas.translate_coords(event_pos) # So it can receive key presses self.plotcanvas.native.setFocus() - self.pos_canvas = self.plotcanvas.translate_coords(event_pos) - if self.grid_status(): self.pos = self.geo_editor.snap(self.pos_canvas[0], self.pos_canvas[1]) else: @@ -7276,20 +7248,14 @@ class App(QtCore.QObject): :return: None """ - if self.is_legacy is False: + if self.use_3d_engine: event_pos = event.pos - if self.defaults["global_pan_button"] == '2': - pan_button = 2 - else: - pan_button = 3 + pan_button = 2 if self.defaults["global_pan_button"] == '2' else 3 self.event_is_dragging = event.is_dragging else: event_pos = (event.xdata, event.ydata) # Matplotlib has the middle and right buttons mapped in reverse compared with VisPy - if self.defaults["global_pan_button"] == '2': - pan_button = 3 - else: - pan_button = 2 + pan_button = 3 if self.defaults["global_pan_button"] == '2' else 2 self.event_is_dragging = self.plotcanvas.is_dragging # So it can receive key presses but not when the Tcl Shell is active @@ -7409,7 +7375,7 @@ class App(QtCore.QObject): :return: """ - if self.is_legacy is False: + if self.use_3d_engine: event_pos = event.pos right_button = 2 else: @@ -7456,7 +7422,7 @@ class App(QtCore.QObject): return # WORKAROUND for LEGACY MODE - if self.is_legacy is True: + if self.use_3d_engine is False: # if there is no move on canvas then we have no dragging selection if self.dx == 0 or self.dy == 0: self.selection_type = None @@ -7886,7 +7852,7 @@ class App(QtCore.QObject): self.hover_shapes.add(hover_rect, color=outline, face_color=face, update=True, layer=0, tolerance=None) - if self.is_legacy is True: + if self.use_3d_engine is False: self.hover_shapes.redraw() def delete_selection_shape(self): @@ -7935,7 +7901,7 @@ class App(QtCore.QObject): face = color[:-2] + str(hex(int(0.2 * 255)))[2:] outline = color[:-2] + str(hex(int(0.8 * 255)))[2:] else: - if self.is_legacy is False: + if self.use_3d_engine: face = self.defaults['global_sel_fill'][:-2] + str(hex(int(0.2 * 255)))[2:] outline = self.defaults['global_sel_line'][:-2] + str(hex(int(0.8 * 255)))[2:] else: @@ -7948,7 +7914,7 @@ class App(QtCore.QObject): update=True, layer=0, tolerance=None)) - if self.is_legacy is True: + if self.use_3d_engine is False: self.move_tool.sel_shapes.redraw() def draw_moving_selection_shape(self, old_coords, coords, **kwargs): @@ -7992,7 +7958,7 @@ class App(QtCore.QObject): self.move_tool.sel_shapes.add(sel_rect, color=color, face_color=color_t, update=True, layer=0, tolerance=None) - if self.is_legacy is True: + if self.use_3d_engine is False: self.move_tool.sel_shapes.redraw() def obj_properties(self): @@ -8638,30 +8604,32 @@ class App(QtCore.QObject): self.log.debug("Setting up canvas: %s" % str(self.defaults["global_graphic_engine"])) - if self.is_legacy is True or modifier == QtCore.Qt.KeyboardModifier.ControlModifier: - self.is_legacy = True - plotcanvas = PlotCanvasLegacy(self) - if plotcanvas.status != 'ok': - return 'fail' - else: + if modifier == QtCore.Qt.KeyboardModifier.ControlModifier: + self.use_3d_engine = False + + if self.use_3d_engine: try: plotcanvas = PlotCanvas(self) except Exception as er: msg_txt = traceback.format_exc() self.log.error("App.on_plotcanvas_setup() failed -> %s" % str(er)) self.log.error("OpenGL canvas initialization failed with the following error.\n" + msg_txt) - msg = '[ERROR_NOTCL] %s' % _("An internal error has occurred. See shell.\n") + msg = '[ERROR] %s' % _("An internal error has occurred. See shell.\n") msg += _("OpenGL canvas initialization failed. HW or HW configuration not supported." "Change the graphic engine to Legacy(2D) in Edit -> Preferences -> General tab.\n\n") msg += msg_txt self.log.error(msg) self.inform.emit(msg) return 'fail' + else: + plotcanvas = PlotCanvasLegacy(self) + if plotcanvas.status != 'ok': + return 'fail' # So it can receive key presses plotcanvas.native.setFocus() - if self.is_legacy is False: + if self.use_3d_engine: pan_button = 2 if self.defaults["global_pan_button"] == '2' else 3 # Set the mouse button for panning plotcanvas.view.camera.pan_button_setting = pan_button @@ -8707,7 +8675,7 @@ class App(QtCore.QObject): :return: None """ - if self.is_legacy is False: + if self.use_3d_engine: self.plotcanvas.fit_view() else: xmin, ymin, xmax, ymax = self.collection.get_bounds() @@ -9564,7 +9532,7 @@ class MenuFileHandlers(QtCore.QObject): date = date.replace(' ', '_') data = None - if self.app.is_legacy is False: + if self.app.use_3d_engine: image = _screenshot(alpha=False) data = np.asarray(image) if not data.ndim == 3 and data.shape[-1] in (3, 4): @@ -9588,7 +9556,7 @@ class MenuFileHandlers(QtCore.QObject): self.inform.emit(_("Cancelled.")) return else: - if self.app.is_legacy is False: + if self.app.use_3d_engine: write_png(filename, data) else: self.app.plotcanvas.figure.savefig(filename) diff --git a/camlib.py b/camlib.py index 7e2668f9..5cb43534 100644 --- a/camlib.py +++ b/camlib.py @@ -545,7 +545,7 @@ class Geometry(object): self.old_disp_number = 0 self.el_count = 0 - if self.app.is_legacy is False: + if self.app.use_3d_engine: self.temp_shapes = self.app.plotcanvas.new_shape_collection(layers=1) else: from appGUI.PlotCanvasLegacy import ShapeCollectionLegacy @@ -6990,7 +6990,7 @@ class CNCjob(Geometry): return if visible is True: - if self.app.is_legacy is False: + if self.app.use_3d_engine: obj.annotation.clear(update=True) obj.text_col.visible = True else: @@ -7029,7 +7029,7 @@ class CNCjob(Geometry): color=new_color) except Exception as e: log.error("CNCJob.plot2() --> annotations --> %s" % str(e)) - if self.app.is_legacy is False: + if self.app.use_3d_engine: obj.annotation.clear(update=True) obj.annotation.redraw()