Merge topic 'policies-for-auxiliary-fields'

86a747a11 Add ability to customize filter policy to auxiliary input fields

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1442
This commit is contained in:
Kenneth Moreland 2018-11-02 00:03:55 +00:00 committed by Kitware Robot
commit 67c9af91a9
6 changed files with 34 additions and 15 deletions

@ -28,7 +28,11 @@ namespace vtkm
namespace filter
{
template <typename Filter>
struct DefaultFieldTag
{
};
template <typename Filter, typename FieldTag = DefaultFieldTag>
class FilterTraits
{
public:
@ -38,10 +42,10 @@ public:
using InputFieldTypeList = vtkm::ListTagUniversal;
};
template <typename DerivedPolicy, typename FilterType>
template <typename DerivedPolicy, typename FilterType, typename FieldTag>
struct DeduceFilterFieldTypes
{
using FList = typename vtkm::filter::FilterTraits<FilterType>::InputFieldTypeList;
using FList = typename vtkm::filter::FilterTraits<FilterType, FieldTag>::InputFieldTypeList;
using PList = typename DerivedPolicy::FieldTypeList;
using TypeList = vtkm::ListTagIntersect<FList, PList>;

@ -61,16 +61,16 @@ ApplyPolicy(const vtkm::cont::Field& field, const vtkm::filter::PolicyBase<Deriv
}
//-----------------------------------------------------------------------------
template <typename DerivedPolicy, typename FilterType>
template <typename DerivedPolicy, typename FilterType, typename FieldTag>
VTKM_CONT vtkm::cont::DynamicArrayHandleBase<
typename vtkm::filter::DeduceFilterFieldTypes<DerivedPolicy, FilterType>::TypeList,
typename vtkm::filter::DeduceFilterFieldTypes<DerivedPolicy, FilterType, FieldTag>::TypeList,
typename DerivedPolicy::FieldStorageList>
ApplyPolicy(const vtkm::cont::Field& field,
const vtkm::filter::PolicyBase<DerivedPolicy>&,
const vtkm::filter::FilterTraits<FilterType>&)
const vtkm::filter::FilterTraits<FilterType, FieldTag>&)
{
using TypeList =
typename vtkm::filter::DeduceFilterFieldTypes<DerivedPolicy, FilterType>::TypeList;
typename vtkm::filter::DeduceFilterFieldTypes<DerivedPolicy, FilterType, FieldTag>::TypeList;
using StorageList = typename DerivedPolicy::FieldStorageList;
return field.GetData().ResetTypeAndStorageLists(TypeList(), StorageList());

@ -154,6 +154,16 @@ public:
// WarpScalar can only applies to Float and Double Vec3 arrays
using InputFieldTypeList = vtkm::TypeListTagFieldVec3;
};
struct WarpScalarScalarFieldTag
{
};
template <>
struct FilterTraits<WarpScalar, WarpScalarScalarFieldTag>
{
using InputFieldTypeList = vtkm::TypeListTagFieldScalar;
};
}
}

@ -21,6 +21,8 @@
#include <vtkm/filter/internal/CreateResult.h>
#include <vtkm/worklet/DispatcherMapField.h>
#include <vtkm/filter/WarpScalar.h>
namespace vtkm
{
namespace filter
@ -51,11 +53,13 @@ inline VTKM_CONT vtkm::cont::DataSet WarpScalar::DoExecute(
auto normalF = inDataSet.GetField(this->NormalFieldName, this->NormalFieldAssociation);
auto sfF = inDataSet.GetField(this->ScalarFactorFieldName, this->ScalarFactorFieldAssociation);
vtkm::cont::ArrayHandle<vecType> result;
this->Worklet.Run(field,
vtkm::filter::ApplyPolicy(normalF, policy),
vtkm::filter::ApplyPolicy(sfF, policy),
this->ScaleAmount,
result);
this->Worklet.Run(
field,
vtkm::filter::ApplyPolicy(normalF, policy, vtkm::filter::FilterTraits<WarpScalar>()),
vtkm::filter::ApplyPolicy(
sfF, policy, vtkm::filter::FilterTraits<WarpScalar, WarpScalarScalarFieldTag>()),
this->ScaleAmount,
result);
return internal::CreateResult(inDataSet,
result,

@ -42,7 +42,7 @@ public:
class WarpScalarImp : public vtkm::worklet::WorkletMapField
{
public:
using ControlSignature = void(FieldIn<Vec3>, FieldIn<Vec3>, FieldIn<Scalar>, FieldOut<Vec3>);
using ControlSignature = void(FieldIn<>, FieldIn<>, FieldIn<>, FieldOut<>);
using ExecutionSignature = void(_1, _2, _3, _4);
VTKM_CONT
WarpScalarImp(vtkm::FloatDefault scaleAmount)

@ -77,8 +77,9 @@ void TestWarpScalar()
vtkm::cont::make_ArrayHandleConstant(normal, nov);
vtkm::cont::ArrayHandle<vtkm::FloatDefault> scaleFactorArray;
auto scaleFactor = ds.GetField("scalefactor");
scaleFactor.GetData().CopyTo(scaleFactorArray);
auto scaleFactor =
ds.GetField("scalefactor").GetData().ResetTypeList(vtkm::TypeListTagFieldScalar());
scaleFactor.CopyTo(scaleFactorArray);
auto sFAPortal = scaleFactorArray.GetPortalControl();
vtkm::worklet::WarpScalar warpWorklet;