diff --git a/src/Mod/Fem/App/CMakeLists.txt b/src/Mod/Fem/App/CMakeLists.txt index 9502efc15..7b9207954 100755 --- a/src/Mod/Fem/App/CMakeLists.txt +++ b/src/Mod/Fem/App/CMakeLists.txt @@ -83,6 +83,7 @@ SET(FemScripts_SRCS _FemConstraintSelfWeight.py _FemMaterialMechanicalNonlinear.py _FemMeshGmsh.py + _FemMeshGroup.py _FemMeshRegion.py _FemShellThickness.py _FemSolverCalculix.py @@ -99,6 +100,7 @@ SET(FemScripts_SRCS _ViewProviderFemConstraintSelfWeight.py _ViewProviderFemMaterialMechanicalNonlinear.py _ViewProviderFemMeshGmsh.py + _ViewProviderFemMeshGroup.py _ViewProviderFemMeshRegion.py _ViewProviderFemShellThickness.py _ViewProviderFemSolverCalculix.py @@ -122,6 +124,7 @@ SET(FemScripts_SRCS FemMaterialMechanicalNonlinear.py FemMesh2Mesh.py FemMeshGmsh.py + FemMeshGroup.py FemMeshRegion.py FemMeshTools.py FemShellThickness.py diff --git a/src/Mod/Fem/CMakeLists.txt b/src/Mod/Fem/CMakeLists.txt index 6a318ae8c..46bce3766 100755 --- a/src/Mod/Fem/CMakeLists.txt +++ b/src/Mod/Fem/CMakeLists.txt @@ -55,6 +55,10 @@ INSTALL( FemMesh2Mesh.py _CommandFEMMesh2Mesh.py + FemMeshGroup.py + _FemMeshGroup.py + _ViewProviderFemMeshGroup.py + FemMeshRegion.py _FemMeshRegion.py _ViewProviderFemMeshRegion.py diff --git a/src/Mod/Fem/FemMeshGroup.py b/src/Mod/Fem/FemMeshGroup.py new file mode 100644 index 000000000..d937ca236 --- /dev/null +++ b/src/Mod/Fem/FemMeshGroup.py @@ -0,0 +1,49 @@ +# *************************************************************************** +# * * +# * 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__ = "FemMeshGroup" +__author__ = "Bernd Hahnebach" +__url__ = "http://www.freecadweb.org" + +## \addtogroup FEM +# @{ + +import FreeCAD +import _FemMeshGroup + + +def makeFemMeshGroup(base_mesh, use_label=False, name="FEMMeshGroup"): + '''makeFemMeshGroup([length], [name]): creates a FEM mesh region object to define properties for a regon of a FEM mesh''' + obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) + _FemMeshGroup._FemMeshGroup(obj) + obj.UseLabel = use_label + # obj.BaseMesh = base_mesh + # App::PropertyLinkList does not support append, we will use a temporary list to append the mesh group obj. to the list + tmplist = base_mesh.MeshGroupList + tmplist.append(obj) + base_mesh.MeshGroupList = tmplist + if FreeCAD.GuiUp: + import _ViewProviderFemMeshGroup + _ViewProviderFemMeshGroup._ViewProviderFemMeshGroup(obj.ViewObject) + return obj + +# @} diff --git a/src/Mod/Fem/_FemMeshGmsh.py b/src/Mod/Fem/_FemMeshGmsh.py index ebbffe79c..0cf2ebbca 100644 --- a/src/Mod/Fem/_FemMeshGmsh.py +++ b/src/Mod/Fem/_FemMeshGmsh.py @@ -46,6 +46,9 @@ class _FemMeshGmsh(): obj.addProperty("App::PropertyLinkList", "MeshRegionList", "Base", "Mesh regions of the mesh") obj.MeshRegionList = [] + obj.addProperty("App::PropertyLinkList", "MeshGroupList", "Base", "Mesh groups of the mesh") + obj.MeshRegionList = [] + obj.addProperty("App::PropertyLink", "Part", "FEM Mesh", "Part object to mesh") obj.Part = None diff --git a/src/Mod/Fem/_FemMeshGroup.py b/src/Mod/Fem/_FemMeshGroup.py new file mode 100644 index 000000000..84380dac6 --- /dev/null +++ b/src/Mod/Fem/_FemMeshGroup.py @@ -0,0 +1,40 @@ +# *************************************************************************** +# * * +# * 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__ = "_FemMeshGroup" +__author__ = "Bernd Hahnebach" +__url__ = "http://www.freecadweb.org" + +## @package FemMeshGroup +# \ingroup FEM + + +class _FemMeshGroup: + "The FemMeshGroup object" + def __init__(self, obj): + obj.addProperty("App::PropertyBool", "UseLabel", "MeshGroupProperties", "The identifier used for export (True: Label, False: Name)") + obj.addProperty("App::PropertyLinkSubList", "References", "MeshGroupShapes", "List of FEM mesh group shapes") + obj.Proxy = self + self.Type = "FemMeshGroup" + + def execute(self, obj): + return diff --git a/src/Mod/Fem/_ViewProviderFemMeshGmsh.py b/src/Mod/Fem/_ViewProviderFemMeshGmsh.py index 02f3a7880..7948933a8 100644 --- a/src/Mod/Fem/_ViewProviderFemMeshGmsh.py +++ b/src/Mod/Fem/_ViewProviderFemMeshGmsh.py @@ -112,7 +112,7 @@ class _ViewProviderFemMeshGmsh: return None def claimChildren(self): - return self.Object.MeshRegionList + return (self.Object.MeshRegionList + self.Object.MeshGroupList) def onDelete(self, feature, subelements): try: diff --git a/src/Mod/Fem/_ViewProviderFemMeshGroup.py b/src/Mod/Fem/_ViewProviderFemMeshGroup.py new file mode 100644 index 000000000..c03377f0b --- /dev/null +++ b/src/Mod/Fem/_ViewProviderFemMeshGroup.py @@ -0,0 +1,89 @@ +# *************************************************************************** +# * * +# * 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__ = "_ViewProviderFemMeshGroup" +__author__ = "Bernd Hahnebach" +__url__ = "http://www.freecadweb.org" + +## @package ViewProviderFemMeshGroup +# \ingroup FEM + +import FreeCAD +import FreeCADGui +from pivy import coin + + +class _ViewProviderFemMeshGroup: + "A View Provider for the FemMeshGroup object" + def __init__(self, vobj): + vobj.Proxy = self + + def getIcon(self): + return ":/icons/fem-femmesh-from-shape.svg" + + def attach(self, vobj): + self.ViewObject = vobj + self.Object = vobj.Object + self.standard = coin.SoGroup() + vobj.addDisplayMode(self.standard, "Standard") + + def getDisplayModes(self, obj): + return ["Standard"] + + def getDefaultDisplayMode(self): + return "Standard" + + def updateData(self, obj, prop): + return + + def onChanged(self, vobj, prop): + return + + def setEdit(self, vobj, mode=0): + # hide all meshes + for o in FreeCAD.ActiveDocument.Objects: + if o.isDerivedFrom("Fem::FemMeshObject"): + o.ViewObject.hide() + # show task panel + import _TaskPanelFemMeshGroup + taskd = _TaskPanelFemMeshGroup._TaskPanelFemMeshGroup(self.Object) + taskd.obj = vobj.Object + FreeCADGui.Control.showDialog(taskd) + return True + + def unsetEdit(self, vobj, mode=0): + FreeCADGui.Control.closeDialog() + return + + def doubleClicked(self, vobj): + doc = FreeCADGui.getDocument(vobj.Object.Document) + if not doc.getInEdit(): + doc.setEdit(vobj.Object.Name) + else: + FreeCAD.Console.PrintError('Active Task Dialog found! Please close this one first!\n') + return True + + def __getstate__(self): + return None + + def __setstate__(self, state): + return None