From 904e6ee66ab7bc07fa634bd9eea12201f697d9f2 Mon Sep 17 00:00:00 2001 From: Norihiro Watanabe <norihiro.watanabe@ufz.de> Date: Thu, 23 Apr 2015 14:30:05 +0200 Subject: [PATCH] support quadratic cell types in VtkMappedMesh --- InSituLib/VtkMappedMesh.cpp | 54 ++++++++++++++++++++++++++++--------- InSituLib/VtkMappedMesh.h | 50 +++++++++++++++++++++++++++------- 2 files changed, 82 insertions(+), 22 deletions(-) diff --git a/InSituLib/VtkMappedMesh.cpp b/InSituLib/VtkMappedMesh.cpp index 64cd4fdea73..78eaf1845af 100644 --- a/InSituLib/VtkMappedMesh.cpp +++ b/InSituLib/VtkMappedMesh.cpp @@ -60,31 +60,61 @@ vtkIdType VtkMappedMeshImpl::GetNumberOfCells() int VtkMappedMeshImpl::GetCellType(vtkIdType cellId) { int type = 0; - switch ((*_elements)[cellId]->getGeomType()) + switch ((*_elements)[cellId]->getCellType()) { - case MeshElemType::INVALID: + case CellType::INVALID: break; - case MeshElemType::LINE: + case CellType::LINE2: type = VTK_LINE; break; - case MeshElemType::TRIANGLE: + case CellType::LINE3: + type = VTK_QUADRATIC_EDGE; + break; + case CellType::TRI3: type = VTK_TRIANGLE; break; - case MeshElemType::QUAD: + case CellType::TRI6: + type = VTK_QUADRATIC_TRIANGLE; + break; + case CellType::QUAD4: type = VTK_QUAD; break; - case MeshElemType::HEXAHEDRON: + case CellType::QUAD8: + type = VTK_QUADRATIC_QUAD; + break; + case CellType::QUAD9: + type = VTK_BIQUADRATIC_QUAD; + break; + case CellType::HEX8: type = VTK_HEXAHEDRON; break; - case MeshElemType::TETRAHEDRON: + case CellType::HEX20: + type = VTK_QUADRATIC_HEXAHEDRON; + break; + case CellType::HEX27: + type = VTK_TRIQUADRATIC_HEXAHEDRON; + break; + case CellType::TET4: type = VTK_TETRA; break; - case MeshElemType::PRISM: + case CellType::TET10: + type = VTK_QUADRATIC_TETRA; + break; + case CellType::PRISM6: type = VTK_WEDGE; break; - case MeshElemType::PYRAMID: + case CellType::PRISM15: + type = VTK_QUADRATIC_WEDGE; + break; + case CellType::PRISM18: + type = VTK_BIQUADRATIC_QUADRATIC_WEDGE; + break; + case CellType::PYRAMID5: type = VTK_PYRAMID; break; + case CellType::PYRAMID13: + type = VTK_QUADRATIC_PYRAMID; + break; } return type; } @@ -133,16 +163,16 @@ void VtkMappedMeshImpl::GetIdsOfCellsOfType(int type, vtkIdTypeArray *array) for (auto elem(_elements->begin()); elem != _elements->end(); ++elem) { - if ((*elem)->getGeomType() == VtkCellTypeToOGS(type)) + if ((*elem)->getCellType() == VtkCellTypeToOGS(type)) array->InsertNextValue((*elem)->getID()); } } int VtkMappedMeshImpl::IsHomogeneous() { - MeshElemType type = (*(_elements->begin()))->getGeomType(); + CellType type = (*(_elements->begin()))->getCellType(); for (auto elem(_elements->begin()); elem != _elements->end(); ++elem) - if((*elem)->getGeomType() != type) + if((*elem)->getCellType() != type) return 0; return 1; } diff --git a/InSituLib/VtkMappedMesh.h b/InSituLib/VtkMappedMesh.h index 5ad05d2b332..26c20a7f445 100644 --- a/InSituLib/VtkMappedMesh.h +++ b/InSituLib/VtkMappedMesh.h @@ -71,34 +71,64 @@ private: const std::vector<MeshLib::Element*>* _elements; vtkIdType NumberOfCells; - static MeshElemType VtkCellTypeToOGS(int type) + static CellType VtkCellTypeToOGS(int type) { - MeshElemType ogs; + CellType ogs; switch (type) { case VTK_LINE: - ogs = MeshElemType::LINE; + ogs = CellType::LINE2; + break; + case VTK_QUADRATIC_EDGE: + ogs = CellType::LINE3; break; case VTK_TRIANGLE: - ogs = MeshElemType::TRIANGLE; + ogs = CellType::TRI3; + break; + case VTK_QUADRATIC_TRIANGLE: + ogs = CellType::TRI6; break; case VTK_QUAD: - ogs = MeshElemType::QUAD; + ogs = CellType::QUAD4; + break; + case VTK_QUADRATIC_QUAD: + ogs = CellType::QUAD8; + break; + case VTK_BIQUADRATIC_QUAD: + ogs = CellType::QUAD9; break; case VTK_HEXAHEDRON: - ogs = MeshElemType::HEXAHEDRON; + ogs = CellType::HEX8; + break; + case VTK_QUADRATIC_HEXAHEDRON: + ogs = CellType::HEX20; + break; + case VTK_TRIQUADRATIC_HEXAHEDRON: + ogs = CellType::HEX27; break; case VTK_TETRA: - ogs = MeshElemType::TETRAHEDRON; + ogs = CellType::TET4; + break; + case VTK_QUADRATIC_TETRA: + ogs = CellType::TET10; break; case VTK_WEDGE: - ogs = MeshElemType::PRISM; + ogs = CellType::PRISM6; + break; + case VTK_QUADRATIC_WEDGE: + ogs = CellType::PRISM15; + break; + case VTK_BIQUADRATIC_QUADRATIC_WEDGE: + ogs = CellType::PRISM18; break; case VTK_PYRAMID: - ogs = MeshElemType::PYRAMID; + ogs = CellType::PYRAMID5; + break; + case VTK_QUADRATIC_PYRAMID: + ogs = CellType::PYRAMID13; break; default: - ogs = MeshElemType::INVALID; + ogs = CellType::INVALID; break; } return ogs; -- GitLab