From be317d48962e043190a5350f93cc130df9581a9e Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Tue, 4 Jun 2019 22:24:32 +0200 Subject: [PATCH] [MeL] Generalize to-linear-mesh conversion. Previously the conversion relied on the node numbering, which is not necessary. --- MeshLib/MeshEditing/ConvertToLinearMesh.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/MeshLib/MeshEditing/ConvertToLinearMesh.cpp b/MeshLib/MeshEditing/ConvertToLinearMesh.cpp index 6016ad3c6bb..d06d423e265 100644 --- a/MeshLib/MeshEditing/ConvertToLinearMesh.cpp +++ b/MeshLib/MeshEditing/ConvertToLinearMesh.cpp @@ -34,8 +34,20 @@ T_ELEMENT* createLinearElement(MeshLib::Element const* e, auto** nodes = new MeshLib::Node*[n_base_nodes]; for (unsigned i = 0; i < e->getNumberOfBaseNodes(); i++) { - nodes[i] = - const_cast<MeshLib::Node*>(vec_new_nodes[e->getNode(i)->getID()]); + auto const it = find_if( + begin(vec_new_nodes), end(vec_new_nodes), + [node_i = e->getNode(i)](Node* const new_node) { + return *node_i == + *new_node; // coordinate comparison up to epsilon + }); + if (it == end(vec_new_nodes)) + { + OGS_FATAL( + "A base node %d (with original global node id %d) not found in " + "the list for element %d.", + i, e->getNode(i)->getID(), e->getID()); + } + nodes[i] = const_cast<MeshLib::Node*>(*it); } return new T_ELEMENT(nodes); } -- GitLab