//============================================================================ // 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. //============================================================================ #ifndef vtk_m_filter_Threshold_h #define vtk_m_filter_Threshold_h #include #include namespace vtkm { namespace filter { /// \brief Extracts cells where scalar value in cell satisfies threshold criterion /// /// Extracts all cells from any dataset type that /// satisfy a threshold criterion. A cell satisfies the criterion if the /// scalar value of every point or cell satisfies the criterion. The /// criterion takes the form of between two values. The output of this /// filter is an permutation of the input dataset. /// /// You can threshold either on point or cell fields class Threshold : public vtkm::filter::FilterDataSetWithField { public: VTKM_CONT Threshold(); VTKM_CONT void SetLowerThreshold(vtkm::Float64 value) { this->LowerValue = value; } VTKM_CONT void SetUpperThreshold(vtkm::Float64 value) { this->UpperValue = value; } VTKM_CONT vtkm::Float64 GetLowerThreshold() const { return this->LowerValue; } VTKM_CONT vtkm::Float64 GetUpperThreshold() const { return this->UpperValue; } template VTKM_CONT vtkm::filter::Result DoExecute(const vtkm::cont::DataSet& input, const vtkm::cont::ArrayHandle& field, const vtkm::filter::FieldMetadata& fieldMeta, const vtkm::filter::PolicyBase& policy, DeviceAdapter tag); //Map a new field onto the resulting dataset after running the filter //this call is only valid template VTKM_CONT bool DoMapField(vtkm::filter::Result& result, const vtkm::cont::ArrayHandle& input, const vtkm::filter::FieldMetadata& fieldMeta, const vtkm::filter::PolicyBase& policy, DeviceAdapter tag); private: double LowerValue; double UpperValue; vtkm::worklet::Threshold Worklet; }; template <> class FilterTraits { //currently the threshold filter only works on scalar data. public: typedef TypeListTagScalarAll InputFieldTypeList; }; } } // namespace vtkm::filter #include #endif // vtk_m_filter_Threshold_h