VTK  9.0.1
vtkLookupTable.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkLookupTable.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
54 #ifndef vtkLookupTable_h
55 #define vtkLookupTable_h
56 
57 #include "vtkCommonCoreModule.h" // For export macro
58 #include "vtkScalarsToColors.h"
59 
60 #include "vtkUnsignedCharArray.h" // Needed for inline method
61 
62 #define VTK_RAMP_LINEAR 0
63 #define VTK_RAMP_SCURVE 1
64 #define VTK_RAMP_SQRT 2
65 #define VTK_SCALE_LINEAR 0
66 #define VTK_SCALE_LOG10 1
67 
68 class VTKCOMMONCORE_EXPORT vtkLookupTable : public vtkScalarsToColors
69 {
70 public:
72 
80  static const vtkIdType NAN_COLOR_INDEX;
83 
88  static vtkLookupTable* New();
89 
91  void PrintSelf(ostream& os, vtkIndent indent) override;
92 
94 
98  int IsOpaque() override;
99  int IsOpaque(vtkAbstractArray* scalars, int colorMode, int component) override;
101 
106  int Allocate(int sz = 256, int ext = 256);
107 
112  void Build() override;
113 
121  virtual void ForceBuild();
122 
127 
129 
141  vtkSetMacro(Ramp, int);
142  void SetRampToLinear() { this->SetRamp(VTK_RAMP_LINEAR); }
143  void SetRampToSCurve() { this->SetRamp(VTK_RAMP_SCURVE); }
144  void SetRampToSQRT() { this->SetRamp(VTK_RAMP_SQRT); }
145  vtkGetMacro(Ramp, int);
147 
149 
154  void SetScale(int scale);
155  void SetScaleToLinear() { this->SetScale(VTK_SCALE_LINEAR); }
156  void SetScaleToLog10() { this->SetScale(VTK_SCALE_LOG10); }
157  vtkGetMacro(Scale, int);
159 
161 
169  virtual void SetTableRange(const double r[2]);
170  virtual void SetTableRange(double min, double max);
171  vtkGetVectorMacro(TableRange, double, 2);
173 
175 
179  vtkSetVector2Macro(HueRange, double);
180  vtkGetVector2Macro(HueRange, double);
182 
184 
188  vtkSetVector2Macro(SaturationRange, double);
189  vtkGetVector2Macro(SaturationRange, double);
191 
193 
197  vtkSetVector2Macro(ValueRange, double);
198  vtkGetVector2Macro(ValueRange, double);
200 
202 
206  vtkSetVector2Macro(AlphaRange, double);
207  vtkGetVector2Macro(AlphaRange, double);
209 
211 
215  vtkSetVector4Macro(NanColor, double);
216  vtkGetVector4Macro(NanColor, double);
218 
223  unsigned char* GetNanColorAsUnsignedChars();
224 
228  static void GetColorAsUnsignedChars(const double colorIn[4], unsigned char colorOut[4]);
229 
231 
235  vtkSetVector4Macro(BelowRangeColor, double);
236  vtkGetVector4Macro(BelowRangeColor, double);
238 
240 
243  vtkSetMacro(UseBelowRangeColor, vtkTypeBool);
244  vtkGetMacro(UseBelowRangeColor, vtkTypeBool);
245  vtkBooleanMacro(UseBelowRangeColor, vtkTypeBool);
247 
249 
253  vtkSetVector4Macro(AboveRangeColor, double);
254  vtkGetVector4Macro(AboveRangeColor, double);
256 
258 
261  vtkSetMacro(UseAboveRangeColor, vtkTypeBool);
262  vtkGetMacro(UseAboveRangeColor, vtkTypeBool);
263  vtkBooleanMacro(UseAboveRangeColor, vtkTypeBool);
265 
269  const unsigned char* MapValue(double v) override;
270 
275  void GetColor(double x, double rgb[3]) override;
276 
281  double GetOpacity(double v) override;
282 
292  virtual vtkIdType GetIndex(double v);
293 
295 
299  vtkIdType GetNumberOfTableValues() { return this->NumberOfColors; }
301 
308  virtual void SetTableValue(vtkIdType indx, const double rgba[4]);
309 
314  virtual void SetTableValue(vtkIdType indx, double r, double g, double b, double a = 1.0);
315 
321 
326  void GetTableValue(vtkIdType id, double rgba[4]);
327 
332  unsigned char* GetPointer(vtkIdType id) { return this->Table->GetPointer(4 * id); }
333 
344  unsigned char* WritePointer(vtkIdType id, int number);
345 
347 
351  double* GetRange() VTK_SIZEHINT(2) override { return this->GetTableRange(); }
352  void SetRange(double min, double max) override { this->SetTableRange(min, max); }
353  void SetRange(const double rng[2]) override { this->SetRange(rng[0], rng[1]); }
355 
362  static void GetLogRange(const double range[2], double log_range[2]);
363 
367  static double ApplyLogScale(double v, const double range[2], const double log_range[2]);
368 
370 
376  vtkSetClampMacro(NumberOfColors, vtkIdType, 2, VTK_ID_MAX);
377  vtkGetMacro(NumberOfColors, vtkIdType);
379 
381 
387  vtkGetObjectMacro(Table, vtkUnsignedCharArray);
389 
395  void MapScalarsThroughTable2(void* input, unsigned char* output, int inputDataType,
396  int numberOfValues, int inputIncrement, int outputIncrement) override;
397 
401  void DeepCopy(vtkScalarsToColors* lut) override;
402 
407  int UsingLogScale() override { return (this->GetScale() == VTK_SCALE_LOG10) ? 1 : 0; }
408 
413 
421  void GetIndexedColor(vtkIdType idx, double rgba[4]) override;
422 
423 protected:
424  vtkLookupTable(int sze = 256, int ext = 256);
425  ~vtkLookupTable() override;
426 
429  double TableRange[2];
430  double HueRange[2];
431  double SaturationRange[2];
432  double ValueRange[2];
433  double AlphaRange[2];
434  double NanColor[4];
435  double BelowRangeColor[4];
437  double AboveRangeColor[4];
439 
440  int Scale;
441  int Ramp;
444  double RGBA[4]; // used during conversion process
445  unsigned char NanColorChar[4];
446 
450 
455 
456 private:
457  vtkLookupTable(const vtkLookupTable&) = delete;
458  void operator=(const vtkLookupTable&) = delete;
459 };
460 
461 //----------------------------------------------------------------------------
462 inline unsigned char* vtkLookupTable::WritePointer(vtkIdType id, int number)
463 {
464  this->InsertTime.Modified();
465  return this->Table->WritePointer(4 * id, 4 * number);
466 }
467 
468 #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:34
map scalar values into colors via a lookup table
void SetScaleToLinear()
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
double GetOpacity(double v) override
Map one value through the lookup table and return the alpha value (the opacity) as a double between 0...
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
int UsingLogScale() override
This should return 1 if the subclass is using log scale for mapping scalars to colors.
void GetIndexedColor(vtkIdType idx, double rgba[4]) override
Return a color given an integer index.
void DeepCopy(vtkScalarsToColors *lut) override
Copy the contents from another LookupTable.
vtkTimeStamp OpaqueFlagBuildTime
int IsOpaque(vtkAbstractArray *scalars, int colorMode, int component) override
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.
void GetColor(double x, 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 MapScalarsThroughTable2(void *input, unsigned char *output, int inputDataType, int numberOfValues, int inputIncrement, int outputIncrement) override
Map a set of scalars through the lookup table.
static const vtkIdType BELOW_RANGE_COLOR_INDEX
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
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.
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 GetTableValue(vtkIdType id, double rgba[4])
Return an RGBA color value for the given index into the lookup table.
virtual vtkIdType GetIndex(double v)
Return the table index associated with a particular value.
void SetRampToLinear()
virtual void SetTableRange(double min, double max)
void SetRange(const double rng[2]) override
vtkUnsignedCharArray * Table
void SetScaleToLog10()
double * GetRange() override
Sets/Gets the range of scalars which will be mapped.
void SetRange(double min, double max) override
void SetRampToSCurve()
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 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()
unsigned char * GetPointer(vtkIdType id)
Get pointer to color table data.
vtkTimeStamp SpecialColorsBuildTime
static double ApplyLogScale(double v, const double range[2], const double log_range[2])
Apply log to value, with appropriate constraints.
virtual void SetTableRange(const double r[2])
Set/Get the minimum/maximum scalar values for scalar mapping.
double * GetTableValue(vtkIdType id)
Return an RGBA color value for the given index into the lookup table.
~vtkLookupTable() override
void Build() override
Generate lookup table from hue, saturation, value, alpha min/max values.
vtkTypeBool UseAboveRangeColor
vtkIdType NumberOfColors
vtkTypeBool UseBelowRangeColor
int IsOpaque() override
Return true if all of the values defining the mapping have an opacity equal to 1.
static const vtkIdType NAN_COLOR_INDEX
Superclass for mapping scalar values to colors.
record modification and/or execution time
Definition: vtkTimeStamp.h:33
void Modified()
Set this objects time to the current time.
dynamic, self-adjusting array of unsigned char
@ component
Definition: vtkX3D.h:181
@ scale
Definition: vtkX3D.h:235
@ range
Definition: vtkX3D.h:244
int vtkTypeBool
Definition: vtkABI.h:69
#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:338
#define VTK_ID_MAX
Definition: vtkType.h:342
#define VTK_SIZEHINT(...)
#define max(a, b)