FEM: Fix and activate setting working directory for Calculix

Also add FEM preferences option to define working ccx directory

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
Przemo Firszt
2015-06-05 19:24:44 +01:00
committed by wmayer
parent a5daff1302
commit e84dd55788
5 changed files with 67 additions and 15 deletions

View File

@@ -142,6 +142,50 @@
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="l_ccx_working_directory">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Working directory</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="Gui::PrefFileChooser" name="fc_ccx_working_directory">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="mode">
<enum>Gui::FileChooser::Directory</enum>
</property>
<property name="prefEntry" stdset="0">
<cstring>WorkingDir</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>Mod/Fem</cstring>
</property>
</widget>
</item>
</layout>
</item>
</layout>

View File

@@ -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();

View File

@@ -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.")

View File

@@ -17,9 +17,9 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="lineEdit_outputDir">
<widget class="QLineEdit" name="le_working_dir">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
@@ -27,9 +27,9 @@
</widget>
</item>
<item>
<widget class="QToolButton" name="toolButton_chooseOutputDir">
<widget class="QToolButton" name="tb_choose_working_dir">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="text">
<string>...</string>

View File

@@ -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