From 82a573f712aecfdb13ffedc1adc1112434f6a3f1 Mon Sep 17 00:00:00 2001 From: Robert Maynard Date: Mon, 4 Jan 2016 16:53:46 -0500 Subject: [PATCH] MarchingCubes is now able to not generate normals. --- vtkm/worklet/MarchingCubes.h | 35 +++++++++++++++++++++++----------- vtkm/worklet/ScatterCounting.h | 5 ----- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/vtkm/worklet/MarchingCubes.h b/vtkm/worklet/MarchingCubes.h index 644d4cae8..26354b744 100644 --- a/vtkm/worklet/MarchingCubes.h +++ b/vtkm/worklet/MarchingCubes.h @@ -129,9 +129,11 @@ public: VTKM_CONT_EXPORT IsosurfaceGenerate(FieldType isovalue, + bool generateNormals, const vtkm::worklet::ScatterCounting& scatter, IdPortalConstType edgeTable) : EdgeTable(edgeTable), Isovalue(isovalue), + GenerateNormals(generateNormals), Scatter(scatter) { } template edgePCoord0 = - vtkm::exec::ParametricCoordinatesPoint( - fieldIn.GetNumberOfComponents(), edgeVertex0, shape, *this); - const vtkm::Vec edgePCoord1 = - vtkm::exec::ParametricCoordinatesPoint( - fieldIn.GetNumberOfComponents(), edgeVertex1, shape, *this); - const vtkm::Vec interpPCoord = - vtkm::Lerp(edgePCoord0, edgePCoord1, interpolant); - normalsOut[triVertex] = - vtkm::Normal(vtkm::exec::CellDerivative( - fieldIn, coords, interpPCoord, shape, *this)); + interpolationIds[triVertex][0] = indices[edgeVertex0]; interpolationIds[triVertex][1] = indices[edgeVertex1]; interpolationWeights[triVertex] = interpolant; + + //conditionally do these only if we want to generate normals + if(this->GenerateNormals) + { + const vtkm::Vec edgePCoord0 = + vtkm::exec::ParametricCoordinatesPoint( + fieldIn.GetNumberOfComponents(), edgeVertex0, shape, *this); + const vtkm::Vec edgePCoord1 = + vtkm::exec::ParametricCoordinatesPoint( + fieldIn.GetNumberOfComponents(), edgeVertex1, shape, *this); + + const vtkm::Vec interpPCoord = + vtkm::Lerp(edgePCoord0, edgePCoord1, interpolant); + + normalsOut[triVertex] = + vtkm::Normal(vtkm::exec::CellDerivative( + fieldIn, coords, interpPCoord, shape, *this)); + } + } } private: const FieldType Isovalue; + bool GenerateNormals; ScatterType Scatter; }; @@ -271,6 +283,7 @@ public: vtkm::worklet::ScatterCounting scatter(numOutputTrisPerCell, DeviceAdapter()); IsosurfaceGenerate isosurface(isovalue, + true, //always generate normals. scatter, edgeTable.PrepareForInput(DeviceAdapter())); diff --git a/vtkm/worklet/ScatterCounting.h b/vtkm/worklet/ScatterCounting.h index 3b46a602b..b5b2df5d8 100644 --- a/vtkm/worklet/ScatterCounting.h +++ b/vtkm/worklet/ScatterCounting.h @@ -137,11 +137,6 @@ struct SubtractToVisitIndexKernel : vtkm::exec::FunctorBase /// struct ScatterCounting { - VTKM_CONT_EXPORT - ScatterCounting() - { - } - template VTKM_CONT_EXPORT ScatterCounting(const CountArrayType &countArray, Device)