diff --git a/src/Mod/Fem/FemInputWriter.py b/src/Mod/Fem/FemInputWriter.py index 970a78e64..f69d48b5c 100644 --- a/src/Mod/Fem/FemInputWriter.py +++ b/src/Mod/Fem/FemInputWriter.py @@ -85,6 +85,7 @@ class FemInputWriter(): self.femnodes_mesh = {} self.femelement_table = {} self.constraint_conflict_nodes = [] + self.femnodes_ele_table = {} def get_constraints_fixed_nodes(self): # get nodes @@ -159,9 +160,25 @@ class FemInputWriter(): def get_constraints_pressure_faces(self): # TODO see comments in get_constraints_force_nodeloads(), it applies here too. Mhh it applies to all constraints ... + ''' + # depreciated version # get the faces and face numbers for femobj in self.pressure_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] - femobj['PressureFaces'] = FemMeshTools.get_pressure_obj_faces(self.femmesh, femobj) - # print femobj['PressureFaces'] + femobj['PressureFaces'] = FemMeshTools.get_pressure_obj_faces_depreciated(self.femmesh, femobj) + # print(femobj['PressureFaces']) + ''' + + if not self.femnodes_mesh: + self.femnodes_mesh = self.femmesh.Nodes + if not self.femelement_table: + self.femelement_table = FemMeshTools.get_femelement_table(self.femmesh) + if not self.femnodes_ele_table: + self.femnodes_ele_table = FemMeshTools.get_femnodes_ele_table(self.femnodes_mesh, self.femelement_table) + + for femobj in self.pressure_objects: # femobj --> dict, FreeCAD document object is femobj['Object'] + pressure_faces = FemMeshTools.get_pressure_obj_faces(self.femmesh, self.femelement_table, self.femnodes_ele_table, femobj) + # print(len(pressure_faces)) + femobj['PressureFaces'] = [(femobj['Object'].Name + ': face load', pressure_faces)] + # print(femobj['PressureFaces']) # @} diff --git a/src/Mod/Fem/FemMeshTools.py b/src/Mod/Fem/FemMeshTools.py index b09f9a559..5a4c00565 100644 --- a/src/Mod/Fem/FemMeshTools.py +++ b/src/Mod/Fem/FemMeshTools.py @@ -491,7 +491,7 @@ def get_force_obj_edge_nodeload_table(femmesh, femelement_table, femnodes_mesh, return force_obj_node_load_table -def get_pressure_obj_faces(femmesh, femobj): +def get_pressure_obj_faces_depreciated(femmesh, femobj): pressure_faces = [] for o, elem_tup in femobj['Object'].References: for elem in elem_tup: @@ -503,6 +503,16 @@ def get_pressure_obj_faces(femmesh, femobj): return pressure_faces +def get_pressure_obj_faces(femmesh, femelement_table, femnodes_ele_table, femobj): + # get the nodes + prs_face_node_set = get_femnodes_by_femobj_with_references(femmesh, femobj) # sorted and duplicates removed + # print('prs_face_node_set: ', prs_face_node_set) + # fill the bit_pattern_dict and search for the faces + bit_pattern_dict = get_bit_pattern_dict(femelement_table, femnodes_ele_table, prs_face_node_set) + pressure_faces = get_ccxelement_faces_from_binary_search(bit_pattern_dict) + return pressure_faces + + def get_force_obj_face_nodeload_table(femmesh, femelement_table, femnodes_mesh, frc_obj): # force_obj_node_load_table = [('refshape_name.elemname',node_load_table), ..., ('refshape_name.elemname',node_load_table)] force_obj_node_load_table = []