diff --git a/src/Mod/Fem/femguiobjects/_ViewProviderFemSolverCalculix.py b/src/Mod/Fem/femguiobjects/_ViewProviderFemSolverCalculix.py index afe3815a2f..ffc09bffac 100644 --- a/src/Mod/Fem/femguiobjects/_ViewProviderFemSolverCalculix.py +++ b/src/Mod/Fem/femguiobjects/_ViewProviderFemSolverCalculix.py @@ -121,11 +121,9 @@ class _TaskPanelFemSolverCalculix: else: self.CalculixBinary = 'ccx' - self.solver_object = solver_object - fea = ccxtools.FemToolsCcx(None, self.solver_object) - fea.setup_working_dir() - self.working_dir = fea.working_dir - # TODO: switch to one self.fea in all task panel defs + # since open the task panel is only possible with an active analysis, we do not need to pass the analysis. it will be found + self.fea = ccxtools.FemToolsCcx(None, solver_object) + self.fea.setup_working_dir() self.Calculix = QtCore.QProcess() self.Timer = QtCore.QTimer() @@ -161,12 +159,12 @@ class _TaskPanelFemSolverCalculix: def update(self): 'fills the widgets' - self.form.le_working_dir.setText(self.working_dir) - if self.solver_object.AnalysisType == 'static': + self.form.le_working_dir.setText(self.fea.working_dir) + if self.fea.solver.AnalysisType == 'static': self.form.rb_static_analysis.setChecked(True) - elif self.solver_object.AnalysisType == 'frequency': + elif self.fea.solver.AnalysisType == 'frequency': self.form.rb_frequency_analysis.setChecked(True) - elif self.solver_object.AnalysisType == 'thermomech': + elif self.fea.solver.AnalysisType == 'thermomech': self.form.rb_thermomech_analysis.setChecked(True) return @@ -251,15 +249,14 @@ class _TaskPanelFemSolverCalculix: self.form.pb_run_ccx.setText("Re-run CalculiX") self.femConsoleMessage("Loading result sets...") self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start)) - fea = ccxtools.FemToolsCcx(None, self.solver_object) - fea.reset_mesh_purge_results_checked() - fea.inp_file_name = self.inp_file_name + self.fea.reset_mesh_purge_results_checked() + self.fea.inp_file_name = self.fea.inp_file_name QApplication.setOverrideCursor(Qt.WaitCursor) try: - fea.load_results() + self.fea.load_results() except: QApplication.restoreOverrideCursor() - majorVersion, minorVersion = fea.get_ccx_version() + majorVersion, minorVersion = self.fea.get_ccx_version() if majorVersion == 2 and minorVersion <= 10: message = "The used CalculiX version {}.{} creates broken output files.\n" \ "Please upgrade to a newer version.".format(majorVersion, minorVersion) @@ -270,13 +267,11 @@ class _TaskPanelFemSolverCalculix: self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start)) def choose_working_dir(self): - current_wd = self.setup_working_dir() wd = QtGui.QFileDialog.getExistingDirectory(None, 'Choose CalculiX working directory', - current_wd) - if not (os.path.isdir(wd)): - wd = current_wd - self.working_dir = wd - self.form.le_working_dir.setText(wd) + self.fea.working_dir) + if os.path.isdir(wd): + self.fea.setup_working_dir(wd) + self.form.le_working_dir.setText(self.fea.working_dir) def write_input_file_handler(self): self.Start = time.time() @@ -284,13 +279,8 @@ class _TaskPanelFemSolverCalculix: QApplication.restoreOverrideCursor() if self.check_prerequisites_helper(): QApplication.setOverrideCursor(Qt.WaitCursor) - self.inp_file_name = "" - fea = ccxtools.FemToolsCcx(None, self.solver_object) - fea.update_objects() - fea.setup_working_dir(self.working_dir) # we made a new fea which sets the working dir, but we the one from task panel - fea.write_inp_file() - if fea.inp_file_name != "": - self.inp_file_name = fea.inp_file_name + self.fea.write_inp_file() + if self.fea.inp_file_name != "": self.femConsoleMessage("Write completed.") self.form.pb_edit_inp.setEnabled(True) self.form.pb_run_ccx.setEnabled(True) @@ -304,9 +294,8 @@ class _TaskPanelFemSolverCalculix: self.femConsoleMessage("Check dependencies...") self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start)) - fea = ccxtools.FemToolsCcx(None, self.solver_object) - fea.update_objects() - message = fea.check_prerequisites() + self.fea.update_objects() + message = self.fea.check_prerequisites() if message != "": QtGui.QMessageBox.critical(None, "Missing prerequisite(s)", message) return False @@ -319,16 +308,16 @@ class _TaskPanelFemSolverCalculix: self.ext_editor_process.start(ext_editor_path, [filename]) def editCalculixInputFile(self): - print('editCalculixInputFile {}'.format(self.inp_file_name)) + print('editCalculixInputFile {}'.format(self.fea.inp_file_name)) if self.ccx_prefs.GetBool("UseInternalEditor", True): - FemGui.open(self.inp_file_name) + FemGui.open(self.fea.inp_file_name) else: ext_editor_path = self.ccx_prefs.GetString("ExternalEditorPath", "") if ext_editor_path: - self.start_ext_editor(ext_editor_path, self.inp_file_name) + self.start_ext_editor(ext_editor_path, self.fea.inp_file_name) else: print("External editor is not defined in FEM preferences. Falling back to internal editor") - FemGui.open(self.inp_file_name) + FemGui.open(self.fea.inp_file_name) def runCalculix(self): print('runCalculix') @@ -338,19 +327,19 @@ class _TaskPanelFemSolverCalculix: self.femConsoleMessage("Run CalculiX...") # run Calculix - print('run CalculiX at: {} with: {}'.format(self.CalculixBinary, os.path.splitext(self.inp_file_name)[0])) + print('run CalculiX at: {} with: {}'.format(self.CalculixBinary, os.path.splitext(self.fea.inp_file_name)[0])) # change cwd because ccx may crash if directory has no write permission # there is also a limit of the length of file names so jump to the document directory self.cwd = QtCore.QDir.currentPath() - fi = QtCore.QFileInfo(self.inp_file_name) + fi = QtCore.QFileInfo(self.fea.inp_file_name) QtCore.QDir.setCurrent(fi.path()) self.Calculix.start(self.CalculixBinary, ['-i', fi.baseName()]) QApplication.restoreOverrideCursor() def select_analysis_type(self, analysis_type): - if self.solver_object.AnalysisType != analysis_type: - self.solver_object.AnalysisType = analysis_type + if self.fea.solver.AnalysisType != analysis_type: + self.fea.solver.AnalysisType = analysis_type self.form.pb_edit_inp.setEnabled(False) self.form.pb_run_ccx.setEnabled(False) @@ -362,16 +351,3 @@ class _TaskPanelFemSolverCalculix: def select_thermomech_analysis(self): self.select_analysis_type('thermomech') - - # That function overlaps with ccxtools setup_working_dir and could be removed when the one from ccxtools would be used - def setup_working_dir(self): - wd = self.working_dir - if not (os.path.isdir(wd)): - try: - os.makedirs(wd) - except: - print("Dir \'{}\' from FEM preferences doesn't exist and cannot be created.".format(wd)) - import tempfile - wd = tempfile.gettempdir() - print("Dir \'{}\' will be used instead.".format(wd)) - return wd