From c409df0a8e728455601b1e040dcaf14ad7387f5d Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sun, 2 Jun 2019 14:04:14 +0300 Subject: [PATCH] - fixed issue with geometry name not being updated immediately after change while doing geocutout TclCommand - some changes to enable/disable project context menu entry handlers --- FlatCAMApp.py | 104 ++++++++++------------------- FlatCAMObj.py | 1 - README.md | 5 ++ tclCommands/TclCommandCutout.py | 2 +- tclCommands/TclCommandGeoCutout.py | 3 +- 5 files changed, 43 insertions(+), 72 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index a5898ee7..c94f0052 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -1404,8 +1404,8 @@ class App(QtCore.QObject): self.ui.menuhelp_videohelp.triggered.connect(lambda: webbrowser.open(self.video_url)) self.ui.menuhelp_shortcut_list.triggered.connect(self.on_shortcut_list) - self.ui.menuprojectenable.triggered.connect(lambda: self.enable_plots(self.collection.get_selected())) - self.ui.menuprojectdisable.triggered.connect(lambda: self.disable_plots(self.collection.get_selected())) + self.ui.menuprojectenable.triggered.connect(self.on_enable_sel_plots) + self.ui.menuprojectdisable.triggered.connect(self.on_disable_sel_plots) self.ui.menuprojectgeneratecnc.triggered.connect(lambda: self.generate_cnc_job(self.collection.get_selected())) self.ui.menuprojectviewsource.triggered.connect(self.on_view_source) @@ -5159,7 +5159,6 @@ class App(QtCore.QObject): :return: None """ - # self.plotcanvas.auto_adjust_axes() self.plotcanvas.vispy_canvas.update() # TODO: Need update canvas? self.on_zoom_fit(None) self.collection.update_view() @@ -8278,85 +8277,52 @@ The normal flow when working in FlatCAM is the following:

self.enable_plots(self.collection.get_list()) self.inform.emit(_("[success] All plots enabled.")) - # TODO: FIX THIS - ''' - By default this is not threaded - If threaded the app give warnings like this: - - QObject::connect: Cannot queue arguments of type 'QVector' - (Make sure 'QVector' is registered using qRegisterMetaType(). - ''' - def enable_plots(self, objects, threaded=True): - if threaded is True: - def worker_task(app_obj): - # percentage = 0.1 - # try: - # delta = 0.9 / len(objects) - # except ZeroDivisionError: - # self.progress.emit(0) - # return - for obj in objects: - obj.options['plot'] = True - # percentage += delta - # self.progress.emit(int(percentage*100)) + def on_enable_sel_plots(self): + object_list = self.collection.get_selected() + self.enable_plots(objects=object_list) + self.inform.emit(_("[success] Selected plots enabled...")) - # self.progress.emit(0) - self.plots_updated.emit() - # self.collection.update_view() + def on_disable_sel_plots(self): + # self.inform.emit(_("Disabling plots ...")) + object_list = self.collection.get_selected() + self.disable_plots(objects=object_list) + self.inform.emit(_("[success] Selected plots disabled...")) - # Send to worker - # self.worker.add_task(worker_task, [self]) - self.worker_task.emit({'fcn': worker_task, 'params': [self]}) - else: - for obj in objects: - obj.options['plot'] = True - # self.progress.emit(0) - self.plots_updated.emit() - # self.collection.update_view() - - # TODO: FIX THIS - ''' - By default this is not threaded - If threaded the app give warnings like this: - - QObject::connect: Cannot queue arguments of type 'QVector' - (Make sure 'QVector' is registered using qRegisterMetaType(). - ''' - def disable_plots(self, objects, threaded=True): - # TODO: This method is very similar to replot_all. Try to merge. + def enable_plots(self, objects): """ Disables plots - :param objects: list - Objects to be disabled + :param objects: list of Objects to be enabled :return: """ - if threaded is True: - # self.progress.emit(10) - def worker_task(app_obj): - # percentage = 0.1 - # try: - # delta = 0.9 / len(objects) - # except ZeroDivisionError: - # self.progress.emit(0) - # return + log.debug("Enabling plots ...") - for obj in objects: - obj.options['plot'] = False - # percentage += delta - # self.progress.emit(int(percentage*100)) + def worker_task(app_obj): + # app_obj.inform.emit(_("Enabling plots ...")) + for obj in objects: + obj.options['plot'] = True + self.plots_updated.emit() - # self.progress.emit(0) - self.plots_updated.emit() - # self.collection.update_view() + # Send to worker + self.worker_task.emit({'fcn': worker_task, 'params': [self]}) - # Send to worker - self.worker_task.emit({'fcn': worker_task, 'params': [self]}) - else: + def disable_plots(self, objects): + """ + Disables plots + :param objects: list of Objects to be disabled + :return: + """ + + log.debug("Disabling plots ...") + + def worker_task(app_obj): + self.inform.emit(_("Disabling plots ...")) for obj in objects: obj.options['plot'] = False self.plots_updated.emit() - # self.collection.update_view() + + # Send to worker + self.worker_task.emit({'fcn': worker_task, 'params': [self]}) def clear_plots(self): diff --git a/FlatCAMObj.py b/FlatCAMObj.py index 7d705cd1..21c9705d 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -137,7 +137,6 @@ class FlatCAMObj(QtCore.QObject): if key == 'plot': self.visible = self.options['plot'] - # self.emit(QtCore.SIGNAL("optionChanged"), key) self.optionChanged.emit(key) def set_ui(self, ui): diff --git a/README.md b/README.md index bbbadd2e..ceaf70b8 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,11 @@ CAD program, and create G-Code for Isolation routing. ================================================= +2.06.2019 + +- fixed issue with geometry name not being updated immediately after change while doing geocutout TclCommand +- some changes to enable/disable project context menu entry handlers + 1.06.2019 - fixed text annotation for CNC job so there are no overlapping numbers when 2 lines meet on the same point diff --git a/tclCommands/TclCommandCutout.py b/tclCommands/TclCommandCutout.py index ce1c26d7..49bb5440 100644 --- a/tclCommands/TclCommandCutout.py +++ b/tclCommands/TclCommandCutout.py @@ -120,7 +120,7 @@ class TclCommandCutout(TclCommand): geo_obj.solid_geometry = cascaded_union([LineString(segment) for segment in cuts]) try: - obj.app.new_object("geometry", name + "_cutout", geo_init_me) + self.app.new_object("geometry", name + "_cutout", geo_init_me) self.app.inform.emit("[success] Rectangular-form Cutout operation finished.") except Exception as e: return "Operation failed: %s" % str(e) diff --git a/tclCommands/TclCommandGeoCutout.py b/tclCommands/TclCommandGeoCutout.py index bf370086..076d037e 100644 --- a/tclCommands/TclCommandGeoCutout.py +++ b/tclCommands/TclCommandGeoCutout.py @@ -221,6 +221,7 @@ class TclCommandGeoCutout(TclCommandSignaled): cutout_obj.plot() self.app.inform.emit("[success] Any-form Cutout operation finished.") + self.app.plots_updated.emit() elif isinstance(cutout_obj, FlatCAMGerber): def geo_init(geo_obj, app_obj): @@ -267,7 +268,7 @@ class TclCommandGeoCutout(TclCommandSignaled): ymin - gapsize, px + gapsize, ymax + gapsize) - geo_obj.solid_geometry = geo + geo_obj.solid_geometry = deepcopy(geo) outname = cutout_obj.options["name"] + "_cutout" self.app.new_object('geometry', outname, geo_init)