From 1f96775abc9178e55ece769369c238142ffd00af Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Sat, 13 Jan 2018 13:05:06 +0100 Subject: [PATCH] FEM: calculix solver, use separate command for CalculiX ccxtools and CalculiX framework solver --- src/Mod/Fem/Gui/Workbench.cpp | 8 ++-- src/Mod/Fem/femcommands/commands.py | 67 +++++++++++++++++------------ 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/Mod/Fem/Gui/Workbench.cpp b/src/Mod/Fem/Gui/Workbench.cpp index 51d69913ab..cf88546648 100755 --- a/src/Mod/Fem/Gui/Workbench.cpp +++ b/src/Mod/Fem/Gui/Workbench.cpp @@ -117,7 +117,8 @@ Gui::ToolBarItem* Workbench::setupToolBars() const Gui::ToolBarItem* solve = new Gui::ToolBarItem(root); solve->setCommand("Solve"); - *solve << "FEM_SolverCalculix" + *solve << "FEM_SolverCalculixCxxtools" + << "FEM_SolverCalculiX" << "FEM_SolverElmer" << "Separator" << "FEM_EquationHeat" @@ -222,9 +223,10 @@ Gui::MenuItem* Workbench::setupMenuBar() const Gui::MenuItem* solve = new Gui::MenuItem; root->insertItem(item, solve); solve->setCommand("&Solve"); - *solve << "FEM_SolverCalculix" - << "FEM_SolverZ88" + *solve << "FEM_SolverCalculixCxxtools" + << "FEM_SolverCalculiX" << "FEM_SolverElmer" + << "FEM_SolverZ88" << "Separator" << "FEM_EquationHeat" << "FEM_EquationElasticity" diff --git a/src/Mod/Fem/femcommands/commands.py b/src/Mod/Fem/femcommands/commands.py index 4676878d09..2181f7bfa0 100644 --- a/src/Mod/Fem/femcommands/commands.py +++ b/src/Mod/Fem/femcommands/commands.py @@ -537,39 +537,49 @@ class _CommandFemResultsPurge(CommandManager): resulttools.purge_results(self.active_analysis) -class _CommandFemSolverCalculix(CommandManager): - "The FEM_SolverCalculix command definition" +class _CommandFemSolverCalculixCxxtools(CommandManager): + "The FEM_SolverCalculix ccx tools command definition" def __init__(self): - super(_CommandFemSolverCalculix, self).__init__() + super(_CommandFemSolverCalculixCxxtools, self).__init__() self.resources = {'Pixmap': 'fem-solver', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_SolverCalculix", "Solver CalculiX"), - 'Accel': "S, C", - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_SolverCalculix", "Creates a FEM solver CalculiX")} + 'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_SolverCalculix", "Solver CalculiX Standard"), + 'Accel': "S, X", + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_SolverCalculix", "Creates a standard FEM solver CalculiX with ccx tools")} self.is_active = 'with_analysis' def Activated(self): - ccx_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem/Ccx") - use_old_solver_frame_work = ccx_prefs.GetBool("useOldSolverFrameWork", True) - use_new_solver_frame_work = ccx_prefs.GetBool("useNewSolverFrameWork", False) - if use_old_solver_frame_work and not use_new_solver_frame_work: - has_nonlinear_material_obj = False - for m in self.active_analysis.Group: - if hasattr(m, "Proxy") and m.Proxy.Type == "Fem::MaterialMechanicalNonlinear": - has_nonlinear_material_obj = True - FreeCAD.ActiveDocument.openTransaction("Create SolverCalculix") - FreeCADGui.addModule("ObjectsFem") - FreeCADGui.addModule("FemGui") - if has_nonlinear_material_obj: - FreeCADGui.doCommand("solver = ObjectsFem.makeSolverCalculixCcxTools(FreeCAD.ActiveDocument)") - FreeCADGui.doCommand("solver.GeometricalNonlinearity = 'nonlinear'") - FreeCADGui.doCommand("solver.MaterialNonlinearity = 'nonlinear'") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(solver)") - else: - FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverCalculixCcxTools(FreeCAD.ActiveDocument))") + has_nonlinear_material_obj = False + for m in self.active_analysis.Group: + if hasattr(m, "Proxy") and m.Proxy.Type == "Fem::MaterialMechanicalNonlinear": + has_nonlinear_material_obj = True + FreeCAD.ActiveDocument.openTransaction("Create SolverCalculix") + FreeCADGui.addModule("ObjectsFem") + FreeCADGui.addModule("FemGui") + if has_nonlinear_material_obj: + FreeCADGui.doCommand("solver = ObjectsFem.makeSolverCalculixCcxTools(FreeCAD.ActiveDocument)") + FreeCADGui.doCommand("solver.GeometricalNonlinearity = 'nonlinear'") + FreeCADGui.doCommand("solver.MaterialNonlinearity = 'nonlinear'") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(solver)") else: - FreeCAD.ActiveDocument.openTransaction("Create CalculiX solver object") - FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverCalculix(FreeCAD.ActiveDocument))") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverCalculixCcxTools(FreeCAD.ActiveDocument))") + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + + +class _CommandFemSolverCalculiX(CommandManager): + "The FEM_SolverCalculix command definition" + def __init__(self): + super(_CommandFemSolverCalculiX, self).__init__() + self.resources = {'Pixmap': 'fem-solver', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("FEM_SolverCalculiX", "Solver CalculiX (experimental)"), + 'Accel': "S, C", + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("FEM_SolverCalculiX", "Creates a FEM solver CalculiX (experimental)")} + self.is_active = 'with_analysis' + + def Activated(self): + FreeCAD.ActiveDocument.openTransaction("Create CalculiX solver object") + FreeCADGui.addModule("ObjectsFem") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverCalculix(FreeCAD.ActiveDocument))") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() @@ -706,7 +716,8 @@ FreeCADGui.addCommand('FEM_MeshPrintInfo', _CommandFemMeshPrintInfo()) FreeCADGui.addCommand('FEM_MeshRegion', _CommandFemMeshRegion()) FreeCADGui.addCommand('FEM_ResultShow', _CommandFemResultShow()) FreeCADGui.addCommand('FEM_ResultsPurge', _CommandFemResultsPurge()) -FreeCADGui.addCommand('FEM_SolverCalculix', _CommandFemSolverCalculix()) +FreeCADGui.addCommand('FEM_SolverCalculixCxxtools', _CommandFemSolverCalculixCxxtools()) +FreeCADGui.addCommand('FEM_SolverCalculiX', _CommandFemSolverCalculiX()) FreeCADGui.addCommand('FEM_SolverControl', _CommandFemSolverControl()) FreeCADGui.addCommand('FEM_SolverElmer', _CommandFemSolverElmer()) FreeCADGui.addCommand('FEM_SolverRun', _CommandFemSolverRun())