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
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkWindowLevelLookupTable.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkWindowLevelLookupTable
* @brief map scalar values into colors or colors to scalars; generate color table
*
* vtkWindowLevelLookupTable is an object that is used by mapper objects
* to map scalar values into rgba (red-green-blue-alpha transparency)
* color specification, or rgba into scalar values. The color table can
* be created by direct insertion of color values, or by specifying a
* window and level. Window / Level is used in medical imaging to specify
* a linear greyscale ramp. The Level is the center of the ramp. The
* Window is the width of the ramp.
*
* @warning
* vtkWindowLevelLookupTable is a reference counted object. Therefore, you
* should always use operator "new" to construct new objects. This procedure
* will avoid memory problems (see text).
*
* @sa
* vtkLogLookupTable
*/
#ifndef vtkWindowLevelLookupTable_h
#define vtkWindowLevelLookupTable_h
#include "vtkLookupTable.h"
#include "vtkRenderingCoreModule.h" // For export macro
VTK_ABI_NAMESPACE_BEGIN
class VTKRENDERINGCORE_EXPORT vtkWindowLevelLookupTable : public vtkLookupTable
{
public:
static vtkWindowLevelLookupTable* New();
vtkTypeMacro(vtkWindowLevelLookupTable, vtkLookupTable);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Generate lookup table as a linear ramp between MinimumTableValue
* and MaximumTableValue.
*/
void ForceBuild() override;
///@{
/**
* Set the window for the lookup table. The window is the difference
* between TableRange[0] and TableRange[1].
*/
void SetWindow(double window)
{
if (window < 1e-5)
{
window = 1e-5;
}
this->Window = window;
this->SetTableRange(this->Level - this->Window / 2.0, this->Level + this->Window / 2.0);
}
vtkGetMacro(Window, double);
///@}
///@{
/**
* Set the Level for the lookup table. The level is the average of
* TableRange[0] and TableRange[1].
*/
void SetLevel(double level)
{
this->Level = level;
this->SetTableRange(this->Level - this->Window / 2.0, this->Level + this->Window / 2.0);
}
vtkGetMacro(Level, double);
///@}
///@{
/**
* Set inverse video on or off. You can achieve the same effect by
* switching the MinimumTableValue and the MaximumTableValue.
*/
void SetInverseVideo(vtkTypeBool iv);
vtkGetMacro(InverseVideo, vtkTypeBool);
vtkBooleanMacro(InverseVideo, vtkTypeBool);
///@}
///@{
/**
* Set the minimum table value. All lookup table entries below the
* start of the ramp will be set to this color. After you change
* this value, you must re-build the lookup table.
*/
vtkSetVector4Macro(MinimumTableValue, double);
vtkGetVector4Macro(MinimumTableValue, double);
///@}
///@{
/**
* Set the maximum table value. All lookup table entries above the
* end of the ramp will be set to this color. After you change
* this value, you must re-build the lookup table.
*/
vtkSetVector4Macro(MaximumTableValue, double);
vtkGetVector4Macro(MaximumTableValue, double);
///@}
protected:
vtkWindowLevelLookupTable(int sze = 256, int ext = 256);
~vtkWindowLevelLookupTable() override = default;
double Window;
double Level;
vtkTypeBool InverseVideo;
double MaximumTableValue[4];
double MinimumTableValue[4];
private:
vtkWindowLevelLookupTable(const vtkWindowLevelLookupTable&) = delete;
void operator=(const vtkWindowLevelLookupTable&) = delete;
};
VTK_ABI_NAMESPACE_END
#endif
|