//============================================================================ // Copyright (c) Kitware, Inc. // All rights reserved. // See LICENSE.txt for details. // // This software is distributed WITHOUT ANY WARRANTY; without even // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. See the above copyright notice for more information. //============================================================================ #ifndef vtkm_m_filter_CleanGrid_hxx #define vtkm_m_filter_CleanGrid_hxx #include #include #include namespace vtkm { namespace filter { template inline VTKM_CONT vtkm::cont::DataSet CleanGrid::DoExecute(const vtkm::cont::DataSet& inData, vtkm::filter::PolicyBase policy) { using CellSetType = vtkm::cont::CellSetExplicit<>; CellSetType outputCellSet; // Do a deep copy of the cells to new CellSetExplicit structures const vtkm::cont::DynamicCellSet& inCellSet = inData.GetCellSet(); if (inCellSet.IsType()) { // Is expected type, do a shallow copy outputCellSet = inCellSet.Cast(); } else { // Clean the grid auto deducedCellSet = vtkm::filter::ApplyPolicyCellSet(inCellSet, policy, *this); vtkm::cont::ArrayHandle numIndices; this->Invoke(worklet::CellDeepCopy::CountCellPoints{}, deducedCellSet, numIndices); vtkm::cont::ArrayHandle shapes; vtkm::cont::ArrayHandle offsets; vtkm::Id connectivitySize; vtkm::cont::ConvertNumIndicesToOffsets(numIndices, offsets, connectivitySize); numIndices.ReleaseResourcesExecution(); vtkm::cont::ArrayHandle connectivity; connectivity.Allocate(connectivitySize); this->Invoke(worklet::CellDeepCopy::PassCellStructure{}, deducedCellSet, shapes, vtkm::cont::make_ArrayHandleGroupVecVariable(connectivity, offsets)); shapes.ReleaseResourcesExecution(); offsets.ReleaseResourcesExecution(); connectivity.ReleaseResourcesExecution(); outputCellSet.Fill(deducedCellSet.GetNumberOfPoints(), shapes, connectivity, offsets); //Release the input grid from the execution space deducedCellSet.ReleaseResourcesExecution(); } return this->GenerateOutput(inData, outputCellSet); } } } #endif