mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-20 02:55:47 +00:00
Make dot/cross filter interface more consistent
Both the dot product filter and the cross product filter require 2 fields to be selected as their input. Previously, you used the superclass' SetActiveField for the primary field and SetSecondaryFieldName for the secondary field. This changes adds a SetPrimaryField method to make the selection more clear. I also changed SetSecondaryFieldName to SetSecondaryField that optionally takes an association to make it more consistent.
This commit is contained in:
parent
f359f6f15f
commit
707eccd3d5
@ -36,7 +36,21 @@ public:
|
|||||||
CrossProduct();
|
CrossProduct();
|
||||||
|
|
||||||
VTKM_CONT
|
VTKM_CONT
|
||||||
void SetSecondaryFieldName(const std::string& nm) { SecondaryFieldName = nm; }
|
void SetPrimaryField(
|
||||||
|
const std::string& name,
|
||||||
|
vtkm::cont::Field::AssociationEnum association = vtkm::cont::Field::ASSOC_ANY)
|
||||||
|
{
|
||||||
|
this->SetActiveField(name, association);
|
||||||
|
}
|
||||||
|
|
||||||
|
VTKM_CONT
|
||||||
|
void SetSecondaryField(
|
||||||
|
const std::string& name,
|
||||||
|
vtkm::cont::Field::AssociationEnum association = vtkm::cont::Field::ASSOC_ANY)
|
||||||
|
{
|
||||||
|
this->SecondaryFieldName = name;
|
||||||
|
this->SecondaryFieldAssociation = association;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T, typename StorageType, typename DerivedPolicy, typename DeviceAdapter>
|
template <typename T, typename StorageType, typename DerivedPolicy, typename DeviceAdapter>
|
||||||
VTKM_CONT vtkm::filter::Result DoExecute(
|
VTKM_CONT vtkm::filter::Result DoExecute(
|
||||||
@ -54,8 +68,8 @@ public:
|
|||||||
DeviceAdapter tag);
|
DeviceAdapter tag);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
vtkm::worklet::CrossProduct Worklet;
|
|
||||||
std::string SecondaryFieldName;
|
std::string SecondaryFieldName;
|
||||||
|
vtkm::cont::Field::AssociationEnum SecondaryFieldAssociation;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
|
@ -28,8 +28,8 @@ namespace filter
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
inline VTKM_CONT CrossProduct::CrossProduct()
|
inline VTKM_CONT CrossProduct::CrossProduct()
|
||||||
: vtkm::filter::FilterField<CrossProduct>()
|
: vtkm::filter::FilterField<CrossProduct>()
|
||||||
, Worklet()
|
, SecondaryFieldName()
|
||||||
, SecondaryFieldName("")
|
, SecondaryFieldAssociation(vtkm::cont::Field::ASSOC_ANY)
|
||||||
{
|
{
|
||||||
this->SetOutputFieldName("crossproduct");
|
this->SetOutputFieldName("crossproduct");
|
||||||
}
|
}
|
||||||
@ -45,14 +45,14 @@ inline VTKM_CONT vtkm::filter::Result CrossProduct::DoExecute(
|
|||||||
{
|
{
|
||||||
vtkm::cont::ArrayHandle<vtkm::Vec<T, 3>> outArray;
|
vtkm::cont::ArrayHandle<vtkm::Vec<T, 3>> outArray;
|
||||||
|
|
||||||
vtkm::worklet::DispatcherMapField<vtkm::worklet::CrossProduct, DeviceAdapter> dispatcher(
|
|
||||||
this->Worklet);
|
|
||||||
|
|
||||||
vtkm::cont::ArrayHandle<vtkm::Vec<T, 3>> secondaryField;
|
vtkm::cont::ArrayHandle<vtkm::Vec<T, 3>> secondaryField;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using Traits = vtkm::filter::FilterTraits<CrossProduct>;
|
using Traits = vtkm::filter::FilterTraits<CrossProduct>;
|
||||||
vtkm::filter::ApplyPolicy(inDataSet.GetField(SecondaryFieldName), policy, Traits())
|
vtkm::filter::ApplyPolicy(
|
||||||
|
inDataSet.GetField(this->SecondaryFieldName, this->SecondaryFieldAssociation),
|
||||||
|
policy,
|
||||||
|
Traits())
|
||||||
.CopyTo(secondaryField);
|
.CopyTo(secondaryField);
|
||||||
}
|
}
|
||||||
catch (const vtkm::cont::Error&)
|
catch (const vtkm::cont::Error&)
|
||||||
@ -60,6 +60,7 @@ inline VTKM_CONT vtkm::filter::Result CrossProduct::DoExecute(
|
|||||||
return vtkm::filter::Result();
|
return vtkm::filter::Result();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vtkm::worklet::DispatcherMapField<vtkm::worklet::CrossProduct, DeviceAdapter> dispatcher;
|
||||||
dispatcher.Invoke(field, secondaryField, outArray);
|
dispatcher.Invoke(field, secondaryField, outArray);
|
||||||
|
|
||||||
return vtkm::filter::Result(inDataSet,
|
return vtkm::filter::Result(inDataSet,
|
||||||
|
@ -36,7 +36,21 @@ public:
|
|||||||
DotProduct();
|
DotProduct();
|
||||||
|
|
||||||
VTKM_CONT
|
VTKM_CONT
|
||||||
void SetSecondaryFieldName(const std::string& nm) { SecondaryFieldName = nm; }
|
void SetPrimaryField(
|
||||||
|
const std::string& name,
|
||||||
|
vtkm::cont::Field::AssociationEnum association = vtkm::cont::Field::ASSOC_ANY)
|
||||||
|
{
|
||||||
|
this->SetActiveField(name, association);
|
||||||
|
}
|
||||||
|
|
||||||
|
VTKM_CONT
|
||||||
|
void SetSecondaryField(
|
||||||
|
const std::string& name,
|
||||||
|
vtkm::cont::Field::AssociationEnum association = vtkm::cont::Field::ASSOC_ANY)
|
||||||
|
{
|
||||||
|
this->SecondaryFieldName = name;
|
||||||
|
this->SecondaryFieldAssociation = association;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T, typename StorageType, typename DerivedPolicy, typename DeviceAdapter>
|
template <typename T, typename StorageType, typename DerivedPolicy, typename DeviceAdapter>
|
||||||
VTKM_CONT vtkm::filter::Result DoExecute(
|
VTKM_CONT vtkm::filter::Result DoExecute(
|
||||||
@ -54,8 +68,8 @@ public:
|
|||||||
DeviceAdapter tag);
|
DeviceAdapter tag);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
vtkm::worklet::DotProduct Worklet;
|
|
||||||
std::string SecondaryFieldName;
|
std::string SecondaryFieldName;
|
||||||
|
vtkm::cont::Field::AssociationEnum SecondaryFieldAssociation;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
|
@ -28,8 +28,8 @@ namespace filter
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
inline VTKM_CONT DotProduct::DotProduct()
|
inline VTKM_CONT DotProduct::DotProduct()
|
||||||
: vtkm::filter::FilterField<DotProduct>()
|
: vtkm::filter::FilterField<DotProduct>()
|
||||||
, Worklet()
|
, SecondaryFieldName()
|
||||||
, SecondaryFieldName("")
|
, SecondaryFieldAssociation(vtkm::cont::Field::ASSOC_ANY)
|
||||||
{
|
{
|
||||||
this->SetOutputFieldName("crossproduct");
|
this->SetOutputFieldName("crossproduct");
|
||||||
}
|
}
|
||||||
@ -45,14 +45,14 @@ inline VTKM_CONT vtkm::filter::Result DotProduct::DoExecute(
|
|||||||
{
|
{
|
||||||
vtkm::cont::ArrayHandle<T> outArray;
|
vtkm::cont::ArrayHandle<T> outArray;
|
||||||
|
|
||||||
vtkm::worklet::DispatcherMapField<vtkm::worklet::DotProduct, DeviceAdapter> dispatcher(
|
|
||||||
this->Worklet);
|
|
||||||
|
|
||||||
vtkm::cont::ArrayHandle<vtkm::Vec<T, 3>> secondaryField;
|
vtkm::cont::ArrayHandle<vtkm::Vec<T, 3>> secondaryField;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using Traits = vtkm::filter::FilterTraits<DotProduct>;
|
using Traits = vtkm::filter::FilterTraits<DotProduct>;
|
||||||
vtkm::filter::ApplyPolicy(inDataSet.GetField(SecondaryFieldName), policy, Traits())
|
vtkm::filter::ApplyPolicy(
|
||||||
|
inDataSet.GetField(this->SecondaryFieldName, this->SecondaryFieldAssociation),
|
||||||
|
policy,
|
||||||
|
Traits())
|
||||||
.CopyTo(secondaryField);
|
.CopyTo(secondaryField);
|
||||||
}
|
}
|
||||||
catch (const vtkm::cont::Error&)
|
catch (const vtkm::cont::Error&)
|
||||||
@ -60,6 +60,7 @@ inline VTKM_CONT vtkm::filter::Result DotProduct::DoExecute(
|
|||||||
return vtkm::filter::Result();
|
return vtkm::filter::Result();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vtkm::worklet::DispatcherMapField<vtkm::worklet::DotProduct, DeviceAdapter> dispatcher;
|
||||||
dispatcher.Invoke(field, secondaryField, outArray);
|
dispatcher.Invoke(field, secondaryField, outArray);
|
||||||
|
|
||||||
return vtkm::filter::Result(inDataSet,
|
return vtkm::filter::Result(inDataSet,
|
||||||
|
@ -92,6 +92,8 @@ void TestCrossProduct()
|
|||||||
const int numCases = 7;
|
const int numCases = 7;
|
||||||
for (int i = 0; i < numCases; i++)
|
for (int i = 0; i < numCases; i++)
|
||||||
{
|
{
|
||||||
|
std::cout << "Case " << i << std::endl;
|
||||||
|
|
||||||
vtkm::cont::DataSet dataSet = testDataSet.Make3DUniformDataSet0();
|
vtkm::cont::DataSet dataSet = testDataSet.Make3DUniformDataSet0();
|
||||||
vtkm::Id nVerts = dataSet.GetCoordinateSystem(0).GetData().GetNumberOfValues();
|
vtkm::Id nVerts = dataSet.GetCoordinateSystem(0).GetData().GetNumberOfValues();
|
||||||
|
|
||||||
@ -106,8 +108,8 @@ void TestCrossProduct()
|
|||||||
vtkm::cont::DataSetFieldAdd::AddPointField(dataSet, "vec2", field2);
|
vtkm::cont::DataSetFieldAdd::AddPointField(dataSet, "vec2", field2);
|
||||||
|
|
||||||
vtkm::filter::CrossProduct filter;
|
vtkm::filter::CrossProduct filter;
|
||||||
filter.SetSecondaryFieldName("vec2");
|
filter.SetPrimaryField("vec1");
|
||||||
filter.SetActiveField("vec1");
|
filter.SetSecondaryField("vec2");
|
||||||
vtkm::cont::DataSet result = filter.Execute(dataSet);
|
vtkm::cont::DataSet result = filter.Execute(dataSet);
|
||||||
|
|
||||||
VTKM_TEST_ASSERT(result.HasField("crossproduct", vtkm::cont::Field::ASSOC_POINTS),
|
VTKM_TEST_ASSERT(result.HasField("crossproduct", vtkm::cont::Field::ASSOC_POINTS),
|
||||||
|
@ -92,6 +92,8 @@ void TestDotProduct()
|
|||||||
const int numCases = 7;
|
const int numCases = 7;
|
||||||
for (int i = 0; i < numCases; i++)
|
for (int i = 0; i < numCases; i++)
|
||||||
{
|
{
|
||||||
|
std::cout << "Case " << i << std::endl;
|
||||||
|
|
||||||
vtkm::cont::DataSet dataSet = testDataSet.Make3DUniformDataSet0();
|
vtkm::cont::DataSet dataSet = testDataSet.Make3DUniformDataSet0();
|
||||||
vtkm::Id nVerts = dataSet.GetCoordinateSystem(0).GetData().GetNumberOfValues();
|
vtkm::Id nVerts = dataSet.GetCoordinateSystem(0).GetData().GetNumberOfValues();
|
||||||
|
|
||||||
@ -106,8 +108,8 @@ void TestDotProduct()
|
|||||||
vtkm::cont::DataSetFieldAdd::AddPointField(dataSet, "vec2", field2);
|
vtkm::cont::DataSetFieldAdd::AddPointField(dataSet, "vec2", field2);
|
||||||
|
|
||||||
vtkm::filter::DotProduct filter;
|
vtkm::filter::DotProduct filter;
|
||||||
filter.SetActiveField("vec1");
|
filter.SetPrimaryField("vec1");
|
||||||
filter.SetSecondaryFieldName("vec2");
|
filter.SetSecondaryField("vec2");
|
||||||
vtkm::cont::DataSet result = filter.Execute(dataSet);
|
vtkm::cont::DataSet result = filter.Execute(dataSet);
|
||||||
|
|
||||||
VTKM_TEST_ASSERT(result.HasField("crossproduct", vtkm::cont::Field::ASSOC_POINTS),
|
VTKM_TEST_ASSERT(result.HasField("crossproduct", vtkm::cont::Field::ASSOC_POINTS),
|
||||||
|
Loading…
Reference in New Issue
Block a user