Skip to content

Commit

Permalink
FEM: mesh group, add object
Browse files Browse the repository at this point in the history
  • Loading branch information
berndhahnebach authored and yorikvanhavre committed Jan 7, 2017
1 parent edb1f02 commit c72cd50
Show file tree
Hide file tree
Showing 7 changed files with 189 additions and 1 deletion.
3 changes: 3 additions & 0 deletions src/Mod/Fem/App/CMakeLists.txt
Expand Up @@ -83,6 +83,7 @@ SET(FemScripts_SRCS
_FemConstraintSelfWeight.py
_FemMaterialMechanicalNonlinear.py
_FemMeshGmsh.py
_FemMeshGroup.py
_FemMeshRegion.py
_FemShellThickness.py
_FemSolverCalculix.py
Expand All @@ -99,6 +100,7 @@ SET(FemScripts_SRCS
_ViewProviderFemConstraintSelfWeight.py
_ViewProviderFemMaterialMechanicalNonlinear.py
_ViewProviderFemMeshGmsh.py
_ViewProviderFemMeshGroup.py
_ViewProviderFemMeshRegion.py
_ViewProviderFemShellThickness.py
_ViewProviderFemSolverCalculix.py
Expand All @@ -122,6 +124,7 @@ SET(FemScripts_SRCS
FemMaterialMechanicalNonlinear.py
FemMesh2Mesh.py
FemMeshGmsh.py
FemMeshGroup.py
FemMeshRegion.py
FemMeshTools.py
FemShellThickness.py
Expand Down
4 changes: 4 additions & 0 deletions src/Mod/Fem/CMakeLists.txt
Expand Up @@ -55,6 +55,10 @@ INSTALL(
FemMesh2Mesh.py
_CommandFEMMesh2Mesh.py

FemMeshGroup.py
_FemMeshGroup.py
_ViewProviderFemMeshGroup.py

FemMeshRegion.py
_FemMeshRegion.py
_ViewProviderFemMeshRegion.py
Expand Down
49 changes: 49 additions & 0 deletions src/Mod/Fem/FemMeshGroup.py
@@ -0,0 +1,49 @@
# ***************************************************************************
# * *
# * Copyright (c) 2016 - Bernd Hahnebach <bernd@bimstatik.org> *
# * *
# * 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

# @}
3 changes: 3 additions & 0 deletions src/Mod/Fem/_FemMeshGmsh.py
Expand Up @@ -46,6 +46,9 @@ def __init__(self, obj):
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

Expand Down
40 changes: 40 additions & 0 deletions src/Mod/Fem/_FemMeshGroup.py
@@ -0,0 +1,40 @@
# ***************************************************************************
# * *
# * Copyright (c) 2016 - Bernd Hahnebach <bernd@bimstatik.org> *
# * *
# * 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
2 changes: 1 addition & 1 deletion src/Mod/Fem/_ViewProviderFemMeshGmsh.py
Expand Up @@ -112,7 +112,7 @@ def __setstate__(self, state):
return None

def claimChildren(self):
return self.Object.MeshRegionList
return (self.Object.MeshRegionList + self.Object.MeshGroupList)

def onDelete(self, feature, subelements):
try:
Expand Down
89 changes: 89 additions & 0 deletions src/Mod/Fem/_ViewProviderFemMeshGroup.py
@@ -0,0 +1,89 @@
# ***************************************************************************
# * *
# * Copyright (c) 2016 - Bernd Hahnebach <bernd@bimstatik.org> *
# * *
# * 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

0 comments on commit c72cd50

Please sign in to comment.