mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-10-05 01:49:02 +00:00
Merge topic 'flying-edges-cell-fields'
8a9887023 Add regression test for flying edges interpolating cell fields 4f19ac608 Fix interpolation of cell fields with flying edges Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !3129
This commit is contained in:
commit
e5723a4219
3
data/baseline/filter/contour-uniform-cellfield.png
Normal file
3
data/baseline/filter/contour-uniform-cellfield.png
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:0d4ecc87a7d69d32eb5a7ade1ce0daac57a3a09902accb2c3bba62f00c25b62f
|
||||||
|
size 58412
|
5
docs/changelog/flying-edges-cell-fields.md
Normal file
5
docs/changelog/flying-edges-cell-fields.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Fix interpolation of cell fields with flying edges
|
||||||
|
|
||||||
|
The flying edges algorithm (used when contouring uniform structured cell
|
||||||
|
sets) was not interpolating cell fields correctly. There was an indexing
|
||||||
|
issue where a shortcut in the stepping was not incrementing the cell index.
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include <vtkm/filter/clean_grid/CleanGrid.h>
|
#include <vtkm/filter/clean_grid/CleanGrid.h>
|
||||||
#include <vtkm/filter/contour/Contour.h>
|
#include <vtkm/filter/contour/Contour.h>
|
||||||
|
#include <vtkm/filter/field_conversion/CellAverage.h>
|
||||||
#include <vtkm/filter/field_transform/PointElevation.h>
|
#include <vtkm/filter/field_transform/PointElevation.h>
|
||||||
#include <vtkm/source/Tangle.h>
|
#include <vtkm/source/Tangle.h>
|
||||||
|
|
||||||
@ -61,7 +62,6 @@ void TestContourFilterUniform()
|
|||||||
contour.SetMergeDuplicatePoints(true);
|
contour.SetMergeDuplicatePoints(true);
|
||||||
contour.SetIsoValues({ 50, 100, 150 });
|
contour.SetIsoValues({ 50, 100, 150 });
|
||||||
contour.SetActiveField(fieldName);
|
contour.SetActiveField(fieldName);
|
||||||
contour.SetFieldsToPass(fieldName);
|
|
||||||
vtkm::cont::DataSet result = contour.Execute(inputData);
|
vtkm::cont::DataSet result = contour.Execute(inputData);
|
||||||
|
|
||||||
result.PrintSummary(std::cout);
|
result.PrintSummary(std::cout);
|
||||||
@ -70,6 +70,36 @@ void TestContourFilterUniform()
|
|||||||
vtkm::rendering::testing::RenderTestOptions testOptions;
|
vtkm::rendering::testing::RenderTestOptions testOptions;
|
||||||
vtkm::rendering::testing::RenderTest(
|
vtkm::rendering::testing::RenderTest(
|
||||||
result, "pointvar", "filter/contour-uniform.png", testOptions);
|
result, "pointvar", "filter/contour-uniform.png", testOptions);
|
||||||
|
|
||||||
|
std::cout << "Generate image for contour filter on a uniform grid with a cell field" << std::endl;
|
||||||
|
inputData = maker.Make3DUniformDataSet2();
|
||||||
|
VTKM_TEST_ASSERT(inputData.HasField(fieldName));
|
||||||
|
|
||||||
|
std::string cellFieldName = "elevation";
|
||||||
|
vtkm::filter::field_transform::PointElevation elevation;
|
||||||
|
vtkm::Bounds bounds = inputData.GetCoordinateSystem().GetBounds();
|
||||||
|
elevation.SetLowPoint(bounds.MinCorner());
|
||||||
|
elevation.SetHighPoint(bounds.MaxCorner());
|
||||||
|
elevation.SetRange(0, 1);
|
||||||
|
elevation.SetOutputFieldName(cellFieldName);
|
||||||
|
elevation.SetUseCoordinateSystemAsField(true);
|
||||||
|
inputData = elevation.Execute(inputData);
|
||||||
|
|
||||||
|
vtkm::filter::field_conversion::CellAverage point2cell;
|
||||||
|
point2cell.SetActiveField(cellFieldName);
|
||||||
|
point2cell.SetFieldsToPass(fieldName);
|
||||||
|
inputData = point2cell.Execute(inputData);
|
||||||
|
|
||||||
|
VTKM_TEST_ASSERT(inputData.HasPointField(fieldName));
|
||||||
|
VTKM_TEST_ASSERT(inputData.HasCellField(cellFieldName));
|
||||||
|
|
||||||
|
contour.SetIsoValues({ 80 });
|
||||||
|
result = contour.Execute(inputData);
|
||||||
|
|
||||||
|
result.PrintSummary(std::cout);
|
||||||
|
|
||||||
|
vtkm::rendering::testing::RenderTest(
|
||||||
|
result, cellFieldName, "filter/contour-uniform-cellfield.png", testOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestContourFilterUniformBoundaries()
|
void TestContourFilterUniformBoundaries()
|
||||||
|
@ -28,15 +28,19 @@ VTKM_EXEC inline vtkm::Id3 compute_incs3d(const vtkm::Id3& dims)
|
|||||||
return vtkm::Id3{ 1, dims[0], (dims[0] * dims[1]) };
|
return vtkm::Id3{ 1, dims[0], (dims[0] * dims[1]) };
|
||||||
}
|
}
|
||||||
|
|
||||||
VTKM_EXEC inline constexpr vtkm::Id increment_cellId(SumXAxis, vtkm::Id cellId, vtkm::Id)
|
VTKM_EXEC inline constexpr vtkm::Id increment_cellId(SumXAxis,
|
||||||
|
vtkm::Id cellId,
|
||||||
|
vtkm::Id,
|
||||||
|
vtkm::Id numToIncrement = 1)
|
||||||
{
|
{
|
||||||
return cellId + 1;
|
return cellId + numToIncrement;
|
||||||
}
|
}
|
||||||
VTKM_EXEC inline constexpr vtkm::Id increment_cellId(SumYAxis,
|
VTKM_EXEC inline constexpr vtkm::Id increment_cellId(SumYAxis,
|
||||||
vtkm::Id cellId,
|
vtkm::Id cellId,
|
||||||
vtkm::Id y_point_axis_inc)
|
vtkm::Id y_point_axis_inc,
|
||||||
|
vtkm::Id numToIncrement = 1)
|
||||||
{
|
{
|
||||||
return cellId + (y_point_axis_inc - 1);
|
return cellId + ((y_point_axis_inc - 1) * numToIncrement);
|
||||||
}
|
}
|
||||||
|
|
||||||
VTKM_EXEC inline bool case_includes_axes(vtkm::UInt8 const* const edgeUses)
|
VTKM_EXEC inline bool case_includes_axes(vtkm::UInt8 const* const edgeUses)
|
||||||
@ -159,6 +163,7 @@ struct Pass4TrimState
|
|||||||
cellId = compute_start(AxisToSum{}, ijk, pdims - vtkm::Id3{ 1, 1, 1 });
|
cellId = compute_start(AxisToSum{}, ijk, pdims - vtkm::Id3{ 1, 1, 1 });
|
||||||
|
|
||||||
//update our ijk
|
//update our ijk
|
||||||
|
cellId = increment_cellId(AxisToSum{}, cellId, axis_inc, left - ijk[AxisToSum::xindex]);
|
||||||
ijk[AxisToSum::xindex] = left;
|
ijk[AxisToSum::xindex] = left;
|
||||||
|
|
||||||
boundaryStatus[0] = FlyingEdges3D::Interior;
|
boundaryStatus[0] = FlyingEdges3D::Interior;
|
||||||
|
Loading…
Reference in New Issue
Block a user