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:
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user