Merged in marius_stanciu/flatcam_beta/Beta (pull request #214)

Beta - adding new command line parameter --shellvars
This commit is contained in:
Marius Stanciu
2019-09-17 12:27:27 +00:00
5 changed files with 340 additions and 284 deletions

View File

@@ -60,11 +60,4 @@ if __name__ == '__main__':
fc = App() fc = App()
if settings.contains("maximized_gui"):
maximized_ui = settings.value('maximized_gui', type=bool)
if maximized_ui is True:
fc.ui.showMaximized()
else:
fc.ui.show()
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@@ -80,10 +80,14 @@ class App(QtCore.QObject):
# Get Cmd Line Options # Get Cmd Line Options
cmd_line_shellfile = '' cmd_line_shellfile = ''
cmd_line_help = "FlatCam.py --shellfile=<cmd_line_shellfile>" cmd_line_shellvars = ''
cmd_line_help = "FlatCam.py --shellfile=<cmd_line_shellfile>\nFlatCam.py --shellvars=<cmd_line_shellvars"
try: try:
# Multiprocessing pool will spawn additional processes with 'multiprocessing-fork' flag # Multiprocessing pool will spawn additional processes with 'multiprocessing-fork' flag
cmd_line_options, args = getopt.getopt(sys.argv[1:], "h:", ["shellfile=", "multiprocessing-fork="]) cmd_line_options, args = getopt.getopt(sys.argv[1:], "h:", ["shellfile=",
"shellvars=",
"multiprocessing-fork="])
except getopt.GetoptError: except getopt.GetoptError:
print(cmd_line_help) print(cmd_line_help)
sys.exit(2) sys.exit(2)
@@ -93,6 +97,8 @@ class App(QtCore.QObject):
sys.exit() sys.exit()
elif opt == '--shellfile': elif opt == '--shellfile':
cmd_line_shellfile = arg cmd_line_shellfile = arg
elif opt == '--shellvars':
cmd_line_shellvars = arg
# ## Logging ### # ## Logging ###
log = logging.getLogger('base') log = logging.getLogger('base')
@@ -1905,7 +1911,7 @@ class App(QtCore.QObject):
self.on_excellon_options_button) self.on_excellon_options_button)
# when there are arguments at application startup this get launched # when there are arguments at application startup this get launched
self.args_at_startup[list].connect(lambda: self.on_startup_args()) self.args_at_startup[list].connect(self.on_startup_args)
# connect the 'Apply' buttons from the Preferences/File Associations # connect the 'Apply' buttons from the Preferences/File Associations
self.ui.fa_defaults_form.fa_excellon_group.exc_list_btn.clicked.connect( self.ui.fa_defaults_form.fa_excellon_group.exc_list_btn.clicked.connect(
@@ -2406,7 +2412,26 @@ class App(QtCore.QObject):
except Exception as ext: except Exception as ext:
print("ERROR: ", ext) print("ERROR: ", ext)
sys.exit(2) sys.exit(2)
elif self.cmd_line_shellvars:
try:
with open(self.cmd_line_shellvars, "r") as myfile:
if show_splash:
self.splash.showMessage('%s: %ssec\n%s' % (
_("Canvas initialization started.\n"
"Canvas initialization finished in"), '%.2f' % self.used_time,
_("Reading Shell vars ...")),
alignment=Qt.AlignBottom | Qt.AlignLeft,
color=QtGui.QColor("gray"))
cmd_line_shellvars_text = myfile.read()
for line in cmd_line_shellvars_text.splitlines():
var, __, var_value = line.partition('=')
var = var.replace(' ', '')
var_value = var_value.replace(' ', '')
command_tcl = 'set {var} {var_value}'.format(var=var, var_value=var_value)
self.shell._sysShell.exec_command(command_tcl, no_echo=True)
except Exception as ext:
print("ERROR: ", ext)
sys.exit(2)
# accept some type file as command line parameter: FlatCAM project, FlatCAM preferences or scripts # accept some type file as command line parameter: FlatCAM project, FlatCAM preferences or scripts
# the path/file_name must be enclosed in quotes if it contain spaces # the path/file_name must be enclosed in quotes if it contain spaces
if App.args: if App.args:
@@ -2415,6 +2440,18 @@ class App(QtCore.QObject):
# finish the splash # finish the splash
self.splash.finish(self.ui) self.splash.finish(self.ui)
# #####################################################################################
# ########################## SHOW GUI #################################################
# #####################################################################################
settings = QSettings("Open Source", "FlatCAM")
if settings.contains("maximized_gui"):
maximized_ui = settings.value('maximized_gui', type=bool)
if maximized_ui is True:
self.ui.showMaximized()
else:
self.ui.show()
@staticmethod @staticmethod
def copy_and_overwrite(from_path, to_path): def copy_and_overwrite(from_path, to_path):
""" """
@@ -2433,14 +2470,15 @@ class App(QtCore.QObject):
from_new_path = os.path.dirname(os.path.realpath(__file__)) + '\\flatcamGUI\\VisPyData\\data' from_new_path = os.path.dirname(os.path.realpath(__file__)) + '\\flatcamGUI\\VisPyData\\data'
shutil.copytree(from_new_path, to_path) shutil.copytree(from_new_path, to_path)
def on_startup_args(self, args=None): def on_startup_args(self, args):
""" """
This will process any arguments provided to the application at startup. Like trying to launch a file or project. This will process any arguments provided to the application at startup. Like trying to launch a file or project.
:param args: a list containing the application args at startup :param args: a list containing the application args at startup
:return: None :return: None
""" """
if args:
if args is not None:
args_to_process = args args_to_process = args
else: else:
args_to_process = App.args args_to_process = App.args
@@ -2491,6 +2529,13 @@ class App(QtCore.QObject):
except Exception as e: except Exception as e:
log.debug("Could not open FlatCAM Script file as App parameter due: %s" % str(e)) log.debug("Could not open FlatCAM Script file as App parameter due: %s" % str(e))
elif 'quit' in argument or 'exit' in argument:
log.debug("App.on_startup_args() --> Quit event.")
sys.exit()
elif 'save' in argument:
log.debug("App.on_startup_args() --> Save event. App Defaults saved.")
self.save_defaults()
else: else:
exc_list = self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.get_value().split(',') exc_list = self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.get_value().split(',')
proc_arg = argument.lower() proc_arg = argument.lower()
@@ -3125,18 +3170,20 @@ class App(QtCore.QObject):
self.display_tcl_error(text) self.display_tcl_error(text)
raise self.TclErrorException(text) raise self.TclErrorException(text)
def exec_command(self, text, no_plot=None): def exec_command(self, text, no_echo=False):
""" """
Handles input from the shell. See FlatCAMApp.setup_shell for shell commands. Handles input from the shell. See FlatCAMApp.setup_shell for shell commands.
Also handles execution in separated threads Also handles execution in separated threads
:param text: FlatCAM TclCommand with parameters :param text: FlatCAM TclCommand with parameters
:param no_echo: If True it will not try to print to the Shell because most likely the shell is hidden and it
will create crashes of the _Expandable_Edit widget
:return: output if there was any :return: output if there was any
""" """
self.report_usage('exec_command') self.report_usage('exec_command')
result = self.exec_command_test(text, False) result = self.exec_command_test(text, False, no_echo=no_echo)
# MS: added this method call so the geometry is updated once the TCL command is executed # MS: added this method call so the geometry is updated once the TCL command is executed
# if no_plot is None: # if no_plot is None:
@@ -3144,34 +3191,39 @@ class App(QtCore.QObject):
return result return result
def exec_command_test(self, text, reraise=True): def exec_command_test(self, text, reraise=True, no_echo=False):
""" """
Same as exec_command(...) with additional control over exceptions. Same as exec_command(...) with additional control over exceptions.
Handles input from the shell. See FlatCAMApp.setup_shell for shell commands. Handles input from the shell. See FlatCAMApp.setup_shell for shell commands.
:param text: Input command :param text: Input command
:param reraise: Re-raise TclError exceptions in Python (mostly for unitttests). :param reraise: Re-raise TclError exceptions in Python (mostly for unitttests).
:param no_echo: If True it will not try to print to the Shell because most likely the shell is hidden and it
will create crashes of the _Expandable_Edit widget
:return: Output from the command :return: Output from the command
""" """
tcl_command_string = str(text) tcl_command_string = str(text)
try: try:
if no_echo is False:
self.shell.open_proccessing() # Disables input box. self.shell.open_proccessing() # Disables input box.
result = self.tcl.eval(str(tcl_command_string)) result = self.tcl.eval(str(tcl_command_string))
if result != 'None': if result != 'None' and no_echo is False:
self.shell.append_output(result + '\n') self.shell.append_output(result + '\n')
except tk.TclError as e: except tk.TclError as e:
# This will display more precise answer if something in TCL shell fails # This will display more precise answer if something in TCL shell fails
result = self.tcl.eval("set errorInfo") result = self.tcl.eval("set errorInfo")
self.log.error("Exec command Exception: %s" % (result + '\n')) self.log.error("Exec command Exception: %s" % (result + '\n'))
if no_echo is False:
self.shell.append_error('ERROR: ' + result + '\n') self.shell.append_error('ERROR: ' + result + '\n')
# Show error in console and just return or in test raise exception # Show error in console and just return or in test raise exception
if reraise: if reraise:
raise e raise e
finally: finally:
if no_echo is False:
self.shell.close_proccessing() self.shell.close_proccessing()
pass pass
return result return result

View File

@@ -15,6 +15,9 @@ CAD program, and create G-Code for Isolation routing.
- fixed issue #315 where a script run with the --shellfile argument crashed the program if it contained a TclCommand New - fixed issue #315 where a script run with the --shellfile argument crashed the program if it contained a TclCommand New
- added messages in the Splash Screen when running FlatCAM with arguments at startup - added messages in the Splash Screen when running FlatCAM with arguments at startup
- fixed issue #313 where TclCommand drillcncjob is spitting errors in Tcl Shell which should be ignored - fixed issue #313 where TclCommand drillcncjob is spitting errors in Tcl Shell which should be ignored
- fixed an bug where the pywrapcp name from Google OR-Tools is not defined; fix issue #316
- if FlatCAM is started with the 'quit' or 'exit' as argument it will close immediately and it will close also another instance of FlatCAM that may be running
- added a new command line parameter for FlatCAM named '--shellvars' which can load a text file with variables for Tcl Shell in the format: one variable assignment per line and looking like: 'a=3' without quotes
16.09.2019 16.09.2019

View File

@@ -5868,7 +5868,10 @@ class CNCjob(Geometry):
self.app.inform.emit('%s...' % self.app.inform.emit('%s...' %
_("Starting G-Code")) _("Starting G-Code"))
if excellon_optimization_type == 'M': current_platform = platform.architecture()[0]
if current_platform == '64bit':
used_excellon_optimization_type = excellon_optimization_type
if used_excellon_optimization_type == 'M':
log.debug("Using OR-Tools Metaheuristic Guided Local Search drill path optimization.") log.debug("Using OR-Tools Metaheuristic Guided Local Search drill path optimization.")
if exobj.drills: if exobj.drills:
for tool in tools: for tool in tools:
@@ -6028,7 +6031,8 @@ class CNCjob(Geometry):
return 'fail' return 'fail'
log.debug("The total travel distance with OR-TOOLS Metaheuristics is: %s" % str(measured_distance)) log.debug("The total travel distance with OR-TOOLS Metaheuristics is: %s" % str(measured_distance))
elif excellon_optimization_type == 'B':
if used_excellon_optimization_type == 'B':
log.debug("Using OR-Tools Basic drill path optimization.") log.debug("Using OR-Tools Basic drill path optimization.")
if exobj.drills: if exobj.drills:
for tool in tools: for tool in tools:
@@ -6175,6 +6179,9 @@ class CNCjob(Geometry):
log.debug("The total travel distance with OR-TOOLS Basic Algorithm is: %s" % str(measured_distance)) log.debug("The total travel distance with OR-TOOLS Basic Algorithm is: %s" % str(measured_distance))
else: else:
used_excellon_optimization_type = 'T'
if used_excellon_optimization_type == 'T':
log.debug("Using Travelling Salesman drill path optimization.") log.debug("Using Travelling Salesman drill path optimization.")
for tool in tools: for tool in tools:
if self.app.abort_flag: if self.app.abort_flag:

View File

@@ -1 +1,2 @@
portable=False portable=False
headless=False