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
48 #ifndef vtkLookupTable_h
49 #define vtkLookupTable_h
50 
51 #include "vtkCommonCoreModule.h" // For export macro
52 #include "vtkScalarsToColors.h"
53 
54 #include "vtkUnsignedCharArray.h" // Needed for inline method
55 
56 #define VTK_RAMP_LINEAR 0
57 #define VTK_RAMP_SCURVE 1
58 #define VTK_RAMP_SQRT 2
59 #define VTK_SCALE_LINEAR 0
60 #define VTK_SCALE_LOG10 1
61 
62 VTK_ABI_NAMESPACE_BEGIN
63 class VTKCOMMONCORE_EXPORT vtkLookupTable : public vtkScalarsToColors
64 {
65 public:
67 
75  static const vtkIdType NAN_COLOR_INDEX;
78 
83  static vtkLookupTable* New();
84 
86  void PrintSelf(ostream& os, vtkIndent indent) override;
87 
89 
93  vtkTypeBool IsOpaque() override;
94  vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component) override;
95  vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component,
96  vtkUnsignedCharArray* ghosts, unsigned char ghostsToSkip = 0xff) override;
98 
103  int Allocate(int sz = 256, int ext = 256);
104 
109  void Build() override;
110 
118  virtual void ForceBuild();
119 
124 
126 
138  vtkSetMacro(Ramp, int);
139  void SetRampToLinear() { this->SetRamp(VTK_RAMP_LINEAR); }
140  void SetRampToSCurve() { this->SetRamp(VTK_RAMP_SCURVE); }
141  void SetRampToSQRT() { this->SetRamp(VTK_RAMP_SQRT); }
142  vtkGetMacro(Ramp, int);
144 
146 
151  void SetScale(int scale);
152  void SetScaleToLinear() { this->SetScale(VTK_SCALE_LINEAR); }
153  void SetScaleToLog10() { this->SetScale(VTK_SCALE_LOG10); }
154  vtkGetMacro(Scale, int);
156 
158 
166  virtual void SetTableRange(const double r[2]);
167  virtual void SetTableRange(double min, double max);
168  vtkGetVectorMacro(TableRange, double, 2);
170 
172 
176  vtkSetVector2Macro(HueRange, double);
177  vtkGetVector2Macro(HueRange, double);
179 
181 
185  vtkSetVector2Macro(SaturationRange, double);
186  vtkGetVector2Macro(SaturationRange, double);
188 
190 
194  vtkSetVector2Macro(ValueRange, double);
195  vtkGetVector2Macro(ValueRange, double);
197 
199 
203  vtkSetVector2Macro(AlphaRange, double);
204  vtkGetVector2Macro(AlphaRange, double);
206 
208 
212  vtkSetVector4Macro(NanColor, double);
213  vtkGetVector4Macro(NanColor, double);
215 
220  unsigned char* GetNanColorAsUnsignedChars();
221 
225  static void GetColorAsUnsignedChars(const double colorIn[4], unsigned char colorOut[4]);
226 
228 
232  vtkSetVector4Macro(BelowRangeColor, double);
233  vtkGetVector4Macro(BelowRangeColor, double);
235 
237 
240  vtkSetMacro(UseBelowRangeColor, vtkTypeBool);
241  vtkGetMacro(UseBelowRangeColor, vtkTypeBool);
242  vtkBooleanMacro(UseBelowRangeColor, vtkTypeBool);
244 
246 
250  vtkSetVector4Macro(AboveRangeColor, double);
251  vtkGetVector4Macro(AboveRangeColor, double);
253 
255 
258  vtkSetMacro(UseAboveRangeColor, vtkTypeBool);
259  vtkGetMacro(UseAboveRangeColor, vtkTypeBool);
260  vtkBooleanMacro(UseAboveRangeColor, vtkTypeBool);
262 
266  const unsigned char* MapValue(double v) override;
267 
272  void GetColor(double v, double rgb[3]) override;
273 
278  double GetOpacity(double v) override;
279 
289  virtual vtkIdType GetIndex(double v);
290 
292 
296  vtkIdType GetNumberOfTableValues() { return this->NumberOfColors; }
298 
305  virtual void SetTableValue(vtkIdType indx, const double rgba[4]);
306 
311  virtual void SetTableValue(vtkIdType indx, double r, double g, double b, double a = 1.0);
312 
318 
323  void GetTableValue(vtkIdType indx, double rgba[4]);
324 
329  unsigned char* GetPointer(vtkIdType id) { return this->Table->GetPointer(4 * id); }
330 
341  unsigned char* WritePointer(vtkIdType id, int number);
342 
344 
348  double* GetRange() VTK_SIZEHINT(2) override { return this->GetTableRange(); }
349  void SetRange(double min, double max) override { this->SetTableRange(min, max); }
350  void SetRange(const double rng[2]) override { this->SetRange(rng[0], rng[1]); }
352 
359  static void GetLogRange(const double range[2], double log_range[2]);
360 
364  static double ApplyLogScale(double v, const double range[2], const double log_range[2]);
365 
367 
373  vtkSetClampMacro(NumberOfColors, vtkIdType, 2, VTK_ID_MAX);
374  vtkGetMacro(NumberOfColors, vtkIdType);
376 
378 
384  vtkGetObjectMacro(Table, vtkUnsignedCharArray);
386 
392  void MapScalarsThroughTable2(void* input, unsigned char* output, int inputDataType,
393  int numberOfValues, int inputIncrement, int outputFormat) override;
394 
398  void DeepCopy(vtkScalarsToColors* obj) override;
399 
404  vtkTypeBool UsingLogScale() override { return (this->GetScale() == VTK_SCALE_LOG10) ? 1 : 0; }
405 
410 
418  void GetIndexedColor(vtkIdType idx, double rgba[4]) override;
419 
420 protected:
421  vtkLookupTable(int sze = 256, int ext = 256);
422  ~vtkLookupTable() override;
423 
426  double TableRange[2];
427  double HueRange[2];
428  double SaturationRange[2];
429  double ValueRange[2];
430  double AlphaRange[2];
431  double NanColor[4];
432  double BelowRangeColor[4];
434  double AboveRangeColor[4];
436 
437  int Scale;
438  int Ramp;
441  double RGBA[4]; // used during conversion process
442  unsigned char NanColorChar[4];
443 
447 
452 
453 private:
454  vtkLookupTable(const vtkLookupTable&) = delete;
455  void operator=(const vtkLookupTable&) = delete;
456 };
457 
458 //----------------------------------------------------------------------------
459 inline unsigned char* vtkLookupTable::WritePointer(vtkIdType id, int number)
460 {
461  this->InsertTime.Modified();
462  return this->Table->WritePointer(4 * id, 4 * number);
463 }
464 
465 VTK_ABI_NAMESPACE_END
466 #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
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 vtkLookupTable * New()
Construct with range=[0,1]; and hsv ranges set up for rainbow color table (from red to blue).
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.
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.
double * GetTableValue(vtkIdType indx)
Return an RGBA color value for the given index into 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
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.
unsigned char * GetNanColorAsUnsignedChars()
Return the NanColor as a pointer to 4 unsigned chars.
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.
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.
double * GetRange() override
Sets/Gets the range of scalars which will be mapped.
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.
const unsigned char * MapValue(double v) override
Map one value through the lookup table, returning an RBGA[4] color.
vtkLookupTable(int sze=256, int ext=256)
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.
unsigned char * GetPointer(vtkIdType id)
Get pointer to color table data.
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.
vtkTypeBool UseAboveRangeColor
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
Definition: vtkTimeStamp.h:25
void Modified()
Set this objects time to the current time.
dynamic, self-adjusting array of unsigned char
@ component
Definition: vtkX3D.h:175
@ scale
Definition: vtkX3D.h:229
@ range
Definition: vtkX3D.h:238
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)