From cf4f2c965644b81f90189715b7e14a0ab0e9c7eb Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Mon, 11 Feb 2019 13:56:58 +0100 Subject: [PATCH] [MeL] VtkConverter; Set node and element ids. This keeps the node/element numbering scheme of the input mesh. --- MeshLib/MeshGenerators/VtkMeshConverter.cpp | 43 +++++++++++---------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/MeshLib/MeshGenerators/VtkMeshConverter.cpp b/MeshLib/MeshGenerators/VtkMeshConverter.cpp index 82bc7af1a77..9c26daec86d 100644 --- a/MeshLib/MeshGenerators/VtkMeshConverter.cpp +++ b/MeshLib/MeshGenerators/VtkMeshConverter.cpp @@ -43,12 +43,13 @@ namespace detail { template <class T_ELEMENT> MeshLib::Element* createElementWithSameNodeOrder( - const std::vector<MeshLib::Node*>& nodes, vtkIdList* const node_ids) + const std::vector<MeshLib::Node*>& nodes, vtkIdList* const node_ids, + std::size_t const element_id) { auto** ele_nodes = new MeshLib::Node*[T_ELEMENT::n_all_nodes]; for (unsigned k(0); k < T_ELEMENT::n_all_nodes; k++) ele_nodes[k] = nodes[node_ids->GetId(k)]; - return new T_ELEMENT(ele_nodes); + return new T_ELEMENT(ele_nodes, element_id); } } // namespace detail @@ -65,7 +66,7 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( for (std::size_t i = 0; i < nNodes; i++) { coords = grid->GetPoints()->GetPoint(i); - nodes[i] = new MeshLib::Node(coords[0], coords[1], coords[2]); + nodes[i] = new MeshLib::Node(coords[0], coords[1], coords[2], i); } // set mesh elements @@ -83,25 +84,25 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( case VTK_VERTEX: { elem = detail::createElementWithSameNodeOrder<MeshLib::Point>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_LINE: { elem = detail::createElementWithSameNodeOrder<MeshLib::Line>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_TRIANGLE: { elem = detail::createElementWithSameNodeOrder<MeshLib::Tri>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_QUAD: { elem = detail::createElementWithSameNodeOrder<MeshLib::Quad>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_PIXEL: @@ -111,19 +112,19 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( quad_nodes[1] = nodes[node_ids->GetId(1)]; quad_nodes[2] = nodes[node_ids->GetId(3)]; quad_nodes[3] = nodes[node_ids->GetId(2)]; - elem = new MeshLib::Quad(quad_nodes); + elem = new MeshLib::Quad(quad_nodes, i); break; } case VTK_TETRA: { elem = detail::createElementWithSameNodeOrder<MeshLib::Tet>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_HEXAHEDRON: { elem = detail::createElementWithSameNodeOrder<MeshLib::Hex>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_VOXEL: @@ -137,13 +138,13 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( voxel_nodes[5] = nodes[node_ids->GetId(5)]; voxel_nodes[6] = nodes[node_ids->GetId(7)]; voxel_nodes[7] = nodes[node_ids->GetId(6)]; - elem = new MeshLib::Hex(voxel_nodes); + elem = new MeshLib::Hex(voxel_nodes, i); break; } case VTK_PYRAMID: { elem = detail::createElementWithSameNodeOrder<MeshLib::Pyramid>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_WEDGE: @@ -154,50 +155,50 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( prism_nodes[i] = nodes[node_ids->GetId(i + 3)]; prism_nodes[i + 3] = nodes[node_ids->GetId(i)]; } - elem = new MeshLib::Prism(prism_nodes); + elem = new MeshLib::Prism(prism_nodes, i); break; } case VTK_QUADRATIC_EDGE: { elem = detail::createElementWithSameNodeOrder<MeshLib::Line3>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_QUADRATIC_TRIANGLE: { elem = detail::createElementWithSameNodeOrder<MeshLib::Tri6>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_QUADRATIC_QUAD: { elem = detail::createElementWithSameNodeOrder<MeshLib::Quad8>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_BIQUADRATIC_QUAD: { elem = detail::createElementWithSameNodeOrder<MeshLib::Quad9>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_QUADRATIC_TETRA: { elem = detail::createElementWithSameNodeOrder<MeshLib::Tet10>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_QUADRATIC_HEXAHEDRON: { elem = detail::createElementWithSameNodeOrder<MeshLib::Hex20>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_QUADRATIC_PYRAMID: { elem = detail::createElementWithSameNodeOrder<MeshLib::Pyramid13>( - nodes, node_ids); + nodes, node_ids, i); break; } case VTK_QUADRATIC_WEDGE: @@ -215,7 +216,7 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( prism_nodes[11] = nodes[node_ids->GetId(13)]; for (unsigned i = 0; i < 3; ++i) prism_nodes[12 + i] = nodes[node_ids->GetId(11 - i)]; - elem = new MeshLib::Prism15(prism_nodes); + elem = new MeshLib::Prism15(prism_nodes, i); break; } default: -- GitLab