VTK  9.3.0
vtkLookupTable.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
57#ifndef vtkLookupTable_h
58#define vtkLookupTable_h
59
60#include "vtkCommonCoreModule.h" // For export macro
61#include "vtkScalarsToColors.h"
62
63#include "vtkUnsignedCharArray.h" // Needed for inline method
64
65#define VTK_RAMP_LINEAR 0
66#define VTK_RAMP_SCURVE 1
67#define VTK_RAMP_SQRT 2
68#define VTK_SCALE_LINEAR 0
69#define VTK_SCALE_LOG10 1
70
71VTK_ABI_NAMESPACE_BEGIN
72class VTKCOMMONCORE_EXPORT vtkLookupTable : public vtkScalarsToColors
73{
74public:
76
87
93
95 void PrintSelf(ostream& os, vtkIndent indent) override;
96
98
103 vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component) override;
104 vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component,
105 vtkUnsignedCharArray* ghosts, unsigned char ghostsToSkip = 0xff) override;
107
112 int Allocate(int sz = 256, int ext = 256);
113
118 void Build() override;
119
127 virtual void ForceBuild();
128
133
135
147 vtkSetMacro(Ramp, int);
148 void SetRampToLinear() { this->SetRamp(VTK_RAMP_LINEAR); }
149 void SetRampToSCurve() { this->SetRamp(VTK_RAMP_SCURVE); }
150 void SetRampToSQRT() { this->SetRamp(VTK_RAMP_SQRT); }
151 vtkGetMacro(Ramp, int);
153
155
160 void SetScale(int scale);
161 void SetScaleToLinear() { this->SetScale(VTK_SCALE_LINEAR); }
162 void SetScaleToLog10() { this->SetScale(VTK_SCALE_LOG10); }
163 vtkGetMacro(Scale, int);
165
167
175 virtual void SetTableRange(const double r[2]);
176 virtual void SetTableRange(double min, double max);
177 vtkGetVectorMacro(TableRange, double, 2);
179
181
185 vtkSetVector2Macro(HueRange, double);
186 vtkGetVector2Macro(HueRange, double);
188
190
194 vtkSetVector2Macro(SaturationRange, double);
195 vtkGetVector2Macro(SaturationRange, double);
197
199
203 vtkSetVector2Macro(ValueRange, double);
204 vtkGetVector2Macro(ValueRange, double);
206
208
212 vtkSetVector2Macro(AlphaRange, double);
213 vtkGetVector2Macro(AlphaRange, double);
215
217
221 vtkSetVector4Macro(NanColor, double);
222 vtkGetVector4Macro(NanColor, double);
224
230
234 static void GetColorAsUnsignedChars(const double colorIn[4], unsigned char colorOut[4]);
235
237
241 vtkSetVector4Macro(BelowRangeColor, double);
242 vtkGetVector4Macro(BelowRangeColor, double);
244
246
249 vtkSetMacro(UseBelowRangeColor, vtkTypeBool);
250 vtkGetMacro(UseBelowRangeColor, vtkTypeBool);
251 vtkBooleanMacro(UseBelowRangeColor, vtkTypeBool);
253
255
259 vtkSetVector4Macro(AboveRangeColor, double);
260 vtkGetVector4Macro(AboveRangeColor, double);
262
264
267 vtkSetMacro(UseAboveRangeColor, vtkTypeBool);
268 vtkGetMacro(UseAboveRangeColor, vtkTypeBool);
269 vtkBooleanMacro(UseAboveRangeColor, vtkTypeBool);
271
275 const unsigned char* MapValue(double v) override;
276
281 void GetColor(double v, double rgb[3]) override;
282
287 double GetOpacity(double v) override;
288
298 virtual vtkIdType GetIndex(double v);
299
301
305 vtkIdType GetNumberOfTableValues() { return this->NumberOfColors; }
307
314 virtual void SetTableValue(vtkIdType indx, const double rgba[4]);
315
320 virtual void SetTableValue(vtkIdType indx, double r, double g, double b, double a = 1.0);
321
327
332 void GetTableValue(vtkIdType indx, double rgba[4]);
333
338 unsigned char* GetPointer(vtkIdType id) { return this->Table->GetPointer(4 * id); }
339
350 unsigned char* WritePointer(vtkIdType id, int number);
351
353
357 double* GetRange() VTK_SIZEHINT(2) override { return this->GetTableRange(); }
358 void SetRange(double min, double max) override { this->SetTableRange(min, max); }
359 void SetRange(const double rng[2]) override { this->SetRange(rng[0], rng[1]); }
361
368 static void GetLogRange(const double range[2], double log_range[2]);
369
373 static double ApplyLogScale(double v, const double range[2], const double log_range[2]);
374
376
382 vtkSetClampMacro(NumberOfColors, vtkIdType, 2, VTK_ID_MAX);
383 vtkGetMacro(NumberOfColors, vtkIdType);
385
387
393 vtkGetObjectMacro(Table, vtkUnsignedCharArray);
395
401 void MapScalarsThroughTable2(void* input, unsigned char* output, int inputDataType,
402 int numberOfValues, int inputIncrement, int outputFormat) override;
403
407 void DeepCopy(vtkScalarsToColors* obj) override;
408
413 vtkTypeBool UsingLogScale() override { return (this->GetScale() == VTK_SCALE_LOG10) ? 1 : 0; }
414
419
427 void GetIndexedColor(vtkIdType idx, double rgba[4]) override;
428
429protected:
430 vtkLookupTable(int sze = 256, int ext = 256);
431 ~vtkLookupTable() override;
432
435 double TableRange[2];
436 double HueRange[2];
437 double SaturationRange[2];
438 double ValueRange[2];
439 double AlphaRange[2];
440 double NanColor[4];
441 double BelowRangeColor[4];
443 double AboveRangeColor[4];
445
446 int Scale;
447 int Ramp;
450 double RGBA[4]; // used during conversion process
451 unsigned char NanColorChar[4];
452
456
461
462private:
463 vtkLookupTable(const vtkLookupTable&) = delete;
464 void operator=(const vtkLookupTable&) = delete;
465};
466
467//----------------------------------------------------------------------------
468inline unsigned char* vtkLookupTable::WritePointer(vtkIdType id, int number)
469{
470 this->InsertTime.Modified();
471 return this->Table->WritePointer(4 * id, 4 * number);
472}
473
474VTK_ABI_NAMESPACE_END
475#endif
ValueType * WritePointer(vtkIdType valueIdx, vtkIdType numValues)
Get the address of a particular data index.
Abstract superclass for all arrays.
a simple class to control print indentation
Definition vtkIndent.h:38
map scalar values into colors via a lookup table
void SetScaleToLinear()
Set the type of scale to use, linear or logarithmic.
vtkTypeBool IsOpaque(vtkAbstractArray *scalars, int colorMode, int component, vtkUnsignedCharArray *ghosts, unsigned char ghostsToSkip=0xff) override
Return true if all of the values defining the mapping have an opacity equal to 1.
virtual void ForceBuild()
Force the lookup table to regenerate from hue, saturation, value, and alpha min/max values.
static const vtkIdType ABOVE_RANGE_COLOR_INDEX
Constants for offsets of special colors (e.g., NanColor, BelowRangeColor, AboveRangeColor) from the m...
double GetOpacity(double v) override
Map one value through the lookup table and return the alpha value (the opacity) as a double between 0...
vtkTypeBool IsOpaque() override
Return true if all of the values defining the mapping have an opacity equal to 1.
vtkIdType GetNumberOfAvailableColors() override
Get the number of available colors for mapping to.
static const vtkIdType NUMBER_OF_SPECIAL_COLORS
Constants for offsets of special colors (e.g., NanColor, BelowRangeColor, AboveRangeColor) from the m...
void GetIndexedColor(vtkIdType idx, double rgba[4]) override
Return a color given an integer index.
static vtkLookupTable * New()
Construct with range=[0,1]; and hsv ranges set up for rainbow color table (from red to blue).
vtkTimeStamp OpaqueFlagBuildTime
void ResizeTableForSpecialColors()
Resize the LookupTable to have enough room for the out-of-range colors.
static void GetColorAsUnsignedChars(const double colorIn[4], unsigned char colorOut[4])
Given an RGBA[4] color in the [0,1] range, convert it to RGBA[4] in the [0,255] range.
virtual void SetTableValue(vtkIdType indx, const double rgba[4])
Directly load color into lookup table.
static const vtkIdType BELOW_RANGE_COLOR_INDEX
Constants for offsets of special colors (e.g., NanColor, BelowRangeColor, AboveRangeColor) from the m...
void SetNumberOfTableValues(vtkIdType number)
Specify the number of values (i.e., colors) in the lookup table.
vtkTimeStamp BuildTime
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkTimeStamp InsertTime
void DeepCopy(vtkScalarsToColors *obj) override
Copy the contents from another LookupTable.
static const vtkIdType REPEATED_LAST_COLOR_INDEX
Constants for offsets of special colors (e.g., NanColor, BelowRangeColor, AboveRangeColor) from the m...
int Allocate(int sz=256, int ext=256)
Allocate a color table of specified size.
double * GetTableValue(vtkIdType indx)
Return an RGBA color value for the given index into the lookup table.
vtkTypeBool IsOpaque(vtkAbstractArray *scalars, int colorMode, int component) override
Return true if all of the values defining the mapping have an opacity equal to 1.
void BuildSpecialColors()
Copies the "special" colors into the given table.
virtual void SetTableValue(vtkIdType indx, double r, double g, double b, double a=1.0)
Directly load color into lookup table.
const unsigned char * MapValue(double v) override
Map one value through the lookup table, returning an RBGA[4] color.
void MapScalarsThroughTable2(void *input, unsigned char *output, int inputDataType, int numberOfValues, int inputIncrement, int outputFormat) override
Map a set of scalars through the lookup table.
virtual vtkIdType GetIndex(double v)
Return the table index associated with a particular value.
void SetRampToLinear()
Set the shape of the table ramp to either S-curve, linear, or sqrt.
vtkTypeBool UsingLogScale() override
This should return 1 if the subclass is using log scale for mapping scalars to colors.
virtual void SetTableRange(double min, double max)
Set/Get the minimum/maximum scalar values for scalar mapping.
void SetRampToSQRT()
Set the shape of the table ramp to either S-curve, linear, or sqrt.
void SetRange(const double rng[2]) override
Sets/Gets the range of scalars which will be mapped.
vtkUnsignedCharArray * Table
void SetScaleToLog10()
Set the type of scale to use, linear or logarithmic.
void SetRange(double min, double max) override
Sets/Gets the range of scalars which will be mapped.
void SetRampToSCurve()
Set the shape of the table ramp to either S-curve, linear, or sqrt.
unsigned char * WritePointer(vtkIdType id, int number)
Get pointer to data.
static void GetLogRange(const double range[2], double log_range[2])
Returns the log of range in log_range.
void GetColor(double v, double rgb[3]) override
Map one value through the lookup table and return the color as an RGB[3] array of doubles between 0 a...
void SetTable(vtkUnsignedCharArray *)
Set/Get the internal table array that is used to map the scalars to colors.
vtkLookupTable(int sze=256, int ext=256)
unsigned char * GetPointer(vtkIdType id)
Get pointer to color table data.
void SetScale(int scale)
Set the type of scale to use, linear or logarithmic.
vtkIdType GetNumberOfTableValues()
Specify the number of values (i.e., colors) in the lookup table.
void GetTableValue(vtkIdType indx, double rgba[4])
Return an RGBA color value for the given index into the lookup table.
vtkTimeStamp SpecialColorsBuildTime
static double ApplyLogScale(double v, const double range[2], const double log_range[2])
Apply log to value, with appropriate constraints.
vtkTypeBool OpaqueFlag
virtual void SetTableRange(const double r[2])
Set/Get the minimum/maximum scalar values for scalar mapping.
~vtkLookupTable() override
void Build() override
Generate lookup table from hue, saturation, value, alpha min/max values.
unsigned char * GetNanColorAsUnsignedChars()
Return the NanColor as a pointer to 4 unsigned chars.
vtkTypeBool UseAboveRangeColor
double * GetRange() override
Sets/Gets the range of scalars which will be mapped.
vtkIdType NumberOfColors
vtkTypeBool UseBelowRangeColor
static const vtkIdType NAN_COLOR_INDEX
Constants for offsets of special colors (e.g., NanColor, BelowRangeColor, AboveRangeColor) from the m...
Superclass for mapping scalar values to colors.
record modification and/or execution time
void Modified()
Set this objects time to the current time.
dynamic, self-adjusting array of unsigned char
int vtkTypeBool
Definition vtkABI.h:64
#define VTK_SCALE_LOG10
#define VTK_SCALE_LINEAR
#define VTK_RAMP_SQRT
#define VTK_RAMP_LINEAR
#define VTK_RAMP_SCURVE
int vtkIdType
Definition vtkType.h:315
#define VTK_ID_MAX
Definition vtkType.h:319
#define VTK_SIZEHINT(...)
#define max(a, b)