From 6ab0937ea0198050f9e5fe52067bce5222bacd13 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Mon, 17 Oct 2016 10:22:57 +0100 Subject: [PATCH] FEM: input writer ccx, most constraints, use nodes from group data if available --- src/Mod/Fem/FemInputWriter.py | 10 +++++----- src/Mod/Fem/FemMeshTools.py | 27 ++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/Mod/Fem/FemInputWriter.py b/src/Mod/Fem/FemInputWriter.py index c9063360e15c..fc7b087b6fde 100644 --- a/src/Mod/Fem/FemInputWriter.py +++ b/src/Mod/Fem/FemInputWriter.py @@ -87,7 +87,7 @@ def __init__(self, def get_constraints_fixed_nodes(self): # get nodes for femobj in self.fixed_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] - femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References) + femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) # add nodes to constraint_conflict_nodes, needed by constraint plane rotation for node in femobj['Nodes']: self.constraint_conflict_nodes.append(node) @@ -95,7 +95,7 @@ def get_constraints_fixed_nodes(self): def get_constraints_displacement_nodes(self): # get nodes for femobj in self.displacement_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] - femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References) + femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) # add nodes to constraint_conflict_nodes, needed by constraint plane rotation for node in femobj['Nodes']: self.constraint_conflict_nodes.append(node) @@ -103,17 +103,17 @@ def get_constraints_displacement_nodes(self): def get_constraints_planerotation_nodes(self): # get nodes for femobj in self.planerotation_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] - femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References) + femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) def get_constraints_transform_nodes(self): # get nodes for femobj in self.transform_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] - femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References) + femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) def get_constraints_temperature_nodes(self): # get nodes for femobj in self.temperature_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] - femobj['Nodes'] = FemMeshTools.get_femnodes_by_references(self.femmesh, femobj['Object'].References) + femobj['Nodes'] = FemMeshTools.get_femnodes_by_femobj_with_references(self.femmesh, femobj) def get_constraints_force_nodeloads(self): # check shape type of reference shape diff --git a/src/Mod/Fem/FemMeshTools.py b/src/Mod/Fem/FemMeshTools.py index 18e93f3bbdf9..d1e3d7efcc3a 100644 --- a/src/Mod/Fem/FemMeshTools.py +++ b/src/Mod/Fem/FemMeshTools.py @@ -29,6 +29,17 @@ import FreeCAD +def get_femnodes_by_femobj_with_references(femmesh, femobj): + node_set = [] + if femmesh.GroupCount: + node_set = get_femnode_set_from_group_data(femmesh, femobj) + # print 'node_set_group: ', node_set + if not node_set: + node_set = get_femnodes_by_references(femmesh, femobj['Object'].References) + # print 'node_set_nogroup: ', node_set + return node_set + + def get_femelements_by_references(femmesh, femelement_table, references): '''get the femelements for a list of references ''' @@ -195,9 +206,23 @@ def get_femelement_sets(femmesh, femelement_table, fem_objects): # fem_objects FreeCAD.Console.PrintError('Error in get_femelement_sets -- > femelements_count_ok() failed!\n') +def get_femnode_set_from_group_data(femmesh, fem_object): + # get femnodes from femmesh groupdata for reference shapes of each obj.References + # we assume the mesh group data fits with the reference shapes, no check is done in this regard !!! + # what happens if a reference shape was changed, but the mesh and the mesh groups were not created new !?! + obj = fem_object['Object'] + if femmesh.GroupCount: + for g in femmesh.Groups: + grp_name = femmesh.getGroupName(g) + if grp_name.startswith(obj.Name + '_'): + if femmesh.getGroupElementType(g) == "Node": + print("Constraint: " + obj.Name + " --> " + "mesh group: " + grp_name) + group_nodes = femmesh.getGroupElements(g) # == ref_shape_femelements + return group_nodes + + def get_femelement_sets_from_group_data(femmesh, fem_objects): # get femelements from femmesh groupdata for reference shapes of each obj.References - print("") count_femelements = 0 sum_group_elements = [] # we assume the mesh group data fits with the reference shapes, no check is done in this regard !!!