diff --git a/src/Mod/Fem/Gui/DlgSettingsFem.ui b/src/Mod/Fem/Gui/DlgSettingsFem.ui
index dd09ea3294..c97dbfa1f7 100644
--- a/src/Mod/Fem/Gui/DlgSettingsFem.ui
+++ b/src/Mod/Fem/Gui/DlgSettingsFem.ui
@@ -7,7 +7,7 @@
0
0
555
- 429
+ 453
@@ -193,6 +193,73 @@
+ -
+
+
+ Default analysis type
+
+
+
-
+
+
-
+
+
-
+
+
+
+ 148
+ 0
+
+
+
+ Default type on analysis
+
+
+ AnalysisType
+
+
+ Mod/Fem
+
+
-
+
+ Static
+
+
+
+ :/icons/fem-new-analysis.svg:/icons/fem-new-analysis.svg
+
+
+ -
+
+ Frequency
+
+
+
+ :/icons/fem-frequency-analysis.svg:/icons/fem-frequency-analysis.svg
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
+
+
+
+
-
@@ -336,6 +403,11 @@
QCheckBox
+
+ Gui::PrefComboBox
+ QComboBox
+
+
diff --git a/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp
index 1fd363d3de..98d7cb00e5 100644
--- a/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp
+++ b/src/Mod/Fem/Gui/DlgSettingsFemImp.cpp
@@ -25,6 +25,7 @@
#include "PreCompiled.h"
+#include "Gui/Application.h"
#include "DlgSettingsFemImp.h"
#include
@@ -43,10 +44,15 @@ DlgSettingsFemImp::~DlgSettingsFemImp()
void DlgSettingsFemImp::saveSettings()
{
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath
+ ("User parameter:BaseApp/Preferences/Mod/Fem");
+ hGrp->SetInt("AnalysisType", cb_analysis_type->currentIndex());
+
fc_ccx_working_directory->onSave();
cb_int_editor->onSave();
fc_ext_editor->onSave();
fc_ccx_binary->onSave();
+ cb_analysis_type->onSave();
cb_use_built_in_materials->onSave();
cb_use_mat_from_config_dir->onSave();
cb_use_mat_from_custom_dir->onSave();
@@ -59,10 +65,16 @@ void DlgSettingsFemImp::loadSettings()
cb_int_editor->onRestore();
fc_ext_editor->onRestore();
fc_ccx_binary->onRestore();
+ cb_analysis_type->onRestore();
cb_use_built_in_materials->onRestore();
cb_use_mat_from_config_dir->onRestore();
cb_use_mat_from_custom_dir->onRestore();
fc_custom_mat_dir->onRestore();
+
+ ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath
+ ("User parameter:BaseApp/Preferences/Mod/Fem");
+ int index = hGrp->GetInt("AnalysisType", 0);
+ if (index > -1) cb_analysis_type->setCurrentIndex(index);
}
/**
@@ -71,7 +83,9 @@ void DlgSettingsFemImp::loadSettings()
void DlgSettingsFemImp::changeEvent(QEvent *e)
{
if (e->type() == QEvent::LanguageChange) {
+ int c_index = cb_analysis_type->currentIndex();
retranslateUi(this);
+ cb_analysis_type->setCurrentIndex(c_index);
}
else {
QWidget::changeEvent(e);
diff --git a/src/Mod/Fem/MechanicalAnalysis.ui b/src/Mod/Fem/MechanicalAnalysis.ui
index 924b4f309b..779c482702 100644
--- a/src/Mod/Fem/MechanicalAnalysis.ui
+++ b/src/Mod/Fem/MechanicalAnalysis.ui
@@ -6,8 +6,8 @@
0
0
- 193
- 384
+ 258
+ 458
@@ -15,56 +15,103 @@
-
-
-
-
-
-
- true
-
-
- true
+
+
+ Working directory
+
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ true
+
+
+ true
+
+
+
+ -
+
+
+ true
+
+
+ ...
+
+
+
+
+
+
+ -
+
+
+ Analysis type
+
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ Static
+
+
+ true
+
+
+
+ -
+
+
+ Frequency
+
+
+
+
+
+
+ -
+
+
-
+
+
+ Write .inp file
- -
-
+
-
+
- true
+ false
- ...
+ Edit .inp file
+
+
+
+ -
+
+
+ false
+
+
+ Run Calculix
- -
-
-
- Write Calculix Input File
-
-
-
- -
-
-
- false
-
-
- Edit Calculix Input File
-
-
-
- -
-
-
- false
-
-
- Run Calculix
-
-
-
-
@@ -86,6 +133,13 @@
+
+
+ Gui::PrefRadioButton
+ QRadioButton
+
+
+
diff --git a/src/Mod/Fem/_JobControlTaskPanel.py b/src/Mod/Fem/_JobControlTaskPanel.py
index 913e21fc41..c52ea849a4 100644
--- a/src/Mod/Fem/_JobControlTaskPanel.py
+++ b/src/Mod/Fem/_JobControlTaskPanel.py
@@ -58,6 +58,13 @@ class _JobControlTaskPanel:
self.working_dir = self.fem_prefs.GetString("WorkingDir", '/tmp')
self.analysis_object = analysis_object
+ try:
+ self.analysis_type = FreeCAD.FEM_analysis["type"]
+ except:
+ analysis_type = self.fem_prefs.GetInt("AnalysisType", 0)
+ self.analysis_type = FemTools.known_analysis_types[analysis_type]
+ FreeCAD.FEM_analysis = {"type": self.analysis_type}
+
self.Calculix = QtCore.QProcess()
self.Timer = QtCore.QTimer()
self.Timer.start(300)
@@ -69,6 +76,8 @@ class _JobControlTaskPanel:
QtCore.QObject.connect(self.form.pb_write_inp, QtCore.SIGNAL("clicked()"), self.write_input_file_handler)
QtCore.QObject.connect(self.form.pb_edit_inp, QtCore.SIGNAL("clicked()"), self.editCalculixInputFile)
QtCore.QObject.connect(self.form.pb_run_ccx, QtCore.SIGNAL("clicked()"), self.runCalculix)
+ QtCore.QObject.connect(self.form.rb_static_analysis, QtCore.SIGNAL("clicked()"), self.select_static_analysis)
+ QtCore.QObject.connect(self.form.rb_frequency_analysis, QtCore.SIGNAL("clicked()"), self.select_frequency_analysis)
QtCore.QObject.connect(self.Calculix, QtCore.SIGNAL("started()"), self.calculixStarted)
QtCore.QObject.connect(self.Calculix, QtCore.SIGNAL("stateChanged(QProcess::ProcessState)"), self.calculixStateChanged)
@@ -158,6 +167,10 @@ class _JobControlTaskPanel:
def update(self):
'fills the widgets'
self.form.le_working_dir.setText(self.working_dir)
+ if self.analysis_type == 'static':
+ self.form.rb_static_analysis.setChecked(True)
+ elif self.analysis_type == 'frequency':
+ self.form.rb_frequency_analysis.setChecked(True)
return
def accept(self):
@@ -182,6 +195,7 @@ class _JobControlTaskPanel:
QApplication.setOverrideCursor(Qt.WaitCursor)
self.inp_file_name = ""
fea = FemTools()
+ fea.set_analysis_type(self.analysis_type)
fea.update_objects()
fea.write_inp_file()
if fea.inp_file_name != "":
@@ -242,6 +256,20 @@ class _JobControlTaskPanel:
QApplication.restoreOverrideCursor()
+ def store_analysis_type(self, analysis_type):
+ if self.analysis_type != analysis_type:
+ self.analysis_type = analysis_type
+ FreeCAD.FEM_analysis["type"] = analysis_type
+ self.form.pb_edit_inp.setEnabled(False)
+ self.form.pb_run_ccx.setEnabled(False)
+
+ def select_static_analysis(self):
+ self.store_analysis_type('static')
+
+ def select_frequency_analysis(self):
+ self.change_analysis_type('frequency')
+
+
#Code duplication!!!!
def get_working_dir():
fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem")