From 8e4a47ef5704bf56cc81cd93463973107ccf0b29 Mon Sep 17 00:00:00 2001 From: Robert Maynard Date: Mon, 22 Feb 2016 11:38:15 -0500 Subject: [PATCH] Update IsosurfaceUniformGrid to use the marching cubes filter. This way we have an example of how to use the filter code. --- examples/isosurface/IsosurfaceUniformGrid.cxx | 39 +++++++++---------- vtkm/filter/MarchingCubes.hxx | 2 - 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/examples/isosurface/IsosurfaceUniformGrid.cxx b/examples/isosurface/IsosurfaceUniformGrid.cxx index 92d6db2a6..4dba1c72e 100644 --- a/examples/isosurface/IsosurfaceUniformGrid.cxx +++ b/examples/isosurface/IsosurfaceUniformGrid.cxx @@ -24,7 +24,7 @@ #define VTKM_DEVICE_ADAPTER VTKM_DEVICE_ADAPTER_SERIAL #endif -#include +#include #include #include @@ -48,10 +48,7 @@ #include -typedef VTKM_DEFAULT_DEVICE_ADAPTER_TAG DeviceAdapter; - -vtkm::Id3 dims(16,16,16); -vtkm::worklet::MarchingCubes *isosurfaceFilter; +vtkm::Id3 dims(256, 256, 256); vtkm::cont::ArrayHandle > verticesArray, normalsArray; vtkm::cont::ArrayHandle scalarsArray; Quaternion qrot; @@ -233,27 +230,29 @@ void mouseCall(int button, int state, int x, int y) // Compute and render an isosurface for a uniform grid example int main(int argc, char* argv[]) { - typedef vtkm::cont::DeviceAdapterTraits DeviceAdapterTraits; typedef vtkm::cont::CellSetStructured<3> CellSet; - std::cout << "Running IsosurfaceUniformGrid example on device adapter: " - << DeviceAdapterTraits::GetName() << std::endl; - vtkm::cont::DataSet dataSet = MakeIsosurfaceTestDataSet(dims); - vtkm::cont::ArrayHandle fieldArray; - dataSet.GetField("nodevar").GetData().CopyTo(fieldArray); - isosurfaceFilter = new vtkm::worklet::MarchingCubes(); + vtkm::filter::MarchingCubes filter; + filter.SetGenerateNormals(true); + filter.SetMergeDuplicatePoints( false ); + filter.SetIsoValue( 0.5 ); + vtkm::filter::DataSetResult result = filter.Execute( dataSet, + dataSet.GetField("nodevar") ); - isosurfaceFilter->Run(0.5, - dataSet.GetCellSet().Cast(), - dataSet.GetCoordinateSystem(), - fieldArray, - verticesArray, - normalsArray); + filter.MapFieldOntoOutput(result, dataSet.GetField("nodevar")); - isosurfaceFilter->MapFieldOntoIsosurface(fieldArray, - scalarsArray); + //need to extract vertices, normals, and scalars + vtkm::cont::DataSet& outputData = result.GetDataSet(); + + + typedef vtkm::cont::ArrayHandle< vtkm::Vec > VertType; + vtkm::cont::CoordinateSystem coords = outputData.GetCoordinateSystem(); + + verticesArray = coords.GetData().Cast(); + normalsArray = outputData.GetField("normals").GetData().Cast(); + scalarsArray = outputData.GetField("nodevar").GetData().Cast< vtkm::cont::ArrayHandle >(); std::cout << "Number of output vertices: " << verticesArray.GetNumberOfValues() << std::endl; diff --git a/vtkm/filter/MarchingCubes.hxx b/vtkm/filter/MarchingCubes.hxx index ffde0184f..66c7f54b8 100644 --- a/vtkm/filter/MarchingCubes.hxx +++ b/vtkm/filter/MarchingCubes.hxx @@ -422,8 +422,6 @@ vtkm::filter::DataSetResult MarchingCubes::DoExecute(const vtkm::cont::DataSet& this->InterpolationWeights, vtkm::filter::ApplyPolicy(coords, policy), vertices); - vtkm::cont::printSummary_ArrayHandle(vertices, std::cout); - } else {