From b026710a3034f559c3c1a195d95bf835407be2b4 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Fri, 9 Dec 2016 18:42:40 +0100 Subject: [PATCH 1/3] FEM: add a context command to clear the FEM mesh --- src/Mod/Fem/App/CMakeLists.txt | 1 + src/Mod/Fem/CMakeLists.txt | 1 + src/Mod/Fem/Gui/Workbench.cpp | 6 ++++ src/Mod/Fem/Gui/Workbench.h | 1 + src/Mod/Fem/InitGui.py | 1 + src/Mod/Fem/_CommandClearMesh.py | 56 ++++++++++++++++++++++++++++++++ 6 files changed, 66 insertions(+) create mode 100644 src/Mod/Fem/_CommandClearMesh.py diff --git a/src/Mod/Fem/App/CMakeLists.txt b/src/Mod/Fem/App/CMakeLists.txt index ec6381866..07a50ccfa 100755 --- a/src/Mod/Fem/App/CMakeLists.txt +++ b/src/Mod/Fem/App/CMakeLists.txt @@ -63,6 +63,7 @@ SOURCE_GROUP("Module" FILES ${Mod_SRCS}) SET(FemScripts_SRCS _CommandAnalysis.py _CommandBeamSection.py + _CommandClearMesh.py _CommandControlSolver.py _CommandConstraintSelfWeight.py _CommandFEMMesh2Mesh.py diff --git a/src/Mod/Fem/CMakeLists.txt b/src/Mod/Fem/CMakeLists.txt index 826cd10f0..15898221d 100755 --- a/src/Mod/Fem/CMakeLists.txt +++ b/src/Mod/Fem/CMakeLists.txt @@ -24,6 +24,7 @@ INSTALL( TestFem.py FemCommands.py + _CommandClearMesh.py _CommandMeshNetgenFromShape.py _CommandPurgeResults.py _CommandRunSolver.py diff --git a/src/Mod/Fem/Gui/Workbench.cpp b/src/Mod/Fem/Gui/Workbench.cpp index 1038afa47..d9f834a9b 100755 --- a/src/Mod/Fem/Gui/Workbench.cpp +++ b/src/Mod/Fem/Gui/Workbench.cpp @@ -50,6 +50,12 @@ Workbench::~Workbench() { } +void Workbench::setupContextMenu(const char* recipient, Gui::MenuItem* item) const +{ + StdWorkbench::setupContextMenu( recipient, item ); + *item << "Separator" << "Fem_ClearMesh"; +} + Gui::ToolBarItem* Workbench::setupToolBars() const { Gui::ToolBarItem* root = StdWorkbench::setupToolBars(); diff --git a/src/Mod/Fem/Gui/Workbench.h b/src/Mod/Fem/Gui/Workbench.h index 036cc638b..acc43fb2d 100755 --- a/src/Mod/Fem/Gui/Workbench.h +++ b/src/Mod/Fem/Gui/Workbench.h @@ -38,6 +38,7 @@ class FemGuiExport Workbench : public Gui::StdWorkbench public: Workbench(); virtual ~Workbench(); + void setupContextMenu(const char* recipient, Gui::MenuItem*) const; protected: Gui::ToolBarItem* setupToolBars() const; diff --git a/src/Mod/Fem/InitGui.py b/src/Mod/Fem/InitGui.py index 65985a2f2..ff0b95cbb 100644 --- a/src/Mod/Fem/InitGui.py +++ b/src/Mod/Fem/InitGui.py @@ -48,6 +48,7 @@ class FemWorkbench (Workbench): import _CommandShowResult import _CommandRunSolver import _CommandPurgeResults + import _CommandClearMesh import _CommandControlSolver import _CommandFEMMesh2Mesh import _CommandMeshGmshFromShape diff --git a/src/Mod/Fem/_CommandClearMesh.py b/src/Mod/Fem/_CommandClearMesh.py new file mode 100644 index 000000000..bb9c02343 --- /dev/null +++ b/src/Mod/Fem/_CommandClearMesh.py @@ -0,0 +1,56 @@ +# *************************************************************************** +# * * +# * Copyright (c) 2016 - Bernd Hahnebach * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * This program is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +__title__ = "Clear the FemMesh of a FEM mesh object" +__author__ = "Bernd Hahnebach" +__url__ = "http://www.freecadweb.org" + +## @package CommandClearMesh +# \ingroup FEM + +import FreeCAD +from FemCommands import FemCommands +import FreeCADGui +from PySide import QtCore + + +class _CommandClearMesh(FemCommands): + "clear the FEM mesh" + def __init__(self): + super(_CommandClearMesh, self).__init__() + self.resources = {'Pixmap': 'fem-femmesh-from-shape', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_ClearMesh", "Clear FEM mesh"), + # 'Accel': "Z, Z", + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_ClearMesh", "Clear the Mesh of a FEM mesh object")} + self.is_active = 'with_femmesh' + + def Activated(self): + sel = FreeCADGui.Selection.getSelection() + if len(sel) == 1 and sel[0].isDerivedFrom("Fem::FemMeshObject"): + FreeCAD.ActiveDocument.openTransaction("Clear FEM mesh") + FreeCADGui.addModule("Fem") + FreeCADGui.doCommand("App.ActiveDocument." + sel[0].Name + ".FemMesh = Fem.FemMesh()") + FreeCADGui.doCommand("App.ActiveDocument.recompute()") + + FreeCADGui.Selection.clearSelection() + +FreeCADGui.addCommand('Fem_ClearMesh',_CommandClearMesh()) From 2733d03be53e9f686c72e0f4f429e9e6efa8d63a Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Thu, 22 Dec 2016 21:35:37 +0100 Subject: [PATCH 2/3] FEM: add context command to print dump mesh info --- src/Mod/Fem/App/CMakeLists.txt | 1 + src/Mod/Fem/CMakeLists.txt | 1 + src/Mod/Fem/Gui/Workbench.cpp | 4 ++- src/Mod/Fem/InitGui.py | 1 + src/Mod/Fem/_CommandPrintMeshInfo.py | 54 ++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/Mod/Fem/_CommandPrintMeshInfo.py diff --git a/src/Mod/Fem/App/CMakeLists.txt b/src/Mod/Fem/App/CMakeLists.txt index 07a50ccfa..4e577578c 100755 --- a/src/Mod/Fem/App/CMakeLists.txt +++ b/src/Mod/Fem/App/CMakeLists.txt @@ -72,6 +72,7 @@ SET(FemScripts_SRCS _CommandMeshGmshFromShape.py _CommandMeshNetgenFromShape.py _CommandMeshRegion.py + _CommandPrintMeshInfo.py _CommandPurgeResults.py _CommandRunSolver.py _CommandShellThickness.py diff --git a/src/Mod/Fem/CMakeLists.txt b/src/Mod/Fem/CMakeLists.txt index 15898221d..3b7f9740c 100755 --- a/src/Mod/Fem/CMakeLists.txt +++ b/src/Mod/Fem/CMakeLists.txt @@ -26,6 +26,7 @@ INSTALL( FemCommands.py _CommandClearMesh.py _CommandMeshNetgenFromShape.py + _CommandPrintMeshInfo.py _CommandPurgeResults.py _CommandRunSolver.py _CommandControlSolver.py diff --git a/src/Mod/Fem/Gui/Workbench.cpp b/src/Mod/Fem/Gui/Workbench.cpp index d9f834a9b..32e249f29 100755 --- a/src/Mod/Fem/Gui/Workbench.cpp +++ b/src/Mod/Fem/Gui/Workbench.cpp @@ -53,7 +53,9 @@ Workbench::~Workbench() void Workbench::setupContextMenu(const char* recipient, Gui::MenuItem* item) const { StdWorkbench::setupContextMenu( recipient, item ); - *item << "Separator" << "Fem_ClearMesh"; + *item << "Separator" + << "Fem_ClearMesh" + << "Fem_PrintMeshInfo"; } Gui::ToolBarItem* Workbench::setupToolBars() const diff --git a/src/Mod/Fem/InitGui.py b/src/Mod/Fem/InitGui.py index ff0b95cbb..ae33e45f2 100644 --- a/src/Mod/Fem/InitGui.py +++ b/src/Mod/Fem/InitGui.py @@ -49,6 +49,7 @@ class FemWorkbench (Workbench): import _CommandRunSolver import _CommandPurgeResults import _CommandClearMesh + import _CommandPrintMeshInfo import _CommandControlSolver import _CommandFEMMesh2Mesh import _CommandMeshGmshFromShape diff --git a/src/Mod/Fem/_CommandPrintMeshInfo.py b/src/Mod/Fem/_CommandPrintMeshInfo.py new file mode 100644 index 000000000..b46fa68a4 --- /dev/null +++ b/src/Mod/Fem/_CommandPrintMeshInfo.py @@ -0,0 +1,54 @@ +# *************************************************************************** +# * * +# * Copyright (c) 2016 - Bernd Hahnebach * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * This program is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +__title__ = "Print info of FEM mesh object" +__author__ = "Bernd Hahnebach" +__url__ = "http://www.freecadweb.org" + +## @package CommandPrintMeshInfo +# \ingroup FEM + +import FreeCAD +from FemCommands import FemCommands +import FreeCADGui +from PySide import QtCore + + +class _CommandPrintMeshInfo(FemCommands): + "Print FEM mesh info" + def __init__(self): + super(_CommandPrintMeshInfo, self).__init__() + self.resources = {'Pixmap': 'fem-femmesh-from-shape', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_PrintMeshInfo", "Print FEM mesh info"), + # 'Accel': "Z, Z", + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_PrintMeshInfo", "Print FEM mesh info")} + self.is_active = 'with_femmesh' + + def Activated(self): + sel = FreeCADGui.Selection.getSelection() + if len(sel) == 1 and sel[0].isDerivedFrom("Fem::FemMeshObject"): + FreeCAD.ActiveDocument.openTransaction("Print FEM mesh info") + FreeCADGui.doCommand("print(App.ActiveDocument." + sel[0].Name + ".FemMesh)") + + FreeCADGui.Selection.clearSelection() + +FreeCADGui.addCommand('Fem_PrintMeshInfo',_CommandPrintMeshInfo()) From b05f11183b81fbd93948944bfc26e6ed0db65daf Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Fri, 23 Dec 2016 17:31:59 +0100 Subject: [PATCH 3/3] FEM: add icons for clear mesh and mesh info command --- src/Mod/Fem/Gui/Resources/Fem.qrc | 2 + .../icons/fem-femmesh-clear-mesh.svg | 120 ++++++++++++++++++ .../icons/fem-femmesh-print-info.svg | 119 +++++++++++++++++ src/Mod/Fem/_CommandClearMesh.py | 2 +- src/Mod/Fem/_CommandPrintMeshInfo.py | 7 +- 5 files changed, 248 insertions(+), 2 deletions(-) create mode 100644 src/Mod/Fem/Gui/Resources/icons/fem-femmesh-clear-mesh.svg create mode 100644 src/Mod/Fem/Gui/Resources/icons/fem-femmesh-print-info.svg diff --git a/src/Mod/Fem/Gui/Resources/Fem.qrc b/src/Mod/Fem/Gui/Resources/Fem.qrc index a100469ae..41b7f9698 100755 --- a/src/Mod/Fem/Gui/Resources/Fem.qrc +++ b/src/Mod/Fem/Gui/Resources/Fem.qrc @@ -25,10 +25,12 @@ icons/fem-control-solver.svg icons/fem-cylinder.svg icons/fem-data.png + icons/fem-femmesh-clear-mesh.svg icons/fem-femmesh-create-node-by-poly.svg icons/fem-femmesh-from-shape.svg icons/fem-femmesh-gmsh-from-shape.svg icons/fem-femmesh-netgen-from-shape.svg + icons/fem-femmesh-print-info.svg icons/fem-femmesh-region.svg icons/fem-femmesh-to-mesh.svg icons/fem-frequency-analysis.svg diff --git a/src/Mod/Fem/Gui/Resources/icons/fem-femmesh-clear-mesh.svg b/src/Mod/Fem/Gui/Resources/icons/fem-femmesh-clear-mesh.svg new file mode 100644 index 000000000..00cc0d7a5 --- /dev/null +++ b/src/Mod/Fem/Gui/Resources/icons/fem-femmesh-clear-mesh.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/Mod/Fem/Gui/Resources/icons/fem-femmesh-print-info.svg b/src/Mod/Fem/Gui/Resources/icons/fem-femmesh-print-info.svg new file mode 100644 index 000000000..012bf6ba0 --- /dev/null +++ b/src/Mod/Fem/Gui/Resources/icons/fem-femmesh-print-info.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/Mod/Fem/_CommandClearMesh.py b/src/Mod/Fem/_CommandClearMesh.py index bb9c02343..d4364bd59 100644 --- a/src/Mod/Fem/_CommandClearMesh.py +++ b/src/Mod/Fem/_CommandClearMesh.py @@ -37,7 +37,7 @@ class _CommandClearMesh(FemCommands): "clear the FEM mesh" def __init__(self): super(_CommandClearMesh, self).__init__() - self.resources = {'Pixmap': 'fem-femmesh-from-shape', + self.resources = {'Pixmap': 'fem-femmesh-clear-mesh', 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_ClearMesh", "Clear FEM mesh"), # 'Accel': "Z, Z", 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_ClearMesh", "Clear the Mesh of a FEM mesh object")} diff --git a/src/Mod/Fem/_CommandPrintMeshInfo.py b/src/Mod/Fem/_CommandPrintMeshInfo.py index b46fa68a4..e1a2c12c5 100644 --- a/src/Mod/Fem/_CommandPrintMeshInfo.py +++ b/src/Mod/Fem/_CommandPrintMeshInfo.py @@ -31,13 +31,14 @@ import FreeCAD from FemCommands import FemCommands import FreeCADGui from PySide import QtCore +from PySide import QtGui class _CommandPrintMeshInfo(FemCommands): "Print FEM mesh info" def __init__(self): super(_CommandPrintMeshInfo, self).__init__() - self.resources = {'Pixmap': 'fem-femmesh-from-shape', + self.resources = {'Pixmap': 'fem-femmesh-print-info', 'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_PrintMeshInfo", "Print FEM mesh info"), # 'Accel': "Z, Z", 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_PrintMeshInfo", "Print FEM mesh info")} @@ -49,6 +50,10 @@ class _CommandPrintMeshInfo(FemCommands): FreeCAD.ActiveDocument.openTransaction("Print FEM mesh info") FreeCADGui.doCommand("print(App.ActiveDocument." + sel[0].Name + ".FemMesh)") + FreeCADGui.addModule("PySide") + FreeCADGui.doCommand("mesh_info = str(App.ActiveDocument." + sel[0].Name + ".FemMesh)") + FreeCADGui.doCommand("PySide.QtGui.QMessageBox.information(None, 'FEM Mesh Info', mesh_info)") + FreeCADGui.Selection.clearSelection() FreeCADGui.addCommand('Fem_PrintMeshInfo',_CommandPrintMeshInfo())