From e84dd55788e700583f306729a632ea5c1fb77fb3 Mon Sep 17 00:00:00 2001 From: Przemo Firszt Date: Fri, 5 Jun 2015 19:24:44 +0100 Subject: [PATCH] FEM: Fix and activate setting working directory for Calculix Also add FEM preferences option to define working ccx directory Signed-off-by: Przemo Firszt --- src/Mod/Fem/Gui/DlgSettingsFem.ui | 44 +++++++++++++++++++++++++++ src/Mod/Fem/Gui/DlgSettingsFemImp.cpp | 2 ++ src/Mod/Fem/MechanicalAnalysis.py | 22 ++++++++------ src/Mod/Fem/MechanicalAnalysis.ui | 8 ++--- src/Mod/Fem/ccxInpWriter.py | 6 ++-- 5 files changed, 67 insertions(+), 15 deletions(-) diff --git a/src/Mod/Fem/Gui/DlgSettingsFem.ui b/src/Mod/Fem/Gui/DlgSettingsFem.ui index 0469d81c14..dd09ea3294 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFem.ui +++ b/src/Mod/Fem/Gui/DlgSettingsFem.ui @@ -142,6 +142,50 @@ + + + + true + + + + 100 + 0 + + + + Working directory + + + + + + + true + + + + 0 + 0 + + + + + 0 + 0 + + + + Gui::FileChooser::Directory + + + WorkingDir + + + Mod/Fem + + + diff --git a/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp index dba1a46c8d..1fd363d3de 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp +++ b/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp @@ -43,6 +43,7 @@ DlgSettingsFemImp::~DlgSettingsFemImp() void DlgSettingsFemImp::saveSettings() { + fc_ccx_working_directory->onSave(); cb_int_editor->onSave(); fc_ext_editor->onSave(); fc_ccx_binary->onSave(); @@ -54,6 +55,7 @@ void DlgSettingsFemImp::saveSettings() void DlgSettingsFemImp::loadSettings() { + fc_ccx_working_directory->onRestore(); cb_int_editor->onRestore(); fc_ext_editor->onRestore(); fc_ccx_binary->onRestore(); diff --git a/src/Mod/Fem/MechanicalAnalysis.py b/src/Mod/Fem/MechanicalAnalysis.py index bf1b4d3221..61bb9d7134 100644 --- a/src/Mod/Fem/MechanicalAnalysis.py +++ b/src/Mod/Fem/MechanicalAnalysis.py @@ -247,6 +247,8 @@ class _JobControlTaskPanel: self.CalculixBinary = FreeCAD.getHomePath() + 'bin/ccx.exe' else: self.CalculixBinary = 'ccx' + self.fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem") + self.working_dir = self.fem_prefs.GetString("WorkingDir", '/tmp') self.obj = object self.Calculix = QtCore.QProcess() @@ -256,7 +258,7 @@ class _JobControlTaskPanel: self.fem_console_message = '' #Connect Signals and Slots - QtCore.QObject.connect(self.form.toolButton_chooseOutputDir, QtCore.SIGNAL("clicked()"), self.chooseOutputDir) + QtCore.QObject.connect(self.form.tb_choose_working_dir, QtCore.SIGNAL("clicked()"), self.choose_working_dir) QtCore.QObject.connect(self.form.pushButton_write, QtCore.SIGNAL("clicked()"), self.write_input_file_handler) QtCore.QObject.connect(self.form.pushButton_edit, QtCore.SIGNAL("clicked()"), self.editCalculixInputFile) QtCore.QObject.connect(self.form.pushButton_generate, QtCore.SIGNAL("clicked()"), self.runCalculix) @@ -351,7 +353,7 @@ class _JobControlTaskPanel: def update(self): 'fills the widgets' - self.form.lineEdit_outputDir.setText(tempfile.gettempdir()) + self.form.le_working_dir.setText(self.working_dir) return def accept(self): @@ -360,12 +362,14 @@ class _JobControlTaskPanel: def reject(self): FreeCADGui.Control.closeDialog() - def chooseOutputDir(self): - print "chooseOutputDir" - dirname = QtGui.QFileDialog.getExistingDirectory(None, 'Choose material directory', self.params.GetString("JobDir", '/')) - if(dirname): - self.params.SetString("JobDir", str(dirname)) - self.form.lineEdit_outputDir.setText(dirname) + def choose_working_dir(self): + self.fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem") + self.working_dir = QtGui.QFileDialog.getExistingDirectory(None, + 'Choose CalculiX working directory', + self.fem_prefs.GetString("WorkingDir", '/tmp')) + if self.working_dir: + self.fem_prefs.SetString("WorkingDir", str(self.working_dir)) + self.form.le_working_dir.setText(self.working_dir) def write_input_file_handler(self): QApplication.restoreOverrideCursor() @@ -374,7 +378,7 @@ class _JobControlTaskPanel: try: import ccxInpWriter as iw inp_writer = iw.inp_writer(self.obj, self.MeshObject, self.MaterialObjects, - self.FixedObjects, self.ForceObjects, self.PressureObjects) + self.FixedObjects, self.ForceObjects, self.PressureObjects, self.working_dir) self.base_name = inp_writer.write_calculix_input_file() if self.base_name != "": self.femConsoleMessage("Write completed.") diff --git a/src/Mod/Fem/MechanicalAnalysis.ui b/src/Mod/Fem/MechanicalAnalysis.ui index e62db3298b..cb23c4cacd 100644 --- a/src/Mod/Fem/MechanicalAnalysis.ui +++ b/src/Mod/Fem/MechanicalAnalysis.ui @@ -17,9 +17,9 @@ - + - false + true true @@ -27,9 +27,9 @@ - + - false + true ... diff --git a/src/Mod/Fem/ccxInpWriter.py b/src/Mod/Fem/ccxInpWriter.py index b02259ea65..43710a8706 100644 --- a/src/Mod/Fem/ccxInpWriter.py +++ b/src/Mod/Fem/ccxInpWriter.py @@ -6,13 +6,15 @@ import sys class inp_writer: - def __init__(self, analysis_obj, mesh_obj, mat_obj, fixed_obj, force_obj, pressure_obj): + def __init__(self, analysis_obj, mesh_obj, mat_obj, fixed_obj, force_obj, pressure_obj, dir_name=None): + self.dir_name = dir_name self.mesh_object = mesh_obj self.material_objects = mat_obj self.fixed_objects = fixed_obj self.force_objects = force_obj self.pressure_objects = pressure_obj - self.dir_name = FreeCAD.ActiveDocument.TransientDir.replace('\\', '/') + '/FemAnl_' + analysis_obj.Uid[-4:] + if not dir_name: + self.dir_name = FreeCAD.ActiveDocument.TransientDir.replace('\\', '/') + '/FemAnl_' + analysis_obj.Uid[-4:] if not os.path.isdir(self.dir_name): os.mkdir(self.dir_name) self.base_name = self.dir_name + '/' + self.mesh_object.Name