FEM: mesh tools, compact mesh, use one id for Edges, Faces and Volumes as SMESH does save it

This commit is contained in:
Bernd Hahnebach
2020-06-30 19:25:08 +02:00
parent 68b98f5ffe
commit c4b0635361

View File

@@ -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)