From b45190fb4de15fa203f6e214fc9cf3fc7a525c13 Mon Sep 17 00:00:00 2001 From: Przemo Firszt Date: Thu, 25 Jun 2015 12:11:35 +0100 Subject: [PATCH] FEM: Add Quick Analysis Signed-off-by: Przemo Firszt --- src/Mod/Fem/Gui/Resources/Fem.qrc | 1 + .../Resources/icons/Fem_Quick_Analysis.svg | 479 ++++++++++++++++++ src/Mod/Fem/Gui/Workbench.cpp | 2 + src/Mod/Fem/MechanicalAnalysis.py | 44 +- 4 files changed, 522 insertions(+), 4 deletions(-) create mode 100644 src/Mod/Fem/Gui/Resources/icons/Fem_Quick_Analysis.svg diff --git a/src/Mod/Fem/Gui/Resources/Fem.qrc b/src/Mod/Fem/Gui/Resources/Fem.qrc index 801df8911..18f3f8bdf 100755 --- a/src/Mod/Fem/Gui/Resources/Fem.qrc +++ b/src/Mod/Fem/Gui/Resources/Fem.qrc @@ -16,6 +16,7 @@ icons/Fem_Material.svg icons/Fem_NewAnalysis.svg icons/Fem_Purge_Results.svg + icons/Fem_Quick_Analysis.svg icons/Fem_Result.svg icons/Fem_ResultDisplacement.svg icons/Fem_ResultStress.svg diff --git a/src/Mod/Fem/Gui/Resources/icons/Fem_Quick_Analysis.svg b/src/Mod/Fem/Gui/Resources/icons/Fem_Quick_Analysis.svg new file mode 100644 index 000000000..26e4c7374 --- /dev/null +++ b/src/Mod/Fem/Gui/Resources/icons/Fem_Quick_Analysis.svg @@ -0,0 +1,479 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/Mod/Fem/Gui/Workbench.cpp b/src/Mod/Fem/Gui/Workbench.cpp index 367e20f09..af64fad6a 100755 --- a/src/Mod/Fem/Gui/Workbench.cpp +++ b/src/Mod/Fem/Gui/Workbench.cpp @@ -69,6 +69,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const << "Fem_ConstraintPulley" << "Separator" << "Fem_MechanicalJobControl" + << "Fem_Quick_Analysis" << "Fem_PurgeResults" << "Fem_ShowResult"; return root; @@ -95,6 +96,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Fem_ConstraintPulley" << "Separator" << "Fem_MechanicalJobControl" + << "Fem_Quick_Analysis" << "Fem_PurgeResults" << "Fem_ShowResult"; diff --git a/src/Mod/Fem/MechanicalAnalysis.py b/src/Mod/Fem/MechanicalAnalysis.py index 457df163b..85c02e055 100644 --- a/src/Mod/Fem/MechanicalAnalysis.py +++ b/src/Mod/Fem/MechanicalAnalysis.py @@ -144,6 +144,43 @@ class _CommandPurgeFemResults: return FreeCADGui.ActiveDocument is not None and results_present() +class _CommandQuickAnalysis: + def GetResources(self): + return {'Pixmap': 'Fem_Quick_Analysis', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_Quick_Analysis", "Run CalculiX ccx"), + 'Accel': "R, C", + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_Quick_Analysis", "Write .inp file and run CalculiX ccx")} + + def Activated(self): + def load_results(ret_code): + if ret_code == 0: + print "ccx finished {}".format(ret_code) + self.fea.load_results() + self.show_results_on_mesh() + else: + print "ccx finished with erro {}".format(ret_code) + + self.fea = FemTools() + self.fea.purge_results() + self.fea.reset_mesh_color() + self.fea.reset_mesh_deformation() + message = self.fea.check_prerequisites() + if message: + QtGui.QMessageBox.critical(None, "Missing prerequisite", message) + return + self.fea.finished.connect(load_results) + QtCore.QThreadPool.globalInstance().start(self.fea) + + def show_results_on_mesh(self): + #FIXME proprer mesh refreshing as per FreeCAD.FEM_dialog settings required + # or confirmation that it's safe to call restore_result_dialog + tp = _ResultControlTaskPanel() + tp.restore_result_dialog() + + def IsActive(self): + return FreeCADGui.ActiveDocument is not None and FemGui.getActiveAnalysis() is not None + + class _CommandMechanicalShowResult: "the Fem JobControl command definition" def GetResources(self): @@ -162,7 +199,7 @@ class _CommandMechanicalShowResult: QtGui.QMessageBox.critical(None, "Missing prerequisite", "No result found in active Analysis") return - taskd = _ResultControlTaskPanel(FemGui.getActiveAnalysis()) + taskd = _ResultControlTaskPanel() FreeCADGui.Control.showDialog(taskd) def IsActive(self): @@ -442,11 +479,9 @@ class _JobControlTaskPanel: class _ResultControlTaskPanel: '''The control for the displacement post-processing''' - def __init__(self, object): + def __init__(self): self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/ShowDisplacement.ui") - self.obj = object - #Connect Signals and Slots QtCore.QObject.connect(self.form.rb_none, QtCore.SIGNAL("toggled(bool)"), self.none_selected) QtCore.QObject.connect(self.form.rb_x_displacement, QtCore.SIGNAL("toggled(bool)"), self.x_displacement_selected) @@ -618,5 +653,6 @@ def results_present(): FreeCADGui.addCommand('Fem_NewMechanicalAnalysis', _CommandNewMechanicalAnalysis()) FreeCADGui.addCommand('Fem_CreateFromShape', _CommandFemFromShape()) FreeCADGui.addCommand('Fem_MechanicalJobControl', _CommandMechanicalJobControl()) +FreeCADGui.addCommand('Fem_Quick_Analysis', _CommandQuickAnalysis()) FreeCADGui.addCommand('Fem_PurgeResults', _CommandPurgeFemResults()) FreeCADGui.addCommand('Fem_ShowResult', _CommandMechanicalShowResult())