VTK  9.7.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
47
48#ifndef vtkLookupTable_h
49#define vtkLookupTable_h
50
51#include "vtkCommonCoreModule.h" // For export macro
52#include "vtkScalarsToColors.h"
53#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
54
55#include "vtkUnsignedCharArray.h" // Needed for inline method
56
57#define VTK_RAMP_LINEAR 0
58#define VTK_RAMP_SCURVE 1
59#define VTK_RAMP_SQRT 2
60#define VTK_SCALE_LINEAR 0
61#define VTK_SCALE_LOG10 1
62
63VTK_ABI_NAMESPACE_BEGIN
64class VTKCOMMONCORE_EXPORT VTK_MARSHALAUTO vtkLookupTable : public vtkScalarsToColors
65{
66public:
68
79
85
87 void PrintSelf(ostream& os, vtkIndent indent) override;
88
90
95 vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component) override;
96 vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component,
97 vtkUnsignedCharArray* ghosts, unsigned char ghostsToSkip = 0xff) override;
99
104 int Allocate(int sz = 256, int ext = 256);
105
110 void Build() override;
111
119 virtual void ForceBuild();
120
125
127
139 vtkSetMacro(Ramp, int);
143 vtkGetMacro(Ramp, int);
145
147
152 void SetScale(int scale);
155 vtkGetMacro(Scale, int);
157
159
167 virtual void SetTableRange(const double r[2]);
168 virtual void SetTableRange(double min, double max);
169 vtkGetVectorMacro(TableRange, double, 2);
171
173
177 vtkSetVector2Macro(HueRange, double);
178 vtkGetVector2Macro(HueRange, double);
180
182
186 vtkSetVector2Macro(SaturationRange, double);
187 vtkGetVector2Macro(SaturationRange, double);
189
191
195 vtkSetVector2Macro(ValueRange, double);
196 vtkGetVector2Macro(ValueRange, double);
198
200
204 vtkSetVector2Macro(AlphaRange, double);
205 vtkGetVector2Macro(AlphaRange, double);
207
209
213 vtkSetVector4Macro(NanColor, double);
214 vtkGetVector4Macro(NanColor, double);
216
222
226 static void GetColorAsUnsignedChars(const double colorIn[4], unsigned char colorOut[4]);
227
229
233 vtkSetVector4Macro(BelowRangeColor, double);
234 vtkGetVector4Macro(BelowRangeColor, double);
236
238
245
247
251 vtkSetVector4Macro(AboveRangeColor, double);
252 vtkGetVector4Macro(AboveRangeColor, double);
254
256
263
267 const unsigned char* MapValue(double v) override;
268
273 void GetColor(double v, double rgb[3]) override;
274
279 double GetOpacity(double v) override;
280
290 virtual vtkIdType GetIndex(double v);
291
293
301
309 virtual void SetTableValue(vtkIdType index, const double rgba[4]);
310
316 virtual void SetTableValue(vtkIdType index, double r, double g, double b, double a = 1.0);
317
324
330 void GetTableValue(vtkIdType index, double rgba[4]);
331
336 unsigned char* GetPointer(vtkIdType id) { return this->Table->GetPointer(4 * id); }
337
348 unsigned char* WritePointer(vtkIdType id, int number);
349
351
355 double* GetRange() VTK_SIZEHINT(2) override { return this->GetTableRange(); }
356 void SetRange(double min, double max) override { this->SetTableRange(min, max); }
357 void SetRange(const double rng[2]) override { this->SetRange(rng[0], rng[1]); }
359
366 static void GetLogRange(const double range[2], double log_range[2]);
367
371 static double ApplyLogScale(double v, const double range[2], const double log_range[2]);
372
374
380 vtkSetClampMacro(NumberOfColors, vtkIdType, 2, VTK_ID_MAX);
383
385
391 vtkGetObjectMacro(Table, vtkUnsignedCharArray);
393
395
400 void MapScalarsThroughTable(vtkAbstractArray* input, unsigned char* output, int numberOfTuples,
401 int numberOfComponents, int vectorComponent, int outputFormat) override;
404
408 void DeepCopy(vtkScalarsToColors* obj) override;
409
414 vtkTypeBool UsingLogScale() override { return (this->GetScale() == VTK_SCALE_LOG10) ? 1 : 0; }
415
420
428 void GetIndexedColor(vtkIdType idx, double rgba[4]) override;
429
430protected:
431 vtkLookupTable(int sze = 256, int ext = 256);
432 ~vtkLookupTable() override;
433
436 double TableRange[2];
437 double HueRange[2];
439 double ValueRange[2];
440 double AlphaRange[2];
441 double NanColor[4];
446
447 int Scale;
448 int Ramp;
451 double RGBA[4]; // used during conversion process
452 unsigned char NanColorChar[4];
453
457
462
463private:
464 vtkLookupTable(const vtkLookupTable&) = delete;
465 void operator=(const vtkLookupTable&) = delete;
466};
467
468//----------------------------------------------------------------------------
469inline unsigned char* vtkLookupTable::WritePointer(vtkIdType id, int number)
470{
471 this->InsertTime.Modified();
472 return this->Table->WritePointer(4 * id, 4 * number);
473}
474
475VTK_ABI_NAMESPACE_END
476#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:29
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.
double TableRange[2]
double SaturationRange[2]
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.
void MapScalarsThroughTable(vtkAbstractArray *input, unsigned char *output, int numberOfTuples, int numberOfComponents, int vectorComponent, int outputFormat) override
Map a set of scalars through the 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
double ValueRange[2]
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.
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.
double AboveRangeColor[4]
void BuildSpecialColors()
Copies the "special" colors into the given table.
const unsigned char * MapValue(double v) override
Map one value through the lookup table, returning an RBGA[4] color.
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.
double AlphaRange[2]
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.
double BelowRangeColor[4]
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.
virtual int GetScale()
Set the type of scale to use, linear or logarithmic.
virtual void SetRamp(int)
Set the shape of the table ramp to either S-curve, linear, or sqrt.
vtkTimeStamp SpecialColorsBuildTime
static double ApplyLogScale(double v, const double range[2], const double log_range[2])
Apply log to value, with appropriate constraints.
double * GetTableValue(vtkIdType index)
Return an RGBA color value for the given index into the lookup table.
virtual void SetTableValue(vtkIdType index, const double rgba[4])
Directly load color into lookup table.
vtkTypeBool OpaqueFlag
virtual void SetTableRange(const double r[2])
Set/Get the minimum/maximum scalar values for scalar mapping.
~vtkLookupTable() override
virtual double * GetTableRange()
Set/Get the minimum/maximum scalar values for scalar mapping.
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
unsigned char NanColorChar[4]
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...
void MapScalarsThroughTable(vtkDataArray *scalars, unsigned char *output, int outputFormat)
Map a set of scalars through the lookup table in a single operation.
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:363
#define VTK_ID_MAX
Definition vtkType.h:367
#define VTK_MARSHAL_EXCLUDE_REASON_IS_REDUNDANT
#define VTK_SIZEHINT(...)
#define VTK_MARSHALAUTO
#define VTK_MARSHALEXCLUDE(reason)
#define max(a, b)