From 1b14e9d4510d1f76fdbbc003472006da339e4c77 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 13 Apr 2020 20:04:44 +0300 Subject: [PATCH] - updated the App.plot_all() method giving it the possibility to be run as threaded or not - updated the Tcl command PlotAll to be able to run threaded or not --- FlatCAMApp.py | 15 ++++++++++----- README.md | 2 ++ tclCommands/TclCommandDelete.py | 8 +++++--- tclCommands/TclCommandPlotAll.py | 16 +++++++++++----- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 1d4dde99..5d895528 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -11888,11 +11888,13 @@ class App(QtCore.QObject): if silent is False: self.log.debug(" " + param + " OK!") - def plot_all(self, zoom=True): + def plot_all(self, fit_view=True, use_thread=True): """ Re-generates all plots from all objects. - :return: None + :param fit_view: if True will plot the objects and will adjust the zoom to fit all plotted objects into view + :param use_thread: if True will use threading for plotting the objects + :return: """ self.log.debug("Plot_all()") self.inform.emit('[success] %s...' % _("Redrawing all objects")) @@ -11901,11 +11903,14 @@ class App(QtCore.QObject): def worker_task(obj): with self.proc_container.new("Plotting"): obj.plot(kind=self.defaults["cncjob_plot_kind"]) - if zoom: + if fit_view is True: self.object_plotted.emit(obj) - # Send to worker - self.worker_task.emit({'fcn': worker_task, 'params': [obj]}) + if use_thread is True: + # Send to worker + self.worker_task.emit({'fcn': worker_task, 'params': [obj]}) + else: + worker_task(obj) def register_folder(self, filename): self.defaults["global_last_folder"] = os.path.split(str(filename))[0] diff --git a/README.md b/README.md index 2b0ed24a..c10a265e 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ CAD program, and create G-Code for Isolation routing. - multiple fixes in the Tcl commands (especially regarding the interchange between True/false and 1/0 values) - updated the help for all Tcl Commands - in Tcl Shell, the 'help' command will add also a brief description for each command in the list +- updated the App.plot_all() method giving it the possibility to be run as threaded or not +- updated the Tcl command PlotAll to be able to run threaded or not 11.04.2020 diff --git a/tclCommands/TclCommandDelete.py b/tclCommands/TclCommandDelete.py index 1c482598..339a1120 100644 --- a/tclCommands/TclCommandDelete.py +++ b/tclCommands/TclCommandDelete.py @@ -23,7 +23,7 @@ class TclCommandDelete(TclCommand): # Dictionary of types from Tcl command, needs to be ordered , this is for options like -optionname value option_types = collections.OrderedDict([ - ('f', bool) + ('f', str) ]) # array of mandatory options for current Tcl command: required = {'name','outname'} @@ -34,7 +34,9 @@ class TclCommandDelete(TclCommand): 'main': 'Deletes the given object. If no name is given will delete all objects.', 'args': collections.OrderedDict([ ('name', 'Name of the Object.'), - ('f', 'Use this parameter to force deletion.') + ('f', 'Use this parameter to force deletion.\n' + 'Can be used without value which will be auto assumed to be True.\n' + 'Or it can have a value: True (1) or False (0).') ]), 'examples': ['del new_geo -f True\n' 'delete new_geo -f 1\n' @@ -63,7 +65,7 @@ class TclCommandDelete(TclCommand): if args['f'] is None: is_forced = True else: - is_forced = True if eval(str(args['f'])) else False + is_forced = True if bool(eval(str(args['f']))) else False except KeyError: is_forced = True diff --git a/tclCommands/TclCommandPlotAll.py b/tclCommands/TclCommandPlotAll.py index 8efae5fb..d4194f4f 100644 --- a/tclCommands/TclCommandPlotAll.py +++ b/tclCommands/TclCommandPlotAll.py @@ -1,9 +1,9 @@ -from tclCommands.TclCommand import TclCommand +from tclCommands.TclCommand import TclCommandSignaled import collections -class TclCommandPlotAll(TclCommand): +class TclCommandPlotAll(TclCommandSignaled): """ Tcl shell command to update the plot on the user interface. @@ -23,7 +23,7 @@ class TclCommandPlotAll(TclCommand): # Dictionary of types from Tcl command, needs to be ordered , this is for options like -optionname value option_types = collections.OrderedDict([ - + ('use_thread', str) ]) # array of mandatory options for current Tcl command: required = {'name','outname'} @@ -33,7 +33,7 @@ class TclCommandPlotAll(TclCommand): help = { 'main': "Plots all objects on GUI.", 'args': collections.OrderedDict([ - + ('use_thread', 'If to use multithreading: True (1) or False (0).') ]), 'examples': ['plot_all'] } @@ -45,5 +45,11 @@ class TclCommandPlotAll(TclCommand): :param unnamed_args: :return: """ + + if 'use_thread' in args: + threaded = bool(eval(args['use_thread'])) + else: + threaded = False + if self.app.cmd_line_headless != 1: - self.app.plot_all() + self.app.plot_all(use_thread=threaded)