//============================================================================ // 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. // // Copyright 2014 National Technology & Engineering Solutions of Sandia, LLC (NTESS). // Copyright 2014 UT-Battelle, LLC. // Copyright 2014 Los Alamos National Security. // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // // Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National // Laboratory (LANL), the U.S. Government retains certain rights in // this software. //============================================================================ #include namespace vtkm { namespace filter { //----------------------------------------------------------------------------- inline VTKM_CONT ExtractStructured::ExtractStructured() : vtkm::filter::FilterDataSet() , VOI(vtkm::RangeId3(0, -1, 0, -1, 0, -1)) , SampleRate(vtkm::Id3(1, 1, 1)) , IncludeBoundary(false) , Worklet() { } //----------------------------------------------------------------------------- template inline VTKM_CONT vtkm::filter::Result ExtractStructured::DoExecute( const vtkm::cont::DataSet& input, const vtkm::filter::PolicyBase& policy, const DeviceAdapter& device) { const vtkm::cont::DynamicCellSet& cells = input.GetCellSet(this->GetActiveCellSetIndex()); const vtkm::cont::CoordinateSystem& coordinates = input.GetCoordinateSystem(this->GetActiveCellSetIndex()); auto cellset = this->Worklet.Run(vtkm::filter::ApplyPolicyStructured(cells, policy), this->VOI, this->SampleRate, this->IncludeBoundary, device); auto coords = this->Worklet.MapCoordinates(vtkm::filter::ApplyPolicy(coordinates, policy), device); vtkm::cont::CoordinateSystem outputCoordinates(coordinates.GetName(), vtkm::cont::DynamicArrayHandle(coords)); vtkm::cont::DataSet output; output.AddCellSet(vtkm::cont::DynamicCellSet(cellset)); output.AddCoordinateSystem(outputCoordinates); return vtkm::filter::Result(output); } //----------------------------------------------------------------------------- template inline VTKM_CONT bool ExtractStructured::DoMapField( vtkm::filter::Result& result, const vtkm::cont::ArrayHandle& input, const vtkm::filter::FieldMetadata& fieldMeta, const vtkm::filter::PolicyBase&, const DeviceAdapter& device) { if (fieldMeta.IsPointField()) { vtkm::cont::ArrayHandle output = this->Worklet.ProcessPointField(input, device); result.GetDataSet().AddField(fieldMeta.AsField(output)); return true; } // cell data must be scattered to the cells created per input cell if (fieldMeta.IsCellField()) { vtkm::cont::ArrayHandle output = this->Worklet.ProcessCellField(input, device); result.GetDataSet().AddField(fieldMeta.AsField(output)); return true; } return false; } } }