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/contour/Contour.h>
|
||||
#include <vtkm/filter/field_conversion/CellAverage.h>
|
||||
#include <vtkm/filter/field_transform/PointElevation.h>
|
||||
#include <vtkm/source/Tangle.h>
|
||||
|
||||
@ -61,7 +62,6 @@ void TestContourFilterUniform()
|
||||
contour.SetMergeDuplicatePoints(true);
|
||||
contour.SetIsoValues({ 50, 100, 150 });
|
||||
contour.SetActiveField(fieldName);
|
||||
contour.SetFieldsToPass(fieldName);
|
||||
vtkm::cont::DataSet result = contour.Execute(inputData);
|
||||
|
||||
result.PrintSummary(std::cout);
|
||||
@ -70,6 +70,36 @@ void TestContourFilterUniform()
|
||||
vtkm::rendering::testing::RenderTestOptions testOptions;
|
||||
vtkm::rendering::testing::RenderTest(
|
||||
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()
|
||||
|
@ -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]) };
|
||||
}
|
||||
|
||||
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::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)
|
||||
@ -159,6 +163,7 @@ struct Pass4TrimState
|
||||
cellId = compute_start(AxisToSum{}, ijk, pdims - vtkm::Id3{ 1, 1, 1 });
|
||||
|
||||
//update our ijk
|
||||
cellId = increment_cellId(AxisToSum{}, cellId, axis_inc, left - ijk[AxisToSum::xindex]);
|
||||
ijk[AxisToSum::xindex] = left;
|
||||
|
||||
boundaryStatus[0] = FlyingEdges3D::Interior;
|
||||
|
Loading…
Reference in New Issue
Block a user