1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkDataArray.h"
#include "vtkFloatArray.h"
#include "vtkIdList.h"
#include "vtkImageData.h"
#include "vtkSimpleScalarTree.h"
#include "vtkSmartPointer.h"
#include "vtkSphereSource.h"
#include "vtkTestErrorObserver.h"
#include <sstream>
static vtkSmartPointer<vtkImageData> MakeImage(int, int, int);
int UnitTestSimpleScalarTree(int, char*[])
{
int status = 0;
vtkSmartPointer<vtkTest::ErrorObserver> errorObserver =
vtkSmartPointer<vtkTest::ErrorObserver>::New();
std::cout << "Testing empty Print...";
vtkSmartPointer<vtkSimpleScalarTree> stree = vtkSmartPointer<vtkSimpleScalarTree>::New();
std::ostringstream streePrint;
stree->Print(streePrint);
std::cout << "Passed" << std::endl;
std::cout << "Testing no data error...";
stree->AddObserver(vtkCommand::ErrorEvent, errorObserver);
stree->BuildTree();
int status1 = errorObserver->CheckErrorMessage("No data to build tree with");
if (status1)
{
status++;
std::cout << "Failed" << std::endl;
}
else
{
std::cout << "Passed" << std::endl;
}
std::cout << "Testing no scalar data error...";
vtkSmartPointer<vtkSphereSource> aSphere = vtkSmartPointer<vtkSphereSource>::New();
aSphere->Update();
stree->SetDataSet(aSphere->GetOutput());
stree->BuildTree();
int status2 = errorObserver->CheckErrorMessage("No scalar data to build trees with");
if (status2)
{
status++;
std::cout << "Failed" << std::endl;
}
else
{
std::cout << "Passed" << std::endl;
}
std::cout << "Testing GetNextCell...";
int status3 = 0;
int dim = 5;
vtkSmartPointer<vtkImageData> anImage = MakeImage(dim, dim, dim);
stree->SetDataSet(anImage);
stree->SetMaxLevel(VTK_INT_MAX);
vtkIdType cell;
vtkIdList* ids;
vtkSmartPointer<vtkFloatArray> scalars = vtkSmartPointer<vtkFloatArray>::New();
// Verify that branching does not affect the number of cells found
int numExpected = (dim - 1) * (dim - 1);
for (int b = 2; b < dim * dim; ++b)
{
stree->SetBranchingFactor(b);
stree->Initialize();
stree->BuildTree();
for (double v = 0; v < dim - 1; v += 1.0)
{
int numGot = 0;
stree->InitTraversal(v + 0.5);
while (stree->GetNextCell(cell, ids, scalars))
{
++numGot;
}
if (numGot != numExpected)
{
std::cout << "For " << v << " Expected " << numExpected << " but got " << numGot
<< std::endl;
++status3;
}
}
}
if (status3)
{
std::cout << "Failed" << std::endl;
++status;
}
else
{
std::cout << "Passed" << std::endl;
}
std::cout << "Testing Print...";
stree->Print(streePrint);
std::cout << "Passed" << std::endl;
if (status)
{
return EXIT_FAILURE;
}
else
{
return EXIT_SUCCESS;
}
}
vtkSmartPointer<vtkImageData> MakeImage(int dimx, int dimy, int dimz)
{
vtkSmartPointer<vtkImageData> anImage = vtkSmartPointer<vtkImageData>::New();
anImage->SetDimensions(dimx, dimy, dimz);
anImage->AllocateScalars(VTK_FLOAT, 1);
float* pixel = static_cast<float*>(anImage->GetScalarPointer(0, 0, 0));
float value = 0.0;
for (int z = 0; z < dimz; z++)
{
for (int y = 0; y < dimy; y++)
{
for (int x = 0; x < dimx; x++)
{
*pixel++ = value;
}
}
value += 1.0;
}
return anImage;
}
|