diff --git a/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui b/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui index 9826424ff5..c501f868d5 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui +++ b/src/Mod/Fem/Gui/DlgSettingsFemGeneral.ui @@ -364,6 +364,73 @@ + + + + Defaults + + + + + + + + true + + + Default solver + + + + + + + true + + + false + + + Default solver used by the analysis container + + + DefaultSolver + + + Mod/Fem/General + + + + None + + + + + CalculiX + + + + + Elmer + + + + + Mystran + + + + + Z88 + + + + + + + + + @@ -403,6 +470,11 @@ QCheckBox
Gui/PrefWidgets.h
+ + Gui::PrefComboBox + QComboBox +
Gui/PrefWidgets.h
+
diff --git a/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp index 960e33dae7..5a5bc62444 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp +++ b/src/Mod/Fem/Gui/DlgSettingsFemGeneralImp.cpp @@ -55,6 +55,7 @@ void DlgSettingsFemGeneralImp::saveSettings() ui->cb_wd_custom->onSave(); ui->le_wd_custom->onSave(); ui->cb_overwrite_solver_working_directory->onSave(); + ui->cmb_def_solver->onSave(); } void DlgSettingsFemGeneralImp::loadSettings() @@ -70,6 +71,7 @@ void DlgSettingsFemGeneralImp::loadSettings() ui->cb_wd_custom->onRestore(); ui->le_wd_custom->onRestore(); ui->cb_overwrite_solver_working_directory->onRestore(); + ui->cmb_def_solver->onRestore(); } /** diff --git a/src/Mod/Fem/femcommands/commands.py b/src/Mod/Fem/femcommands/commands.py index 66f1673248..2055459c9b 100644 --- a/src/Mod/Fem/femcommands/commands.py +++ b/src/Mod/Fem/femcommands/commands.py @@ -37,7 +37,7 @@ from .manager import CommandManager from femsolver import settings from femtools.femutils import expandParentObject from femtools.femutils import is_of_type - +from femsolver.settings import get_default_solver # Python command definitions: # for C++ command definitions see src/Mod/Fem/Command.cpp @@ -59,7 +59,7 @@ class _Analysis(CommandManager): self.accel = "S, A" self.tooltip = Qt.QT_TRANSLATE_NOOP( "FEM_Analysis", - "Creates an analysis container with standard solver CalculiX" + "Creates an analysis container with default solver" ) self.is_active = "with_document" @@ -69,16 +69,12 @@ class _Analysis(CommandManager): FreeCADGui.addModule("ObjectsFem") FreeCADGui.doCommand("ObjectsFem.makeAnalysis(FreeCAD.ActiveDocument, 'Analysis')") FreeCADGui.doCommand("FemGui.setActiveAnalysis(FreeCAD.ActiveDocument.ActiveObject)") - # if there is no Elmer or Z88 binary create a CalculiX ccx tools solver for - # new analysis to be on the safe side for new users - binary = settings.get_binary("ElmerSolver") - if binary is None: - binary = settings.get_binary("Z88") - if binary is None: - FreeCADGui.doCommand("ObjectsFem.makeSolverCalculixCcxTools(FreeCAD.ActiveDocument)") + if get_default_solver(): + FreeCADGui.doCommand("ObjectsFem.makeSolver{}(FreeCAD.ActiveDocument)" + .format(get_default_solver())) FreeCADGui.doCommand( - "FemGui.getActiveAnalysis().addObject(FreeCAD.ActiveDocument.ActiveObject)" - ) + "FemGui.getActiveAnalysis().addObject(FreeCAD.ActiveDocument.ActiveObject)") + FreeCAD.ActiveDocument.recompute() diff --git a/src/Mod/Fem/femsolver/settings.py b/src/Mod/Fem/femsolver/settings.py index 317e80455d..ff89ea5bf3 100644 --- a/src/Mod/Fem/femsolver/settings.py +++ b/src/Mod/Fem/femsolver/settings.py @@ -165,6 +165,12 @@ def get_dir_setting(): return DirSetting.CUSTOM return DirSetting.TEMPORARY +def get_default_solver(): + """ Return default solver name. + """ + solver_map = {0: None, 1: "CalculixCcxTools", 2: "Elmer", 3: "Mystran", 4: "Z88"} + param_group = FreeCAD.ParamGet(_GENERAL_PARAM) + return solver_map[param_group.GetInt("DefaultSolver", 0)] class _SolverDlg(object): """ Internal query logic for solver specific settings.