From c4b06353614dc5973aaa381abfdd7428dffbe8f7 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Tue, 30 Jun 2020 19:25:08 +0200 Subject: [PATCH] FEM: mesh tools, compact mesh, use one id for Edges, Faces and Volumes as SMESH does save it --- src/Mod/Fem/femmesh/meshtools.py | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/Mod/Fem/femmesh/meshtools.py b/src/Mod/Fem/femmesh/meshtools.py index 4d4b3ca233..1b87e6cc5e 100644 --- a/src/Mod/Fem/femmesh/meshtools.py +++ b/src/Mod/Fem/femmesh/meshtools.py @@ -2356,35 +2356,38 @@ def compact_mesh( new_mesh.addNode(old_nodes[n].x, old_nodes[n].y, old_nodes[n].z, nid) node_map[n] = nid + # element id is one id for Edges, Faces and Volumes + # thus should not start with 0 for each, wil give an error on mixed meshes + # https://forum.freecadweb.org/viewtopic.php?t=48215 + ele_id = 1 if old_femmesh.Edges: - for i, ed in enumerate(old_femmesh.Edges): - eid = i + 1 + for ed in old_femmesh.Edges: old_elem_nodes = old_femmesh.getElementNodes(ed) new_elemnodes = [] for old_node_id in old_elem_nodes: new_elemnodes.append(node_map[old_node_id]) - new_mesh.addEdge(new_elemnodes, eid) - elem_map[ed] = eid - + new_mesh.addEdge(new_elemnodes, ele_id) + elem_map[ed] = ele_id + ele_id += 1 if old_femmesh.Faces: - for i, fa in enumerate(old_femmesh.Faces): - fid = i + 1 + for fa in old_femmesh.Faces: + ele_id += 1 old_elem_nodes = old_femmesh.getElementNodes(fa) new_elemnodes = [] for old_node_id in old_elem_nodes: new_elemnodes.append(node_map[old_node_id]) - new_mesh.addFace(new_elemnodes, fid) - elem_map[fa] = fid - + new_mesh.addFace(new_elemnodes, ele_id) + elem_map[fa] = ele_id + ele_id += 1 if old_femmesh.Volumes: - for i, vo in enumerate(old_femmesh.Volumes): - vid = i + 1 + for vo in old_femmesh.Volumes: old_elem_nodes = old_femmesh.getElementNodes(vo) new_elemnodes = [] for old_node_id in old_elem_nodes: new_elemnodes.append(node_map[old_node_id]) - new_mesh.addVolume(new_elemnodes, vid) - elem_map[vo] = vid + new_mesh.addVolume(new_elemnodes, ele_id) + elem_map[vo] = ele_id + ele_id += 1 # may be return another value if the mesh was compacted, just check last map entries return (new_mesh, node_map, elem_map)