From 6bd837f928bbcee2ce08de031e4c2ecced5e64aa Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Thu, 21 Mar 2019 09:23:46 +0100 Subject: [PATCH] FEM: ccx tools, use working dir prefs from solver framework --- src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui | 101 +++++-------------- src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp | 4 +- src/Mod/Fem/femtools/ccxtools.py | 71 ++++++------- src/Mod/Fem/femtools/femutils.py | 2 +- 4 files changed, 63 insertions(+), 115 deletions(-) diff --git a/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui b/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui index 8a7928d8db..3f5c05b667 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui +++ b/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui @@ -22,82 +22,6 @@ - - - - - 0 - 0 - - - - Qt::LeftToRight - - - Working directory for ccx tools solver only - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - QLayout::SetNoConstraint - - - - - - - - - true - - - - 0 - 0 - - - - - 0 - 0 - - - - WorkingDir - - - Gui::FileChooser::Directory - - - Mod/Fem/General - - - - - - - true - - - - 100 - 0 - - - - Use custom directory - - - - - - - - - - @@ -107,7 +31,7 @@ - Working directory for all frame work solver + Working directory for solving analysis @@ -312,6 +236,29 @@ + + + + + + Qt::LeftToRight + + + Overwrite solver working directory with the directory choosen above + + + true + + + OverwriteSolverWorkingDirectory + + + Mod/Fem/General + + + + + diff --git a/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp index 46c0b3a406..adff4b55ce 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp +++ b/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp @@ -44,7 +44,6 @@ DlgSettingsFemGeneralImp::~DlgSettingsFemGeneralImp() void DlgSettingsFemGeneralImp::saveSettings() { - fc_analysis_working_directory->onSave(); cb_analysis_group_meshing->onSave(); @@ -56,11 +55,11 @@ void DlgSettingsFemGeneralImp::saveSettings() cb_wd_beside->onSave(); cb_wd_custom->onSave(); le_wd_custom->onSave(); + cb_overwrite_solver_working_directory->onSave(); } void DlgSettingsFemGeneralImp::loadSettings() { - fc_analysis_working_directory->onRestore(); cb_analysis_group_meshing->onRestore(); @@ -72,6 +71,7 @@ void DlgSettingsFemGeneralImp::loadSettings() cb_wd_beside->onRestore(); cb_wd_custom->onRestore(); le_wd_custom->onRestore(); + cb_overwrite_solver_working_directory->onRestore(); } /** diff --git a/src/Mod/Fem/femtools/ccxtools.py b/src/Mod/Fem/femtools/ccxtools.py index 074131f5ff..0adc5d4b59 100644 --- a/src/Mod/Fem/femtools/ccxtools.py +++ b/src/Mod/Fem/femtools/ccxtools.py @@ -456,54 +456,55 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject): if inp_file_name is not None: self.inp_file_name = inp_file_name else: - # self.working_dir does have a slash at the end - self.inp_file_name = self.working_dir + self.base_name + '.inp' + self.inp_file_name = os.path.join(self.working_dir, (self.base_name + '.inp')) ## Sets working dir for solver execution. Called with no working_dir uses WorkingDir from FEM preferences # @param self The python object self - # @working_dir directory to be used for writing solver input file or files and executing solver - def setup_working_dir(self, working_dir=None): - if working_dir is not None: - self.working_dir = working_dir + # param_working_dir directory to be used for writing solver input file or files and executing solver + def setup_working_dir(self, param_working_dir=None, create=False): + self.working_dir = '' + # try to use given working dir or overwrite with solver working dir + fem_general_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem/General") + if param_working_dir is not None: + self.working_dir = param_working_dir + if self.check_working_dir() is not True: + if create is True: + FreeCAD.Console.PrintMessage("Dir given as parameter \'{}\' doesn't exist.\n".format(self.working_dir)) + pass + else: + FreeCAD.Console.PrintError("Dir given as parameter \'{}\' doesn't exist and create parameter is set to False.\n".format(self.working_dir)) + self.working_dir = femutils.get_pref_working_dir(self.solver) + FreeCAD.Console.PrintMessage("Dir \'{}\' will be used instead.\n".format(self.working_dir)) + elif fem_general_prefs.GetBool("OverwriteSolverWorkingDirectory", True) is False: + self.working_dir = self.solver.WorkingDir + if self.check_working_dir() is not True: + FreeCAD.Console.PrintError("Dir from solver object \'{}\' doesn't exist.\n".format(self.working_dir)) + self.working_dir = femutils.get_pref_working_dir(self.solver) + FreeCAD.Console.PrintMessage("Dir \'{}\' will be used instead.\n".format(self.working_dir)) else: - self.working_dir = '' - self.fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem/General") - if self.fem_prefs.GetString("WorkingDir"): # if working dir in prefs is not empty - if self.solver.WorkingDir != '': - # we use error message to get it red, but it is not an error - FreeCAD.Console.PrintError('The solver working directory will be overwritten by the FEM preferences working dir.\n') - try: - self.working_dir = self.fem_prefs.GetString("WorkingDir") - except: - FreeCAD.Console.PrintError('Could not set working directory to FEM Preferences working directory.\n') - else: - FreeCAD.Console.PrintMessage('FEM preferences working dir setting is empty, the solver working directory is used.\n') - if self.solver.WorkingDir: - try: - self.working_dir = self.solver.WorkingDir - except: - FreeCAD.Console.PrintError('Could not set working directory to solver working directory.\n') + self.working_dir = femutils.get_pref_working_dir(self.solver) # check working_dir exist, if not use a tmp dir and inform the user - use_tmp_dir = False - if self.working_dir == '': - FreeCAD.Console.PrintError("All working Dir settings are empty: \'{}\'.\n".format(self.working_dir)) - use_tmp_dir = True - if not (os.path.isdir(self.working_dir)): - FreeCAD.Console.PrintError("Working directory: \'{}\' doesn't exist.\n".format(self.working_dir)) - use_tmp_dir = True - if use_tmp_dir is True: - from tempfile import gettempdir - self.working_dir = gettempdir() + if self.check_working_dir() is not True: + FreeCAD.Console.PrintError("Dir \'{}\' doesn't exist or cannot be created.\n".format(self.working_dir)) + from femsolver.run import _getTempDir + self.working_dir = _getTempDir(self.solver) FreeCAD.Console.PrintMessage("Dir \'{}\' will be used instead.\n".format(self.working_dir)) - FreeCAD.Console.PrintMessage('FemToolsCCx.setup_working_dir() --> self.working_dir = ' + self.working_dir + '\n') - # check working_dir has a slash at the end, if not add one + # check working_dir has a slash at the end, if not add one, needed for inp writer self.working_dir = os.path.join(self.working_dir, '') # Update inp file name self.set_inp_file_name() + def check_working_dir(self): + # check if working_dir exist, if not use a tmp dir and inform the user + # print(self.working_dir) + if os.path.isdir(self.working_dir): + return True + else: + return False + def write_inp_file(self): import femsolver.calculix.writer as iw self.inp_file_name = "" diff --git a/src/Mod/Fem/femtools/femutils.py b/src/Mod/Fem/femtools/femutils.py index efd2732b04..3bb66833fb 100644 --- a/src/Mod/Fem/femtools/femutils.py +++ b/src/Mod/Fem/femtools/femutils.py @@ -129,7 +129,7 @@ def is_derived_from(obj, t): # working dir -def get_pref_working_dir(): +def get_pref_working_dir(solver_obj): # _dirTypes from run are not used # be aware beside could get an error if the document has not been saved from femsolver import settings