Beispiel #1
0
 def get_constraints_fixed_nodes(self):
     # get nodes
     for femobj in self.fixed_objects:  # femobj --> dict, FreeCAD document object is femobj['Object']
         FreeCAD.Console.PrintMessage("Constraint fixed: " + femobj['Object'].Name + '\n')
         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)
     # if mixed mesh with solids the node set needs to be split because solid nodes do not have rotational degree of freedom
     if self.femmesh.Volumes and (len(self.shellthickness_objects) > 0 or len(self.beamsection_objects) > 0):
         print('We need to find the solid nodes.')
         if not self.femelement_volumes_table:
             self.femelement_volumes_table = FemMeshTools.get_femelement_volumes_table(self.femmesh)
         for femobj in self.fixed_objects:  # femobj --> dict, FreeCAD document object is femobj['Object']
             nds_solid = []
             nds_faceedge = []
             for n in femobj['Nodes']:
                 solid_node = False
                 for ve in self.femelement_volumes_table:
                     if n in self.femelement_volumes_table[ve]:
                         solid_node = True
                         nds_solid.append(n)
                         break
                 if not solid_node:
                     nds_faceedge.append(n)
             femobj['NodesSolid'] = set(nds_solid)
             femobj['NodesFaceEdge'] = set(nds_faceedge)
Beispiel #2
0
 def get_constraints_fixed_nodes(self):
     # get nodes
     for femobj in self.fixed_objects:
         # femobj --> dict, FreeCAD document object is femobj["Object"]
         print_obj_info(femobj["Object"])
         femobj["Nodes"] = meshtools.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)
     # if mixed mesh with solids the node set needs to be split
     # because solid nodes do not have rotational degree of freedom
     if self.femmesh.Volumes \
             and (len(self.shellthickness_objects) > 0 or len(self.beamsection_objects) > 0):
         FreeCAD.Console.PrintMessage("We need to find the solid nodes.\n")
         if not self.femelement_volumes_table:
             self.femelement_volumes_table = meshtools.get_femelement_volumes_table(
                 self.femmesh)
         for femobj in self.fixed_objects:
             # femobj --> dict, FreeCAD document object is femobj["Object"]
             nds_solid = []
             nds_faceedge = []
             for n in femobj["Nodes"]:
                 solid_node = False
                 for ve in self.femelement_volumes_table:
                     if n in self.femelement_volumes_table[ve]:
                         solid_node = True
                         nds_solid.append(n)
                         break
                 if not solid_node:
                     nds_faceedge.append(n)
             femobj["NodesSolid"] = set(nds_solid)
             femobj["NodesFaceEdge"] = set(nds_faceedge)
Beispiel #3
0
 def get_material_elements(self):
     # it only works if either Volumes or Shellthicknesses or Beamsections are in the material objects
     # it means it does not work for mixed meshes and multiple materials, this is checked in check_prerequisites
     FreeCAD.Console.PrintMessage('Materials\n')
     if self.femmesh.Volumes:
         # we only could do this for volumes, if a mesh contains volumes we're going to use them in the analysis
         # but a mesh could contain the element faces of the volumes as faces and the edges of the faces as edges,
         # there we have to check of some geometric objects
         all_found = False
         if self.femmesh.GroupCount:
             all_found = FemMeshTools.get_femelement_sets_from_group_data(
                 self.femmesh, self.material_objects)
             FreeCAD.Console.PrintMessage(all_found)
             FreeCAD.Console.PrintMessage('\n')
         if all_found is False:
             if not self.femelement_volumes_table:
                 self.femelement_volumes_table = FemMeshTools.get_femelement_volumes_table(
                     self.femmesh)
             # we're going to use the binary search for get_femelements_by_femnodes()
             # thus we need the parameter values self.femnodes_ele_table
             if not self.femnodes_mesh:
                 self.femnodes_mesh = self.femmesh.Nodes
             if not self.femnodes_ele_table:
                 self.femnodes_ele_table = FemMeshTools.get_femnodes_ele_table(
                     self.femnodes_mesh, self.femelement_table)
             FemMeshTools.get_femelement_sets(self.femmesh,
                                              self.femelement_table,
                                              self.material_objects,
                                              self.femnodes_ele_table)
     if self.shellthickness_objects:
         if not self.femelement_faces_table:
             self.femelement_faces_table = FemMeshTools.get_femelement_faces_table(
                 self.femmesh)
         FemMeshTools.get_femelement_sets(self.femmesh,
                                          self.femelement_faces_table,
                                          self.material_objects)
     if self.beamsection_objects or self.fluidsection_objects:
         if not self.femelement_edges_table:
             self.femelement_edges_table = FemMeshTools.get_femelement_edges_table(
                 self.femmesh)
         FemMeshTools.get_femelement_sets(self.femmesh,
                                          self.femelement_edges_table,
                                          self.material_objects)