Skip to content
Snippets Groups Projects
Commit cf4f2c96 authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

[MeL] VtkConverter; Set node and element ids.

This keeps the node/element numbering scheme of the
input mesh.
parent 2070707f
No related branches found
No related tags found
No related merge requests found
...@@ -43,12 +43,13 @@ namespace detail ...@@ -43,12 +43,13 @@ namespace detail
{ {
template <class T_ELEMENT> template <class T_ELEMENT>
MeshLib::Element* createElementWithSameNodeOrder( 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]; auto** ele_nodes = new MeshLib::Node*[T_ELEMENT::n_all_nodes];
for (unsigned k(0); k < T_ELEMENT::n_all_nodes; k++) for (unsigned k(0); k < T_ELEMENT::n_all_nodes; k++)
ele_nodes[k] = nodes[node_ids->GetId(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 } // namespace detail
...@@ -65,7 +66,7 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( ...@@ -65,7 +66,7 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid(
for (std::size_t i = 0; i < nNodes; i++) for (std::size_t i = 0; i < nNodes; i++)
{ {
coords = grid->GetPoints()->GetPoint(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 // set mesh elements
...@@ -83,25 +84,25 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( ...@@ -83,25 +84,25 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid(
case VTK_VERTEX: case VTK_VERTEX:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Point>( elem = detail::createElementWithSameNodeOrder<MeshLib::Point>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_LINE: case VTK_LINE:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Line>( elem = detail::createElementWithSameNodeOrder<MeshLib::Line>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_TRIANGLE: case VTK_TRIANGLE:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Tri>( elem = detail::createElementWithSameNodeOrder<MeshLib::Tri>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_QUAD: case VTK_QUAD:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Quad>( elem = detail::createElementWithSameNodeOrder<MeshLib::Quad>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_PIXEL: case VTK_PIXEL:
...@@ -111,19 +112,19 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( ...@@ -111,19 +112,19 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid(
quad_nodes[1] = nodes[node_ids->GetId(1)]; quad_nodes[1] = nodes[node_ids->GetId(1)];
quad_nodes[2] = nodes[node_ids->GetId(3)]; quad_nodes[2] = nodes[node_ids->GetId(3)];
quad_nodes[3] = nodes[node_ids->GetId(2)]; quad_nodes[3] = nodes[node_ids->GetId(2)];
elem = new MeshLib::Quad(quad_nodes); elem = new MeshLib::Quad(quad_nodes, i);
break; break;
} }
case VTK_TETRA: case VTK_TETRA:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Tet>( elem = detail::createElementWithSameNodeOrder<MeshLib::Tet>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_HEXAHEDRON: case VTK_HEXAHEDRON:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Hex>( elem = detail::createElementWithSameNodeOrder<MeshLib::Hex>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_VOXEL: case VTK_VOXEL:
...@@ -137,13 +138,13 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( ...@@ -137,13 +138,13 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid(
voxel_nodes[5] = nodes[node_ids->GetId(5)]; voxel_nodes[5] = nodes[node_ids->GetId(5)];
voxel_nodes[6] = nodes[node_ids->GetId(7)]; voxel_nodes[6] = nodes[node_ids->GetId(7)];
voxel_nodes[7] = nodes[node_ids->GetId(6)]; voxel_nodes[7] = nodes[node_ids->GetId(6)];
elem = new MeshLib::Hex(voxel_nodes); elem = new MeshLib::Hex(voxel_nodes, i);
break; break;
} }
case VTK_PYRAMID: case VTK_PYRAMID:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Pyramid>( elem = detail::createElementWithSameNodeOrder<MeshLib::Pyramid>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_WEDGE: case VTK_WEDGE:
...@@ -154,50 +155,50 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( ...@@ -154,50 +155,50 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid(
prism_nodes[i] = nodes[node_ids->GetId(i + 3)]; prism_nodes[i] = nodes[node_ids->GetId(i + 3)];
prism_nodes[i + 3] = nodes[node_ids->GetId(i)]; prism_nodes[i + 3] = nodes[node_ids->GetId(i)];
} }
elem = new MeshLib::Prism(prism_nodes); elem = new MeshLib::Prism(prism_nodes, i);
break; break;
} }
case VTK_QUADRATIC_EDGE: case VTK_QUADRATIC_EDGE:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Line3>( elem = detail::createElementWithSameNodeOrder<MeshLib::Line3>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_QUADRATIC_TRIANGLE: case VTK_QUADRATIC_TRIANGLE:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Tri6>( elem = detail::createElementWithSameNodeOrder<MeshLib::Tri6>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_QUADRATIC_QUAD: case VTK_QUADRATIC_QUAD:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Quad8>( elem = detail::createElementWithSameNodeOrder<MeshLib::Quad8>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_BIQUADRATIC_QUAD: case VTK_BIQUADRATIC_QUAD:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Quad9>( elem = detail::createElementWithSameNodeOrder<MeshLib::Quad9>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_QUADRATIC_TETRA: case VTK_QUADRATIC_TETRA:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Tet10>( elem = detail::createElementWithSameNodeOrder<MeshLib::Tet10>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_QUADRATIC_HEXAHEDRON: case VTK_QUADRATIC_HEXAHEDRON:
{ {
elem = detail::createElementWithSameNodeOrder<MeshLib::Hex20>( elem = detail::createElementWithSameNodeOrder<MeshLib::Hex20>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_QUADRATIC_PYRAMID: case VTK_QUADRATIC_PYRAMID:
{ {
elem = elem =
detail::createElementWithSameNodeOrder<MeshLib::Pyramid13>( detail::createElementWithSameNodeOrder<MeshLib::Pyramid13>(
nodes, node_ids); nodes, node_ids, i);
break; break;
} }
case VTK_QUADRATIC_WEDGE: case VTK_QUADRATIC_WEDGE:
...@@ -215,7 +216,7 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( ...@@ -215,7 +216,7 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid(
prism_nodes[11] = nodes[node_ids->GetId(13)]; prism_nodes[11] = nodes[node_ids->GetId(13)];
for (unsigned i = 0; i < 3; ++i) for (unsigned i = 0; i < 3; ++i)
prism_nodes[12 + i] = nodes[node_ids->GetId(11 - 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; break;
} }
default: default:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment