Merge topic 'ExternalFacesFilter-MappPointFields'

269691e7 Map point fields in ExternalFaces filter

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !716
This commit is contained in:
Sujin Philip 2017-03-06 13:26:29 +00:00 committed by Kitware Robot
commit e28037876d
2 changed files with 27 additions and 54 deletions

@ -63,13 +63,18 @@ template<typename T,
typename DerivedPolicy,
typename DeviceAdapter>
inline VTKM_CONT
bool ExternalFaces::DoMapField(vtkm::filter::ResultDataSet&,
const vtkm::cont::ArrayHandle<T, StorageType>&,
const vtkm::filter::FieldMetadata&,
bool ExternalFaces::DoMapField(vtkm::filter::ResultDataSet &result,
const vtkm::cont::ArrayHandle<T, StorageType> &input,
const vtkm::filter::FieldMetadata &fieldMeta,
const vtkm::filter::PolicyBase<DerivedPolicy>&,
const DeviceAdapter&)
{
return false;
if (fieldMeta.IsPointField())
{
result.GetDataSet().AddField(fieldMeta.AsField(input));
}
return true;
}
}

@ -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<vtkm::Float32,3> 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<vtkm::UInt8> shapes;
vtkm::cont::ArrayHandle<vtkm::IdComponent> numIndices;
vtkm::cont::ArrayHandle<vtkm::Id> conn;
shapes.Allocate(static_cast<vtkm::Id>(nCells));
numIndices.Allocate(static_cast<vtkm::Id>(nCells));
conn.Allocate(static_cast<vtkm::Id>(4 * nCells));
int index = 0;
for(int j = 0; j < nCells; j++)
{
shapes.GetPortalControl().Set(j, static_cast<vtkm::UInt8>(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<vtkm::cont::CellSetExplicit<> >();
// 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<vtkm::cont::CellSetExplicit<> >();
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()