From c9e0cd42b4abfb2a5f03089e4adc3a2f3a245fe8 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <github@naumov.de> Date: Mon, 30 Jan 2017 23:52:34 +0100 Subject: [PATCH] [T] Adding FieldData to the vtk mesh roundtrip. --- Tests/MeshLib/TestVtkMappedMeshSource.cpp | 53 ++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/Tests/MeshLib/TestVtkMappedMeshSource.cpp b/Tests/MeshLib/TestVtkMappedMeshSource.cpp index 4f0c0beb128..353f44913f2 100644 --- a/Tests/MeshLib/TestVtkMappedMeshSource.cpp +++ b/Tests/MeshLib/TestVtkMappedMeshSource.cpp @@ -35,7 +35,8 @@ #include <vtkCellData.h> #include <vtkPointData.h> -// Creates a mesh with double and int point and cell properties +// Creates a mesh with different types of data (double, int, etc.) and point, +// cell, or integration point properties. class InSituMesh : public ::testing::Test { public: @@ -62,6 +63,14 @@ class InSituMesh : public ::testing::Test std::iota( cell_double_properties->begin(), cell_double_properties->end(), 1); + std::string const field_prop_name("FieldDoubleProperty"); + auto* const field_double_properties = + mesh->getProperties().createNewPropertyVector<double>( + field_prop_name, MeshLib::MeshItemType::IntegrationPoint); + field_double_properties->resize(mesh->getNumberOfElements() * 2); + std::iota( + field_double_properties->begin(), field_double_properties->end(), 1); + std::string const point_int_prop_name("PointIntProperty"); auto* const point_int_properties = mesh->getProperties().createNewPropertyVector<int>( @@ -77,6 +86,13 @@ class InSituMesh : public ::testing::Test cell_int_properties->resize(mesh->getNumberOfElements()); std::iota(cell_int_properties->begin(), cell_int_properties->end(), 1); + std::string const field_int_prop_name("FieldIntProperty"); + auto* const field_int_properties = + mesh->getProperties().createNewPropertyVector<int>( + field_int_prop_name, MeshLib::MeshItemType::IntegrationPoint); + field_int_properties->resize(mesh->getNumberOfElements() * 2); + std::iota(field_int_properties->begin(), field_int_properties->end(), 1); + std::string const point_unsigned_prop_name("PointUnsignedProperty"); auto point_unsigned_properties = mesh->getProperties().createNewPropertyVector<unsigned>( @@ -95,6 +111,15 @@ class InSituMesh : public ::testing::Test cell_unsigned_properties->end(), 1); + std::string const field_unsigned_prop_name("FieldUnsignedProperty"); + auto field_unsigned_properties = + mesh->getProperties().createNewPropertyVector<unsigned>( + field_unsigned_prop_name, MeshLib::MeshItemType::IntegrationPoint); + field_unsigned_properties->resize(mesh->getNumberOfElements() * 2); + std::iota(field_unsigned_properties->begin(), + field_unsigned_properties->end(), + 1); + std::string const material_ids_name("MaterialIDs"); auto material_id_properties = mesh->getProperties().createNewPropertyVector<int>( @@ -207,6 +232,31 @@ TEST_F(InSituMesh, DISABLED_MappedMeshSourceRoundtrip) ASSERT_EQ(range[0], 1.0); ASSERT_EQ(range[1], 1 + mesh->getNumberOfElements() - 1); + // Field data arrays + vtkDataArray* fieldDoubleArray = vtkDataArray::SafeDownCast( + output->GetFieldData()->GetAbstractArray("FieldDoubleProperty")); + ASSERT_EQ(fieldDoubleArray->GetSize(), mesh->getNumberOfElements() * 2); + ASSERT_EQ(fieldDoubleArray->GetComponent(0, 0), 1.0); + range = fieldDoubleArray->GetRange(0); + ASSERT_EQ(range[0], 1.0); + ASSERT_EQ(range[1], mesh->getNumberOfElements() * 2); + + vtkDataArray* fieldIntArray = vtkDataArray::SafeDownCast( + output->GetFieldData()->GetAbstractArray("FieldIntProperty")); + ASSERT_EQ(fieldIntArray->GetSize(), mesh->getNumberOfElements() * 2); + ASSERT_EQ(fieldIntArray->GetComponent(0, 0), 1.0); + range = fieldIntArray->GetRange(0); + ASSERT_EQ(range[0], 1.0); + ASSERT_EQ(range[1], mesh->getNumberOfElements() * 2); + + vtkDataArray* fieldUnsignedArray = vtkDataArray::SafeDownCast( + output->GetFieldData()->GetAbstractArray("FieldUnsignedProperty")); + ASSERT_EQ(fieldUnsignedArray->GetSize(), mesh->getNumberOfElements() * 2); + ASSERT_EQ(fieldUnsignedArray->GetComponent(0, 0), 1.0); + range = fieldUnsignedArray->GetRange(0); + ASSERT_EQ(range[0], 1.0); + ASSERT_EQ(range[1], mesh->getNumberOfElements() * 2); + // -- Write VTK mesh to file (in all combinations of binary, appended and compressed) // atm vtkXMLWriter::Appended does not work, see http://www.paraview.org/Bug/view.php?id=13382 for(int dataMode : { vtkXMLWriter::Ascii, vtkXMLWriter::Binary }) @@ -228,6 +278,7 @@ TEST_F(InSituMesh, DISABLED_MappedMeshSourceRoundtrip) // Both VTK meshes should be identical ASSERT_EQ(vtkMesh->GetNumberOfPoints(), output->GetNumberOfPoints()); ASSERT_EQ(vtkMesh->GetNumberOfCells(), output->GetNumberOfCells()); + ASSERT_EQ(vtkMesh->GetFieldData()->GetNumberOfArrays(), output->GetFieldData()->GetNumberOfArrays()); ASSERT_EQ(vtkMesh->GetPointData()->GetScalars("PointDoubleProperty")->GetNumberOfTuples(), pointDoubleArray->GetNumberOfTuples()); ASSERT_EQ(vtkMesh->GetPointData()->GetScalars("PointIntProperty")->GetNumberOfTuples(), -- GitLab