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/PrefWidgets.h
+ + Gui::PrefComboBox + QComboBox +
Gui/PrefWidgets.h
+
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 +
Gui/PrefWidgets.h
+
+
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")