From 5602c4e644d50cfda2839c5fffa37077ed8dd7c3 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Sun, 31 Mar 2019 15:08:14 +0200 Subject: [PATCH] FEM: prints, use FreeCAD Console prints on lot of places --- src/Mod/Fem/feminout/importCcxDatResults.py | 2 +- src/Mod/Fem/feminout/importCcxFrdResults.py | 2 +- src/Mod/Fem/femmesh/meshtools.py | 257 ++++++++++---------- 3 files changed, 129 insertions(+), 132 deletions(-) diff --git a/src/Mod/Fem/feminout/importCcxDatResults.py b/src/Mod/Fem/feminout/importCcxDatResults.py index 76cb499c09..fb545482fd 100644 --- a/src/Mod/Fem/feminout/importCcxDatResults.py +++ b/src/Mod/Fem/feminout/importCcxDatResults.py @@ -69,7 +69,7 @@ def import_dat(filename, Analysis=None): # read a calculix result file and extract the data def readResult(dat_input): - print('Read ccx results from dat file: ' + dat_input) + FreeCAD.Console.PrintMessage('Read ccx results from dat file: {}\n'.format(dat_input)) dat_file = pyopen(dat_input, "r") eigenvalue_output_section_found = False mode_reading = False diff --git a/src/Mod/Fem/feminout/importCcxFrdResults.py b/src/Mod/Fem/feminout/importCcxFrdResults.py index 3d9061d44c..855f807529 100644 --- a/src/Mod/Fem/feminout/importCcxFrdResults.py +++ b/src/Mod/Fem/feminout/importCcxFrdResults.py @@ -129,7 +129,7 @@ def importFrd(filename, analysis=None, result_name_prefix=None): # read a calculix result file and extract the nodes, displacement vectors and stress values. def read_frd_result(frd_input): - print('Read ccx results from frd file: ' + frd_input) + FreeCAD.Console.PrintMessage('Read ccx results from frd file: {}\n'.format(frd_input)) inout_nodes = [] inout_nodes_file = frd_input.rsplit('.', 1)[0] + '_inout_nodes.txt' if os.path.exists(inout_nodes_file): diff --git a/src/Mod/Fem/femmesh/meshtools.py b/src/Mod/Fem/femmesh/meshtools.py index cb46fb3efd..3e129449d1 100644 --- a/src/Mod/Fem/femmesh/meshtools.py +++ b/src/Mod/Fem/femmesh/meshtools.py @@ -34,13 +34,13 @@ def get_femnodes_by_femobj_with_references(femmesh, femobj): node_set = [] if femmesh.GroupCount: node_set = get_femmesh_groupdata_sets_by_name(femmesh, femobj, 'Node') - # print('node_set_group: ', node_set) + # FreeCAD.Console.PrintMessage('node_set_group: {}\n'.format(node_set)) if node_set: - print(" nodes where retrieved from existent FEM mesh group data") + FreeCAD.Console.PrintMessage(" nodes where retrieved from existent FEM mesh group data\n") if not node_set: - print(" nodes will be retrieved by searching the appropriate nodes in the FEM mesh") + FreeCAD.Console.PrintMessage(" nodes will be retrieved by searching the appropriate nodes in the FEM mesh\n") node_set = get_femnodes_by_references(femmesh, femobj['Object'].References) - # print('node_set_nogroup: ', node_set) + # FreeCAD.Console.PrintMessage('node_set_nogroup: {}\n'.format(node_set)) return node_set @@ -77,7 +77,7 @@ def get_femnodes_by_refshape(femmesh, ref): nodes = [] for refelement in ref[1]: r = get_element(ref[0], refelement) # the method getElement(element) does not return Solid elements - print(' ReferenceShape ... Type: ' + r.ShapeType + ', Object name: ' + ref[0].Name + ', Object label: ' + ref[0].Label + ', Element name: ' + refelement) + FreeCAD.Console.PrintMessage(' ReferenceShape ... Type: ' + r.ShapeType + ', Object name: ' + ref[0].Name + ', Object label: ' + ref[0].Label + ', Element name: ' + refelement + '\n') if r.ShapeType == 'Vertex': nodes += femmesh.getNodesByVertex(r) elif r.ShapeType == 'Edge': @@ -87,7 +87,7 @@ def get_femnodes_by_refshape(femmesh, ref): elif r.ShapeType == 'Solid': nodes += femmesh.getNodesBySolid(r) else: - print(' No Vertice, Edge, Face or Solid as reference shapes!') + FreeCAD.Console.PrintMessage(' No Vertice, Edge, Face or Solid as reference shapes!\n') return nodes @@ -152,13 +152,13 @@ def get_femnodes_ele_table(femnodes_mesh, femelement_table): femnodes_ele_table[n] = [] for ele in femelement_table: ele_list = femelement_table[ele] - # print(ele_list) + # FreeCAD.Console.PrintMessage('{}\n'.format(ele_list)) pos = int(1) for ele_node in ele_list: femnodes_ele_table[ele_node].append([ele, pos]) pos = pos << 1 - print('len femnodes_ele_table: ' + str(len(femnodes_ele_table))) - # print('femnodes_ele_table: ', femnodes_ele_table) + FreeCAD.Console.PrintMessage('len femnodes_ele_table: ' + str(len(femnodes_ele_table)) + '\n') + # FreeCAD.Console.PrintMessage('femnodes_ele_table: {}\n'.format(femnodes_ele_table)) return femnodes_ele_table @@ -182,9 +182,9 @@ def get_bit_pattern_dict(femelement_table, femnodes_ele_table, node_set): The number in the ele_dict is organized as a bit array. The corresponding bit is set, if the node of the node_set is contained in the element. ''' - print('len femnodes_ele_table: ' + str(len(femnodes_ele_table))) - print('len node_set: ' + str(len(node_set))) - # print('node_set: ', node_set) + FreeCAD.Console.PrintMessage('len femnodes_ele_table: ' + str(len(femnodes_ele_table)) + '\n') + FreeCAD.Console.PrintMessage('len node_set: ' + str(len(node_set)) + '\n') + # FreeCAD.Console.PrintMessage('node_set: {}\n'.format(node_set)) bit_pattern_dict = get_copy_of_empty_femelement_table(femelement_table) # # initializing the bit_pattern_dict for ele in femelement_table: @@ -193,8 +193,8 @@ def get_bit_pattern_dict(femelement_table, femnodes_ele_table, node_set): for node in node_set: for nList in femnodes_ele_table[node]: bit_pattern_dict[nList[0]][1] += nList[1] - print('len bit_pattern_dict: ' + str(len(bit_pattern_dict))) - # print('bit_pattern_dict: ', bit_pattern_dict) + FreeCAD.Console.PrintMessage('len bit_pattern_dict: ' + str(len(bit_pattern_dict)) + '\n') + # FreeCAD.Console.PrintMessage('bit_pattern_dict: {}\n'.format(bit_pattern_dict)) return bit_pattern_dict @@ -250,8 +250,8 @@ def get_ccxelement_faces_from_binary_search(bit_pattern_dict): for key in mask_dict: if (key & bit_pattern_dict[ele][1]) == key: faces.append([ele, mask_dict[key]]) - print('found Faces: ', len(faces)) - print('faces: ', faces) + FreeCAD.Console.PrintMessage('found Faces: {}\n'.format(len(faces))) + # FreeCAD.Console.PrintMessage('faces: {}\n'.format(faces)) return faces @@ -261,7 +261,7 @@ def get_femelements_by_femnodes_bin(femelement_table, femnodes_ele_table, node_l the femelement is added to the list which is returned blind fast binary search, but works for volumes only ''' - print('binary search: get_femelements_by_femnodes_bin') + FreeCAD.Console.PrintMessage('binary search: get_femelements_by_femnodes_bin\n') vol_masks = { 4: 15, 6: 63, @@ -270,16 +270,16 @@ def get_femelements_by_femnodes_bin(femelement_table, femnodes_ele_table, node_l 15: 32767, 20: 1048575} # Now we are looking for nodes inside of the Volumes = filling the bit_pattern_dict - print('len femnodes_ele_table: ' + str(len(femnodes_ele_table))) + FreeCAD.Console.PrintMessage('len femnodes_ele_table: ' + str(len(femnodes_ele_table)) + '\n') bit_pattern_dict = get_bit_pattern_dict(femelement_table, femnodes_ele_table, node_list) # search ele_list = [] # The ele_list contains the result of the search. for ele in bit_pattern_dict: - # print('bit_pattern_dict[ele][0]: ', bit_pattern_dict[ele][0]) + # FreeCAD.Console.PrintMessage('bit_pattern_dict[ele][0]: {}\n'.format(bit_pattern_dict[ele][0])) if bit_pattern_dict[ele][1] == vol_masks[bit_pattern_dict[ele][0]]: ele_list.append(ele) - print('found Volumes: ', len(ele_list)) - print(' volumes: ', len(ele_list)) + FreeCAD.Console.PrintMessage('found Volumes: {}\n'.format(len(ele_list))) + # FreeCAD.Console.PrintMessage(' volumes: {}\n'.format(ele_list)) return ele_list @@ -289,7 +289,7 @@ def get_femelements_by_femnodes_std(femelement_table, node_list): the femelement is added to the list which is returned e: elementlist nodes: nodelist ''' - print('std search: get_femelements_by_femnodes_std') + FreeCAD.Console.PrintMessage('std search: get_femelements_by_femnodes_std\n') e = [] # elementlist for elementID in sorted(femelement_table): nodecount = 0 @@ -353,7 +353,7 @@ def get_femvolumeelements_by_femfacenodes(femelement_table, node_list): e.append(elementID) else: FreeCAD.Console.PrintError('Error in get_femvolumeelements_by_femfacenodes(): unknown volume element: ' + el_nd_ct + '\n') - # print(sorted(e)) + # FreeCAD.Console.PrintMessage('{}\n'.format(sorted(e))) return e @@ -364,7 +364,7 @@ def get_femelement_sets(femmesh, femelement_table, fem_objects, femnodes_ele_tab has_remaining_femelements = None for fem_object_i, fem_object in enumerate(fem_objects): obj = fem_object['Object'] - print("Constraint: " + obj.Name + " --> " + "We're going to search in the mesh for the element ID's.") + FreeCAD.Console.PrintMessage("Constraint: " + obj.Name + " --> " + "We're going to search in the mesh for the element ID's.\n") fem_object['ShortName'] = get_elset_short_name(obj, fem_object_i) # unique short identifier if obj.References: ref_shape_femelements = [] @@ -434,8 +434,8 @@ def get_femelement_direction1D_set(femmesh, femelement_table, beamrotation_objec # pre check, only one beam rotation with empty ref shapes is allowed # we need theshape for multiple rotations too, because of the corner cases mentioned above FreeCAD.Console.PrintError('Multiple Rotations not yet supported!\n') - for rot_object in beamrotation_objects: # debug print - print(rot_object['FEMRotations1D']) + for rot_object in beamrotation_objects: # debug output + FreeCAD.Console.PrintMessage('{}\n'.format(rot_object['FEMRotations1D'])) def get_femelement_directions_theshape(femmesh, femelement_table, theshape): @@ -505,8 +505,8 @@ def get_beam_normal(beam_direction, defined_angle): Dot_product_check_nt = vector_a[0] * normal_n[0] + vector_a[1] * normal_n[1] + vector_a[2] * normal_n[2] Dot_product_check = vector_a[0] * normal_n[0] + vector_a[1] * normal_n[1] + vector_a[2] * normal_n[2] - # print(Dot_product_check) - # print(normal_n) + # FreeCAD.Console.PrintMessage('{}\n'.format(Dot_product_check)) + # FreeCAD.Console.PrintMessage('{}\n'.format(normal_n)) # dummy usage of the axis Dot_product_check to get flake8 quiet del Dot_product_check_x, Dot_product_check_y, Dot_product_check_z, Dot_product_check, Dot_product_check_nt @@ -525,7 +525,7 @@ def get_femmesh_groupdata_sets_by_name(femmesh, fem_object, group_data_type): grp_name = femmesh.getGroupName(g) if grp_name.startswith(obj.Name + "_"): if femmesh.getGroupElementType(g) == group_data_type: - print(" found mesh group for the IDs: " + grp_name + ', Type: ' + group_data_type) + FreeCAD.Console.PrintMessage(" found mesh group for the IDs: " + grp_name + ', Type: ' + group_data_type + '\n') return femmesh.getGroupElements(g) # == ref_shape_femelements return () # an empty tuple is returned if no group data IDs where found @@ -536,7 +536,7 @@ def get_femelement_sets_from_group_data(femmesh, fem_objects): sum_group_elements = [] for fem_object_i, fem_object in enumerate(fem_objects): obj = fem_object['Object'] - print("Constraint: " + obj.Name + " --> " + "We have mesh groups. We will search for appropriate group data.") + FreeCAD.Console.PrintMessage("Constraint: " + obj.Name + " --> " + "We have mesh groups. We will search for appropriate group data.\n") fem_object['ShortName'] = get_elset_short_name(obj, fem_object_i) # unique short identifier group_elements = get_femmesh_groupdata_sets_by_name(femmesh, fem_object, 'Volume') # see comments over there ! sum_group_elements += group_elements @@ -548,7 +548,6 @@ def get_femelement_sets_from_group_data(femmesh, fem_objects): return False else: return True - # print("") def get_elset_short_name(obj, i): @@ -613,8 +612,8 @@ def get_force_obj_edge_nodeload_table(femmesh, femelement_table, femnodes_mesh, ratio_refedge_lengths = sum_node_lengths / ref_edge.Length if ratio_refedge_lengths < 0.99 or ratio_refedge_lengths > 1.01: FreeCAD.Console.PrintError('Error on: ' + frc_obj.Name + ' --> ' + o.Name + '.' + elem + '\n') - print(' sum_node_lengths: ', sum_node_lengths) - print(' refedge_length: ', ref_edge.Length) + FreeCAD.Console.PrintMessage(' sum_node_lengths: {}\n'.format(sum_node_lengths)) + FreeCAD.Console.PrintMessage(' refedge_length: {}\n'.format(ref_edge.Length)) bad_refedge = ref_edge sum_ref_edge_node_length += sum_node_lengths @@ -627,50 +626,50 @@ def get_force_obj_edge_nodeload_table(femmesh, femelement_table, femnodes_mesh, ratio = sum_node_load / frc_obj.Force if ratio < 0.99 or ratio > 1.01: - print('Deviation sum_node_load to frc_obj.Force is more than 1% : ', ratio) - print(' sum_ref_edge_node_length: ', sum_ref_edge_node_length) - print(' sum_ref_edge_length: ', sum_ref_edge_length) - print(' sum_node_load: ', sum_node_load) - print(' frc_obj.Force: ', frc_obj.Force) - print(' the reason could be simply a circle length --> see method get_ref_edge_node_lengths') - print(' the reason could also be a problem in retrieving the ref_edge_node_length') + FreeCAD.Console.PrintMessage('Deviation sum_node_load to frc_obj.Force is more than 1% : {}\n'.format(ratio)) + FreeCAD.Console.PrintMessage(' sum_ref_edge_node_length: {}\n'.format(sum_ref_edge_node_length)) + FreeCAD.Console.PrintMessage(' sum_ref_edge_length: {}\n'.format(sum_ref_edge_length)) + FreeCAD.Console.PrintMessage(' sum_node_load: {}\n'.format(sum_node_load)) + FreeCAD.Console.PrintMessage(' frc_obj.Force: {}\n'.format(frc_obj.Force)) + FreeCAD.Console.PrintMessage(' the reason could be simply a circle length --> see method get_ref_edge_node_lengths\n') + FreeCAD.Console.PrintMessage(' the reason could also be a problem in retrieving the ref_edge_node_length\n') # try debugging of the last bad refedge - print('DEBUGGING') - print(bad_refedge) + FreeCAD.Console.PrintMessage('DEBUGGING\n') + FreeCAD.Console.PrintMessage('\n'.format(bad_refedge)) - print('bad_refedge_nodes') + FreeCAD.Console.PrintMessage('bad_refedge_nodes\n') bad_refedge_nodes = femmesh.getNodesByEdge(bad_refedge) - print(len(bad_refedge_nodes)) - print(bad_refedge_nodes) + FreeCAD.Console.PrintMessage('{}\n'.format(len(bad_refedge_nodes))) + FreeCAD.Console.PrintMessage('{}\n'.format(bad_refedge_nodes)) # import FreeCADGui # FreeCADGui.ActiveDocument.Compound_Mesh.HighlightedNodes = bad_refedge_nodes - print('bad_edge_table') + FreeCAD.Console.PrintMessage('bad_edge_table\n') # bad_edge_table = { meshedgeID : ( nodeID, ... , nodeID ) } bad_edge_table = get_ref_edgenodes_table(femmesh, femelement_table, bad_refedge) - print(len(bad_edge_table)) + FreeCAD.Console.PrintMessage('{}\n'.format(len(bad_edge_table))) bad_edge_table_nodes = [] for elem in bad_edge_table: - print(elem, ' --> ', bad_edge_table[elem]) + FreeCAD.Console.PrintMessage(elem, ' --> \n'.format(bad_edge_table[elem])) for node in bad_edge_table[elem]: if node not in bad_edge_table_nodes: bad_edge_table_nodes.append(node) - print('sorted(bad_edge_table_nodes)') - print(sorted(bad_edge_table_nodes)) # should be == bad_refedge_nodes + FreeCAD.Console.PrintMessage('sorted(bad_edge_table_nodes)\n') + FreeCAD.Console.PrintMessage('{}\n'.format(sorted(bad_edge_table_nodes))) # should be == bad_refedge_nodes # import FreeCADGui # FreeCADGui.ActiveDocument.Compound_Mesh.HighlightedNodes = bad_edge_table_nodes # bad_node_length_table = [ (nodeID, length), ... , (nodeID, length) ] some nodes will have more than one entry - print('good_edge_table') + FreeCAD.Console.PrintMessage('good_edge_table\n') good_edge_table = delete_duplicate_mesh_elements(bad_edge_table) for elem in good_edge_table: - print(elem, ' --> ', bad_edge_table[elem]) + FreeCAD.Console.PrintMessage('{} --> {}\n'.format(elem, bad_edge_table[elem])) - print('bad_node_length_table') + FreeCAD.Console.PrintMessage('bad_node_length_table\n') bad_node_length_table = get_ref_edgenodes_lengths(femnodes_mesh, bad_edge_table) for n, l in bad_node_length_table: - print(n, ' --> ', l) + FreeCAD.Console.PrintMessage('{} --> {}\n'.format(n, l)) return force_obj_node_load_table @@ -681,7 +680,7 @@ def get_pressure_obj_faces_depreciated(femmesh, femobj): for elem in elem_tup: ref_shape = o.Shape.getElement(elem) elem_info_string = 'face load on shape: ' + o.Name + ':' + elem - print(elem_info_string) + FreeCAD.Console.PrintMessage('{}\n'.format(elem_info_string)) if ref_shape.ShapeType == 'Face': pressure_faces.append((elem_info_string, femmesh.getccxVolumesByFace(ref_shape))) return pressure_faces @@ -691,7 +690,7 @@ def get_pressure_obj_faces(femmesh, femelement_table, femnodes_ele_table, femobj if is_solid_femmesh(femmesh): # 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) + # FreeCAD.Console.PrintMessage('prs_face_node_set: {}\n'.format(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) @@ -700,7 +699,7 @@ def get_pressure_obj_faces(femmesh, femelement_table, femnodes_ele_table, femobj # normally we should call get_femelements_by_references and the group check should be integrated there if femmesh.GroupCount: meshfaces = get_femmesh_groupdata_sets_by_name(femmesh, femobj, 'Face') - # print(meshfaces) + # FreeCAD.Console.PrintMessage('{}\n'.format(meshfaces)) if not meshfaces: FreeCAD.Console.PrintError("Error: Something went wrong in getting the group element faces.\n") else: @@ -748,8 +747,8 @@ def get_force_obj_face_nodeload_table(femmesh, femelement_table, femnodes_mesh, ratio_refface_areas = sum_node_areas / ref_face.Area if ratio_refface_areas < 0.99 or ratio_refface_areas > 1.01: FreeCAD.Console.PrintError('Error on: ' + frc_obj.Name + ' --> ' + o.Name + '.' + elem + '\n') - print(' sum_node_areas: ', sum_node_areas) - print(' ref_face_area: ', ref_face.Area) + FreeCAD.Console.PrintMessage(' sum_node_areas: {}\n'.format(sum_node_areas)) + FreeCAD.Console.PrintMessage(' ref_face_area: {}\n'.format(ref_face.Area)) sum_ref_face_node_area += sum_node_areas elem_info_string = 'node loads on shape: ' + o.Name + ':' + elem @@ -761,13 +760,13 @@ def get_force_obj_face_nodeload_table(femmesh, femelement_table, femnodes_mesh, ratio = sum_node_load / frc_obj.Force if ratio < 0.99 or ratio > 1.01: - print('Deviation sum_node_load to frc_obj.Force is more than 1% : ', ratio) - print(' sum_ref_face_node_area: ', sum_ref_face_node_area) - print(' sum_ref_face_area: ', sum_ref_face_area) - print(' sum_node_load: ', sum_node_load) - print(' frc_obj.Force: ', frc_obj.Force) - print(' the reason could be simply a circle area --> see method get_ref_face_node_areas') - print(' the reason could also be a problem in retrieving the ref_face_node_area') + FreeCAD.Console.PrintMessage('Deviation sum_node_load to frc_obj.Force is more than 1% : {}\n'.format(ratio)) + FreeCAD.Console.PrintMessage(' sum_ref_face_node_area: {}\n'.format(sum_ref_face_node_area)) + FreeCAD.Console.PrintMessage(' sum_ref_face_area: {}\n'.format(sum_ref_face_area)) + FreeCAD.Console.PrintMessage(' sum_node_load: {}\n'.format(sum_node_load)) + FreeCAD.Console.PrintMessage(' frc_obj.Force: {}\n'.format(frc_obj.Force)) + FreeCAD.Console.PrintMessage(' the reason could be simply a circle area --> see method get_ref_face_node_areas\n') + FreeCAD.Console.PrintMessage(' the reason could also be a problem in retrieving the ref_face_node_area\n') return force_obj_node_load_table @@ -830,7 +829,7 @@ def get_ref_edgenodes_lengths(femnodes_mesh, edge_table): return [] node_length_table = [] mesh_edge_length = 0 - # print(len(edge_table)) + # FreeCAD.Console.PrintMessage('{}\n'.format(len(edge_table))) for me in edge_table: femmesh_edgetype = len(edge_table[me]) if femmesh_edgetype == 2: # 2 node femmesh edge @@ -841,7 +840,7 @@ def get_ref_edgenodes_lengths(femnodes_mesh, edge_table): P2 = femnodes_mesh[edge_table[me][1]] edge_vec = P2 - P1 mesh_edge_length = edge_vec.Length - # print(mesh_edge_length) + # FreeCAD.Console.PrintMessage('{}\n'.format(mesh_edge_length)) end_node_length = mesh_edge_length / 2.0 node_length_table.append((edge_table[me][0], end_node_length)) node_length_table.append((edge_table[me][1], end_node_length)) @@ -857,7 +856,7 @@ def get_ref_edgenodes_lengths(femnodes_mesh, edge_table): edge_vec1 = P3 - P1 edge_vec2 = P2 - P3 mesh_edge_length = edge_vec1.Length + edge_vec2.Length - # print(me, ' --> ', mesh_edge_length) + # FreeCAD.Console.PrintMessage('{} --> {}\n'.format(me, mesh_edge_length)) end_node_length = mesh_edge_length / 6.0 middle_node_length = mesh_edge_length * 2.0 / 3.0 node_length_table.append((edge_table[me][0], end_node_length)) @@ -870,7 +869,7 @@ def get_ref_facenodes_table(femmesh, femelement_table, ref_face): face_table = {} # { meshfaceID : ( nodeID, ... , nodeID ) } if is_solid_femmesh(femmesh): if has_no_face_data(femmesh): - print('No face date in volume mesh. We try to use getccxVolumesByFace() to retrieve the volume elements of the ref_face!') + FreeCAD.Console.PrintMessage('No face date in volume mesh. We try to use getccxVolumesByFace() to retrieve the volume elements of the ref_face!\n') # there is no face data # the problem if we retrieve the nodes ourself is they are not sorted we just have the nodes. # We need to sort them according the shell mesh notation of tria3, tria6, quad4, quad8 @@ -878,7 +877,7 @@ def get_ref_facenodes_table(femmesh, femelement_table, ref_face): # try to use getccxVolumesByFace() to get the volume ids of element with elementfaces on the ref_face --> should work for tetra4 and tetra10 ref_face_volume_elements = femmesh.getccxVolumesByFace(ref_face) # list of tupels (mv, ccx_face_nr) if ref_face_volume_elements: # mesh with tetras - print('Use of getccxVolumesByFace() has returned volume elements of the ref_face!') + FreeCAD.Console.PrintMessage('Use of getccxVolumesByFace() has returned volume elements of the ref_face!\n') for ve in ref_face_volume_elements: veID = ve[0] ve_ref_face_nodes = [] @@ -887,7 +886,7 @@ def get_ref_facenodes_table(femmesh, femelement_table, ref_face): ve_ref_face_nodes.append(nodeID) face_table[veID] = ve_ref_face_nodes # { volumeID : ( facenodeID, ... , facenodeID ) } only the ref_face nodes else: # mesh with hexa or penta - print('Use of getccxVolumesByFace() has NOT returned volume elements of the ref_face! We try to use get_femvolumeelements_by_femfacenodes()!') + FreeCAD.Console.PrintMessage('Use of getccxVolumesByFace() has NOT returned volume elements of the ref_face! We try to use get_femvolumeelements_by_femfacenodes()!\n') ref_face_volume_elements = get_femvolumeelements_by_femfacenodes(femelement_table, ref_face_nodes) # list of integer [mv] for veID in ref_face_volume_elements: ve_ref_face_nodes = [] @@ -905,7 +904,7 @@ def get_ref_facenodes_table(femmesh, femelement_table, ref_face): ref_face_elements = get_femelements_by_femnodes_std(femelement_table, ref_face_nodes) for mf in ref_face_elements: face_table[mf] = femelement_table[mf] - # print(face_table) + # FreeCAD.Console.PrintMessage('{}\n'.format(face_table)) return face_table @@ -917,12 +916,12 @@ def build_mesh_faces_of_volume_elements(face_table, femelement_table): face_nodenumber_table[veID] = [] for n in face_table[veID]: index = femelement_table[veID].index(n) - # print(index) + # FreeCAD.Console.PrintMessage('{}\n'.format(index)) face_nodenumber_table[veID].append(index + 1) # local node number = index + 1 - # print('VolElement: ', veID) - # print(' --> ', femelement_table[veID]) - # print(' --> ', face_table[veID]) - # print(' --> ', face_nodenumber_table[veID]) + # FreeCAD.Console.PrintMessage('VolElement: {}\n'.format(veID)) + # FreeCAD.Console.PrintMessage(' --> {}\n'.format(femelement_table[veID])) + # FreeCAD.Console.PrintMessage(' --> {}\n'.format(face_table[veID])) + # FreeCAD.Console.PrintMessage(' --> {}\n'.format(face_nodenumber_table[veID])) for veID in face_nodenumber_table: vol_node_ct = len(femelement_table[veID]) face_node_indexs = sorted(face_nodenumber_table[veID]) @@ -1012,7 +1011,7 @@ def build_mesh_faces_of_volume_elements(face_table, femelement_table): i -= 1 # node_number starts with 1, index starts with 0 --> index = node number - 1 face_nodes.append(femelement_table[veID][i]) face_table[veID] = face_nodes # reset the entry in face_table - # print(' --> ', face_table[veID]) + # FreeCAD.Console.PrintMessage(' --> {}\n'.format(face_table[veID])) return face_table @@ -1158,7 +1157,7 @@ def get_ref_shape_node_sum_geom_table(node_geom_table): # sum of length or area for each node of the ref_shape node_sum_geom_table = {} for n, A in node_geom_table: - # print(n, ' --> ', A) + # FreeCAD.Console.PrintMessage('{} --> {}\n'.format(n, A)) if n in node_sum_geom_table: node_sum_geom_table[n] = node_sum_geom_table[n] + A else: @@ -1176,7 +1175,7 @@ def get_mesh_group_elements(mesh_group_obj, aPart): grp_ele = get_reference_group_elements(mesh_group_obj, aPart) group_elements[grp_ele[0]] = grp_ele[1] else: - FreeCAD.Console.PrintError(' Empty reference in mesh group object: ' + mesh_group_obj.Name + ' ' + mesh_group_obj.Label) + FreeCAD.Console.PrintError(' Empty reference in mesh group object: ' + mesh_group_obj.Name + ' ' + mesh_group_obj.Label + '\n') return group_elements @@ -1194,23 +1193,23 @@ def get_analysis_group_elements(aAnalysis, aPart): grp_ele = get_reference_group_elements(m, aPart) group_elements[grp_ele[0]] = grp_ele[1] else: - print(' Empty reference: ' + m.Name) + FreeCAD.Console.PrintMessage(' Empty reference: ' + m.Name + '\n') empty_references.append(m) if empty_references: if len(empty_references) == 1: group_elements = get_anlysis_empty_references_group_elements(group_elements, aAnalysis, aPart.Shape) else: FreeCAD.Console.PrintError('Problem: more than one object with empty references.\n') - print('We are going to try to get the empty material references anyway.\n') + FreeCAD.Console.PrintMessage('We are going to try to get the empty material references anyway.\n') # FemElementGeometry2D, ElementGeometry1D and FemElementFluid1D could have empty references, # but on solid meshes only materials should have empty references for er in empty_references: - print(er.Name) + FreeCAD.Console.PrintMessage(er.Name + '\n') group_elements = get_anlysis_empty_references_group_elements(group_elements, aAnalysis, aPart.Shape) # check if all groups have at least one element, # it doesn't mean ALL reference shapes for a group have been found for g in group_elements: - # print(group_elements[g]) + # FreeCAD.Console.PrintMessage('{}\n'.format(group_elements[g])) if len(group_elements[g]) == 0: FreeCAD.Console.PrintError('Error: The shapes for the mesh group for the reference shapes of analysis member: ' + g + ' could not be found!\n') return group_elements @@ -1237,27 +1236,27 @@ def get_reference_group_elements(obj, aPart): for r in obj.References: parent = r[0] childs = r[1] - # print(parent) - # print(childs) + # FreeCAD.Console.PrintMessage('{}\n'.format(parent)) + # FreeCAD.Console.PrintMessage('{}\n'.format(childs)) for child in childs: ref_shape = get_element(parent, child) # the method getElement(element) does not return Solid elements if not stype: stype = ref_shape.ShapeType elif stype != ref_shape.ShapeType: FreeCAD.Console.PrintError('Error, two refshapes in References with different ShapeTypes.\n') - # print(ref_shape) + # FreeCAD.Console.PrintMessage('\n'.format(ref_shape)) found_element = find_element_in_shape(aShape, ref_shape) if found_element is not None: elements.append(found_element) else: FreeCAD.Console.PrintError('Problem: For the geometry of the following shape was no Shape found: ' + str(ref_shape) + '\n') - print(' ' + obj.Name) - print(' ' + str(obj.References)) - print(' ' + r[0].Name) + FreeCAD.Console.PrintMessage(' ' + obj.Name + '\n') + FreeCAD.Console.PrintMessage(' ' + str(obj.References) + '\n') + FreeCAD.Console.PrintMessage(' ' + r[0].Name + '\n') if parent.Name != aPart.Name: FreeCAD.Console.PrintError('The reference Shape is not a child nor it is the shape the mesh is made of. : ' + str(ref_shape) + '\n') - print(aPart.Name + '--> Name of the Feature we where searching in.') - print(parent.Name + '--> Name of the parent Feature of reference Shape (Use the same as in the line before and you will have less trouble :-) !!!!!!).') + FreeCAD.Console.PrintMessage(aPart.Name + '--> Name of the Feature we where searching in.\n') + FreeCAD.Console.PrintMessage(parent.Name + '--> Name of the parent Feature of reference Shape (Use the same as in the line before and you will have less trouble :-) !!!!!!).\n') # import Part # Part.show(aShape) # Part.show(ref_shape) @@ -1275,7 +1274,7 @@ def get_anlysis_empty_references_group_elements(group_elements, aAnalysis, aShap on solid meshes only material objects could have an empty reference without being something wrong! face meshes could have empty ShellThickness and edge meshes could have empty BeamSection/FluidSection ''' - # print(group_elements) + # FreeCAD.Console.PrintMessage('{}\n'.format(group_elements)) material_ref_shapes = [] material_shape_type = '' missed_material_refshapes = [] @@ -1286,7 +1285,7 @@ def get_anlysis_empty_references_group_elements(group_elements, aAnalysis, aShap if not empty_reference_material: empty_reference_material = m.Name else: - FreeCAD.Console.PrintError('Problem in get_anlysis_empty_references_group_elements, we seem to have two or more materials with empty references') + FreeCAD.Console.PrintError('Problem in get_anlysis_empty_references_group_elements, we seem to have two or more materials with empty references\n') return {} elif hasattr(m, "References") and m.References: # ShapeType of the group elements, strip the number of the first group element @@ -1295,36 +1294,36 @@ def get_anlysis_empty_references_group_elements(group_elements, aAnalysis, aShap if not material_shape_type: material_shape_type = group_shape_type elif material_shape_type != group_shape_type: - FreeCAD.Console.PrintError('Problem, material shape type does not match get_anlysis_empty_references_group_elements') + FreeCAD.Console.PrintError('Problem, material shape type does not match get_anlysis_empty_references_group_elements\n') for ele in group_elements[m.Name]: material_ref_shapes.append(ele) if material_shape_type == 'Solid': - # print(len(aShape.Solids)) + # FreeCAD.Console.PrintMessage('{}\n'.format(len(aShape.Solids))) for i in range(len(aShape.Solids)): ele = 'Solid' + str(i + 1) if ele not in material_ref_shapes: missed_material_refshapes.append(ele) elif material_shape_type == 'Face': - # print(len(aShape.Faces)) + # FreeCAD.Console.PrintMessage('{}\n'.format(len(aShape.Faces))) for i in range(len(aShape.Faces)): ele = 'Face' + str(i + 1) if ele not in material_ref_shapes: missed_material_refshapes.append(ele) elif material_shape_type == 'Edge': - # print(len(aShape.Edges)) + # FreeCAD.Console.PrintMessage('{}\n'.format(len(aShape.Edges))) for i in range(len(aShape.Edges)): ele = 'Edge' + str(i + 1) if ele not in material_ref_shapes: missed_material_refshapes.append(ele) else: - print(' One material with no reference shapes. No need to make a group for materials.') + FreeCAD.Console.PrintMessage(' One material with no reference shapes. No need to make a group for materials.\n') # make no changes group_elements return group_elements - # print(sorted(material_ref_shapes)) - # print(sorted(missed_material_refshapes)) - # print(group_elements) + # FreeCAD.Console.PrintMessage('{}\n'.format(sorted(material_ref_shapes))) + # FreeCAD.Console.PrintMessage('{}\n'.format(sorted(missed_material_refshapes))) + # FreeCAD.Console.PrintMessage(group_elements) group_elements[empty_reference_material] = sorted(missed_material_refshapes) - # print(group_elements) + # FreeCAD.Console.PrintMessage('{}\n'.format(group_elements)) return group_elements @@ -1333,42 +1332,42 @@ def find_element_in_shape(aShape, anElement): ele_st = anElement.ShapeType if ele_st == 'Solid' or ele_st == 'CompSolid': for index, solid in enumerate(aShape.Solids): - # print(is_same_geometry(solid, anElement)) + # FreeCAD.Console.PrintMessage('{}\n'.format(is_same_geometry(solid, anElement))) if is_same_geometry(solid, anElement): - # print(index) + # FreeCAD.Console.PrintMessage('{}\n'.format(index)) # Part.show(aShape.Solids[index]) ele = ele_st + str(index + 1) return ele FreeCAD.Console.PrintError('Solid ' + str(anElement) + ' not found in: ' + str(aShape) + '\n') if ele_st == 'Solid' and aShape.ShapeType == 'Solid': - messagePart = ( + message_part = ( 'We have been searching for a Solid in a Solid and we have not found it. ' 'In most cases this should be searching for a Solid inside a CompSolid. Check the ShapeType of your Part to mesh.' ) - print(messagePart) + FreeCAD.Console.PrintMessage(message_part + '\n') # Part.show(anElement) # Part.show(aShape) elif ele_st == 'Face' or ele_st == 'Shell': for index, face in enumerate(aShape.Faces): - # print(is_same_geometry(face, anElement)) + # FreeCAD.Console.PrintMessage('{}\n'.format(is_same_geometry(face, anElement))) if is_same_geometry(face, anElement): - # print(index) + # FreeCAD.Console.PrintMessage('{}\n'.format(index)) # Part.show(aShape.Faces[index]) ele = ele_st + str(index + 1) return ele elif ele_st == 'Edge' or ele_st == 'Wire': for index, edge in enumerate(aShape.Edges): - # print(is_same_geometry(edge, anElement)) + # FreeCAD.Console.PrintMessage('{}\n'.format(is_same_geometry(edge, anElement))) if is_same_geometry(edge, anElement): - # print(index) + # FreeCAD.Console.PrintMessage(index, '\n') # Part.show(aShape.Edges[index]) ele = ele_st + str(index + 1) return ele elif ele_st == 'Vertex': for index, vertex in enumerate(aShape.Vertexes): - # print(is_same_geometry(vertex, anElement)) + # FreeCAD.Console.PrintMessage('{}\n'.format(is_same_geometry(vertex, anElement))) if is_same_geometry(vertex, anElement): - # print(index) + # FreeCAD.Console.PrintMessage('{}\n'.format(index)) # Part.show(aShape.Vertexes[index]) ele = ele_st + str(index + 1) return ele @@ -1388,7 +1387,7 @@ def get_vertexes_by_element(aShape, anElement): for i, v in enumerate(aShape.Vertexes): if vele.isSame(v): # use isSame, because orientation could be different ele_vertexes.append(i) - # print(' ' + str(sorted(ele_vertexes))) + # FreeCAD.Console.PrintMessage(' ' + str(sorted(ele_vertexes)), '\n') return ele_vertexes FreeCAD.Console.PrintError('Error, Solid ' + str(anElement) + ' not found in: ' + str(aShape) + '\n') elif ele_st == 'Face' or ele_st == 'Shell': @@ -1398,7 +1397,7 @@ def get_vertexes_by_element(aShape, anElement): for i, v in enumerate(aShape.Vertexes): if vele.isSame(v): # use isSame, because orientation could be different ele_vertexes.append(i) - # print(' ' + str(sorted(ele_vertexes))) + # FreeCAD.Console.PrintMessage(' ' + str(sorted(ele_vertexes)) + '\n') return ele_vertexes elif ele_st == 'Edge' or ele_st == 'Wire': for index, edge in enumerate(aShape.Edges): @@ -1407,13 +1406,13 @@ def get_vertexes_by_element(aShape, anElement): for i, v in enumerate(aShape.Vertexes): if vele.isSame(v): # use isSame, because orientation could be different ele_vertexes.append(i) - # print(' ' + str(sorted(ele_vertexes))) + # FreeCAD.Console.PrintMessage(' ' + str(sorted(ele_vertexes)) + '\n') return ele_vertexes elif ele_st == 'Vertex': for index, vertex in enumerate(aShape.Vertexes): if is_same_geometry(vertex, anElement): ele_vertexes.append(index) - # print(' ' + str(sorted(ele_vertexes))) + # FreeCAD.Console.PrintMessage(' ' + str(sorted(ele_vertexes)) + '\n') return ele_vertexes elif ele_st == 'Compound': FreeCAD.Console.PrintError('Compound is not supported.\n') @@ -1424,8 +1423,8 @@ def is_same_geometry(shape1, shape2): # it is a hack, but I do not know any better ! # check of Volume and Area before starting with the vertices could be added # BoundBox is possible too, but is BB calculations robust?! - # print(shape1) - # print(shape2) + # FreeCAD.Console.PrintMessage('{}\n'.format(shape1)) + # FreeCAD.Console.PrintMessage('{}\n'.format(shape2)) same_Vertexes = 0 if len(shape1.Vertexes) == len(shape2.Vertexes) and len(shape1.Vertexes) > 1: # compare CenterOfMass @@ -1438,7 +1437,7 @@ def is_same_geometry(shape1, shape2): if vs1.X == vs2.X and vs1.Y == vs2.Y and vs1.Z == vs2.Z: same_Vertexes += 1 continue - # print(same_Vertexes) + # FreeCAD.Console.PrintMessage('{}\n'.(same_Vertexes)) if same_Vertexes == len(shape1.Vertexes): return True else: @@ -1467,14 +1466,12 @@ def get_element(part, element): def femelements_count_ok(len_femelement_table, count_femelements): + FreeCAD.Console.PrintMessage('Count FEM elements as sum of constraints: {}\n'.format(count_femelements)) + FreeCAD.Console.PrintMessage('Count FEM elements of the FreeCAD FEM mesh: {}\n'.format(len_femelement_table)) if count_femelements == len_femelement_table: - print('Count FEM elements as sum of constraints: ', count_femelements) - print('Count FEM elements of the FreeCAD FEM mesh: ', len_femelement_table) return True else: - print('ERROR: femelement_table != count_femelements') - print('Count FEM elements as sum of constraints: ', count_femelements) - print('Count FEM elements of the FreeCAD FEM Mesh: ', len_femelement_table) + FreeCAD.Console.PrintMessage('ERROR: femelement_table != count_femelements\n') return False @@ -1540,8 +1537,8 @@ def get_three_non_colinear_nodes(nodes_coords): # Code to obtain three non-colinear nodes on the PlaneRotation support face # nodes_coords --> [(nodenumber, x, y, z), (nodenumber, x, y, z), ...] if not nodes_coords: - print(len(nodes_coords)) - print('Error: No nodes in nodes_coords') + FreeCAD.Console.PrintMessage('{}\n'.format(len(nodes_coords))) + FreeCAD.Console.PrintMessage('Error: No nodes in nodes_coords\n') return [] dum_max = [1, 2, 3, 4, 5, 6, 7, 8, 0] for i in range(len(nodes_coords)): @@ -1576,7 +1573,7 @@ def get_three_non_colinear_nodes(nodes_coords): node_dis = [node_3, tot] node_1 = int(dum_max[0]) node_2 = int(dum_max[4]) - print([node_1, node_2, node_3]) + FreeCAD.Console.PrintMessage('{}\n'.format([node_1, node_2, node_3])) return [node_1, node_2, node_3] @@ -1688,7 +1685,7 @@ def use_correct_fluidinout_ele_def(FluidInletoutlet_ele, fileName, fluid_inout_n f.seek(0) cnt = 0 elem_counter = 0 - print('1DFlow inout nodes file: ' + fluid_inout_nodes_file + '\n') + FreeCAD.Console.PrintMessage('1DFlow inout nodes file: ' + fluid_inout_nodes_file + '\n') inout_nodes_file = open(fluid_inout_nodes_file, "w") for line in lines: new_line = ''