diff --git a/vtkm/filter/ExternalFaces.hxx b/vtkm/filter/ExternalFaces.hxx index 2c0bbcf54..f09cf5dea 100644 --- a/vtkm/filter/ExternalFaces.hxx +++ b/vtkm/filter/ExternalFaces.hxx @@ -63,13 +63,18 @@ template inline VTKM_CONT -bool ExternalFaces::DoMapField(vtkm::filter::ResultDataSet&, - const vtkm::cont::ArrayHandle&, - const vtkm::filter::FieldMetadata&, +bool ExternalFaces::DoMapField(vtkm::filter::ResultDataSet &result, + const vtkm::cont::ArrayHandle &input, + const vtkm::filter::FieldMetadata &fieldMeta, const vtkm::filter::PolicyBase&, const DeviceAdapter&) { - return false; + if (fieldMeta.IsPointField()) + { + result.GetDataSet().AddField(fieldMeta.AsField(input)); + } + + return true; } } diff --git a/vtkm/filter/testing/UnitTestExternalFacesFilter.cxx b/vtkm/filter/testing/UnitTestExternalFacesFilter.cxx index 126f0d5cf..12607ddfc 100644 --- a/vtkm/filter/testing/UnitTestExternalFacesFilter.cxx +++ b/vtkm/filter/testing/UnitTestExternalFacesFilter.cxx @@ -26,68 +26,36 @@ using vtkm::cont::testing::MakeTestDataSet; namespace { + void TestExternalFacesExplicitGrid() { - vtkm::cont::DataSet ds; - - const int nVerts = 8; //A cube that is tetrahedralized - typedef vtkm::Vec CoordType; - CoordType coordinates[nVerts] = { - CoordType(0, 0, 0), - CoordType(1, 0, 0), - CoordType(1, 1, 0), - CoordType(0, 1, 0), - CoordType(0, 0, 1), - CoordType(1, 0, 1), - CoordType(1, 1, 1), - CoordType(0, 1, 1) - }; - - ds.AddCoordinateSystem( - vtkm::cont::CoordinateSystem("coordinates", coordinates, nVerts)); - - //Construct the VTK-m shapes and numIndices connectivity arrays - const int nCells = 6; //The tetrahedrons of the cube - vtkm::IdComponent cellVerts[nCells][4] = { - {4,7,6,3}, {4,6,3,2}, {4,0,3,2}, - {4,6,5,2}, {4,5,0,2}, {1,0,5,2} - }; - vtkm::cont::CellSetExplicit<> cellSet("cells"); - - vtkm::cont::ArrayHandle shapes; - vtkm::cont::ArrayHandle numIndices; - vtkm::cont::ArrayHandle conn; - shapes.Allocate(static_cast(nCells)); - numIndices.Allocate(static_cast(nCells)); - conn.Allocate(static_cast(4 * nCells)); - - int index = 0; - for(int j = 0; j < nCells; j++) - { - shapes.GetPortalControl().Set(j, static_cast(vtkm::CELL_SHAPE_TETRA)); - numIndices.GetPortalControl().Set(j, 4); - for(int k = 0; k < 4; k++) - conn.GetPortalControl().Set(index++, cellVerts[j][k]); - } - - cellSet.Fill(nVerts, shapes, numIndices, conn); - - //Add the VTK-m cell set - ds.AddCellSet(cellSet); + vtkm::cont::DataSet ds = MakeTestDataSet().Make3DExplicitDataSet5(); //Run the External Faces filter vtkm::filter::ExternalFaces externalFaces; vtkm::filter::ResultDataSet result = externalFaces.Execute(ds); - //Validate the number of external faces (output) returned by the worklet VTKM_TEST_ASSERT(result.IsValid(), "Results should be valid"); - vtkm::cont::CellSetExplicit<> &new_cellSet = - result.GetDataSet().GetCellSet(0).Cast >(); + // map fields + for (vtkm::IdComponent i = 0; i < ds.GetNumberOfFields(); ++i) + { + externalFaces.MapFieldOntoOutput(result, ds.GetField(i)); + } + vtkm::cont::DataSet resultds = result.GetDataSet(); + + // verify cellset + vtkm::cont::CellSetExplicit<> &new_cellSet = + resultds.GetCellSet(0).Cast >(); const vtkm::Id numExtFaces_out = new_cellSet.GetNumberOfCells(); const vtkm::Id numExtFaces_actual = 12; - VTKM_TEST_ASSERT(numExtFaces_out == numExtFaces_actual, "Number of External Faces mismatch"); + VTKM_TEST_ASSERT(numExtFaces_out == numExtFaces_actual, + "Number of External Faces mismatch"); + + // verify fields + VTKM_TEST_ASSERT(resultds.HasField("pointvar"), + "Point field not mapped succesfully"); } void TestExternalFacesFilter()