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
|
#include "vtkCleanUnstructuredGrid.h"
#include "vtkColorTransferFunction.h"
#include "vtkExtractHistogram.h"
#include "vtkDataSetReader.h"
#include "vtkPiecewiseFunction.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkTesting.h"
#include "vtkTestUtilities.h"
#include "vtkTransferFunctionViewer.h"
int main(int argc, char* argv[])
{
vtkTesting *t = vtkTesting::New();
int cc;
for (cc = 1; cc < argc; cc++)
{
t->AddArgument(argv[cc]);
}
char* fname =
vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/ironProt.vtk");
vtkDataSetReader *reader = vtkDataSetReader::New();
reader->SetFileName(fname);
delete [] fname;
vtkCleanUnstructuredGrid *clean = vtkCleanUnstructuredGrid::New();
clean->SetInputConnection(reader->GetOutputPort());
vtkExtractHistogram *histogram = vtkExtractHistogram::New();
histogram->SetInputConnection(clean->GetOutputPort());
histogram->SetComponent(0);
histogram->SetBinCount(256);
histogram->Update();
vtkPiecewiseFunction *oFunc = vtkPiecewiseFunction::New();
oFunc->AddPoint(20, 0.0);
oFunc->AddPoint(255, 0.2);
vtkColorTransferFunction *cFunc = vtkColorTransferFunction::New();
cFunc->AddRGBPoint(0.0, 0.0, 0.0, 0.0);
cFunc->AddRGBPoint(64.0, 1.0, 0.0, 0.0);
cFunc->AddRGBPoint(128.0, 0.0, 0.0, 1.0);
cFunc->AddRGBPoint(192.0, 0.0, 1.0, 0.0);
cFunc->AddRGBPoint(255.0, 0.0, 0.2, 0.0);
vtkTransferFunctionViewer *viewer = vtkTransferFunctionViewer::New();
viewer->SetTransferFunctionEditorTypeToSimple1D();
viewer->SetModificationTypeToColorAndOpacity();
//viewer->SetHistogram(histogram->GetOutput());
//viewer->SetHistogramVisibility(1);
viewer->SetShowColorFunctionInHistogram(1);
viewer->SetShowColorFunctionOnLines(0);
viewer->SetColorElementsByColorFunction(0);
viewer->SetElementsColor(1, 0, 1);
viewer->SetColorSpace(1); // HSV
viewer->SetElementLighting(0, 0.5, 0.5, 10);
viewer->SetAllowInteriorElements(1);
viewer->SetOpacityFunction(oFunc);
viewer->SetColorFunction(cFunc);
viewer->SetVisibleScalarRange(100, 200);
viewer->SetSize(800, 300);
viewer->SetElementOpacity(3, 0.5);
viewer->SetElementRGBColor(3, 0.0, 0.3, 0.8);
viewer->SetElementHSVColor(4, 0.5, 1, 1);
viewer->SetElementScalar(4, 175.0);
viewer->MoveToPreviousElement();
viewer->MoveToPreviousElement();
viewer->MoveToNextElement();
viewer->Render();
double color[3];
viewer->GetElementHSVColor(2, color);
if (color[0] != 0 || color[1] != 1 || color[2] != 1)
{
cout << "ERROR: Wrong HSV color reported." << endl;
histogram->Delete();
reader->Delete();
clean->Delete();
viewer->Delete();
cFunc->Delete();
oFunc->Delete();
t->Delete();
return 1;
}
double *range = viewer->GetVisibleScalarRange();
if (range[0] != 100 || range[1] != 200)
{
cout << "ERROR: Visible scalar range incorrectly reported." << endl;
histogram->Delete();
reader->Delete();
clean->Delete();
viewer->Delete();
cFunc->Delete();
oFunc->Delete();
t->Delete();
return 1;
}
range = viewer->GetWholeScalarRange();
double range2[2];
viewer->GetWholeScalarRange(range2);
if (range[0] != 0 || range[1] != 255 ||
range2[0] != 0 || range2[1] != 255)
{
cout << "ERROR: Whole scalar range incorrectly reported." << endl;
histogram->Delete();
reader->Delete();
clean->Delete();
viewer->Delete();
cFunc->Delete();
oFunc->Delete();
t->Delete();
return 1;
}
t->SetRenderWindow(viewer->GetRenderWindow());
int retVal = t->RegressionTest(10);
histogram->Delete();
reader->Delete();
clean->Delete();
viewer->Delete();
cFunc->Delete();
oFunc->Delete();
t->Delete();
return !retVal;
}
|