use the new CreateResult

This commit is contained in:
Li-Ta Lo 2022-01-28 08:48:26 -07:00
parent 3a9e9f1ac1
commit d8fdda5c37
3 changed files with 23 additions and 42 deletions

@ -84,19 +84,16 @@ vtkm::cont::DataSet ClipWithField::DoExecute(const vtkm::cont::DataSet& input)
vtkm::worklet::Clip worklet;
//get the cells and coordinates of the dataset
const vtkm::cont::UnknownCellSet& cells = input.GetCellSet();
vtkm::cont::DataSet output;
const vtkm::cont::UnknownCellSet& inputCellSet = input.GetCellSet();
vtkm::cont::CellSetExplicit<> outputCellSet;
auto resolveFieldType = [&, this](auto concrete) {
vtkm::cont::CellSetExplicit<> outputCellSet =
worklet.Run(cells, concrete, this->ClipValue, this->Invert);
output.SetCellSet(outputCellSet);
outputCellSet = worklet.Run(inputCellSet, concrete, this->ClipValue, this->Invert);
};
this->CastAndCallScalarField(this->GetFieldFromDataSet(input).GetData(), resolveFieldType);
const auto& inArray = this->GetFieldFromDataSet(input).GetData();
this->CastAndCallScalarField(inArray, resolveFieldType);
auto mapper = [&](auto& result, const auto& f) { DoMapField(result, f, worklet); };
vtkm::cont::DataSet output = this->CreateResult(input, outputCellSet, mapper);
// Compute the new boundary points and add them to the output:
for (vtkm::IdComponent coordSystemId = 0; coordSystemId < input.GetNumberOfCoordinateSystems();
@ -106,9 +103,6 @@ vtkm::cont::DataSet ClipWithField::DoExecute(const vtkm::cont::DataSet& input)
coords.GetData().CastAndCall(ClipWithFieldProcessCoords{}, coords.GetName(), worklet, output);
}
auto mapper = [&](auto& result, const auto& f) { DoMapField(result, f, worklet); };
MapFieldsOntoOutput(input, output, mapper);
return output;
}
} // namespace contour

@ -76,20 +76,17 @@ bool DoMapField(vtkm::cont::DataSet& result,
//-----------------------------------------------------------------------------
vtkm::cont::DataSet ClipWithImplicitFunction::DoExecute(const vtkm::cont::DataSet& input)
{
//get the cells and coordinates of the dataset
const vtkm::cont::UnknownCellSet& cells = input.GetCellSet();
const vtkm::cont::UnknownCellSet& inputCellSet = input.GetCellSet();
const vtkm::cont::CoordinateSystem& inputCoords =
input.GetCoordinateSystem(this->GetActiveCoordinateSystemIndex());
vtkm::worklet::Clip Worklet;
vtkm::worklet::Clip worklet;
vtkm::cont::CellSetExplicit<> outputCellSet =
Worklet.Run(cells, this->Function, inputCoords, this->Invert);
worklet.Run(inputCellSet, this->Function, inputCoords, this->Invert);
//create the output data
vtkm::cont::DataSet output;
output.SetCellSet(outputCellSet);
auto mapper = [&](auto& result, const auto& f) { DoMapField(result, f, worklet); };
vtkm::cont::DataSet output = this->CreateResult(input, outputCellSet, mapper);
// compute output coordinates
for (vtkm::IdComponent coordSystemId = 0; coordSystemId < input.GetNumberOfCoordinateSystems();
@ -97,12 +94,9 @@ vtkm::cont::DataSet ClipWithImplicitFunction::DoExecute(const vtkm::cont::DataSe
{
const vtkm::cont::CoordinateSystem& coords = input.GetCoordinateSystem(coordSystemId);
coords.GetData().CastAndCall(
ClipWithImplicitFunctionProcessCoords{}, coords.GetName(), Worklet, output);
ClipWithImplicitFunctionProcessCoords{}, coords.GetName(), worklet, output);
}
auto mapper = [&](auto& result, const auto& f) { DoMapField(result, f, Worklet); };
MapFieldsOntoOutput(input, output, mapper);
return output;
}
} // namespace contour

@ -105,10 +105,9 @@ vtkm::cont::DataSet Contour::DoExecute(const vtkm::cont::DataSet& inDataSet)
throw vtkm::cont::ErrorFilterExecution("No iso-values provided.");
}
//get the cells and coordinates of the dataset
const vtkm::cont::UnknownCellSet& cells = inDataSet.GetCellSet();
const vtkm::cont::CoordinateSystem& coords =
//get the inputCells and coordinates of the dataset
const vtkm::cont::UnknownCellSet& inputCells = inDataSet.GetCellSet();
const vtkm::cont::CoordinateSystem& inputCoords =
inDataSet.GetCoordinateSystem(this->GetActiveCoordinateSystemIndex());
const auto& fieldArray = this->GetFieldFromDataSet(inDataSet).GetData();
@ -117,10 +116,9 @@ vtkm::cont::DataSet Contour::DoExecute(const vtkm::cont::DataSet& inDataSet)
Vec3HandleType vertices;
Vec3HandleType normals;
vtkm::cont::DataSet output;
vtkm::cont::CellSetSingleType<> outputCells;
bool generateHighQualityNormals = IsCellSetStructured(cells)
bool generateHighQualityNormals = IsCellSetStructured(inputCells)
? !this->ComputeFastNormalsForStructured
: !this->ComputeFastNormalsForUnstructured;
@ -129,17 +127,22 @@ vtkm::cont::DataSet Contour::DoExecute(const vtkm::cont::DataSet& inDataSet)
if (this->GenerateNormals && generateHighQualityNormals)
{
outputCells = worklet.Run(ivalues, cells, coords.GetData(), concrete, vertices, normals);
outputCells =
worklet.Run(ivalues, inputCells, inputCoords.GetData(), concrete, vertices, normals);
}
else
{
outputCells = worklet.Run(ivalues, cells, coords.GetData(), concrete, vertices);
outputCells = worklet.Run(ivalues, inputCells, inputCoords.GetData(), concrete, vertices);
}
};
fieldArray.CastAndCallForTypesWithFloatFallback<SupportedTypes, VTKM_DEFAULT_STORAGE_LIST>(
ResolveFieldType);
auto mapper = [&](auto& result, const auto& f) { DoMapField(result, f, worklet); };
vtkm::cont::DataSet output = this->CreateResult(
inDataSet, outputCells, vtkm::cont::CoordinateSystem{ "coordinates", vertices }, mapper);
if (this->GenerateNormals)
{
if (!generateHighQualityNormals)
@ -163,16 +166,6 @@ vtkm::cont::DataSet Contour::DoExecute(const vtkm::cont::DataSet& inDataSet)
output.AddField(interpolationEdgeIdsField);
}
//assign the connectivity to the cell set
output.SetCellSet(outputCells);
//add the coordinates to the output dataset
vtkm::cont::CoordinateSystem outputCoords("coordinates", vertices);
output.AddCoordinateSystem(outputCoords);
auto mapper = [&](auto& result, const auto& f) { DoMapField(result, f, worklet); };
MapFieldsOntoOutput(inDataSet, output, mapper);
return output;
}
} // namespace contour