VTK  9.2.20220815
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 =========================================================================*/
169 #ifndef vtkLookupTable_h
170 #define vtkLookupTable_h
171 
172 #include "vtkCommonCoreModule.h" // For export macro
173 #include "vtkScalarsToColors.h"
174 
175 #include "vtkUnsignedCharArray.h" // Needed for inline method
176 
177 #define VTK_RAMP_LINEAR 0
178 #define VTK_RAMP_SCURVE 1
179 #define VTK_RAMP_SQRT 2
180 #define VTK_SCALE_LINEAR 0
181 #define VTK_SCALE_LOG10 1
182 
183 class VTKCOMMONCORE_EXPORT vtkLookupTable : public vtkScalarsToColors
184 {
185 public:
187 
198 
203  static vtkLookupTable* New();
204 
206  void PrintSelf(ostream& os, vtkIndent indent) override;
207 
209 
213  int IsOpaque() override;
214  int IsOpaque(vtkAbstractArray* scalars, int colorMode, int component) override;
215  int IsOpaque(vtkAbstractArray* scalars, int colorMode, int component,
216  vtkUnsignedCharArray* ghosts, unsigned char ghostsToSkip = 0xff) override;
218 
223  int Allocate(int sz = 256, int ext = 256);
224 
229  void Build() override;
230 
238  virtual void ForceBuild();
239 
244 
246 
258  vtkSetMacro(Ramp, int);
259  void SetRampToLinear() { this->SetRamp(VTK_RAMP_LINEAR); }
260  void SetRampToSCurve() { this->SetRamp(VTK_RAMP_SCURVE); }
261  void SetRampToSQRT() { this->SetRamp(VTK_RAMP_SQRT); }
262  vtkGetMacro(Ramp, int);
264 
266 
271  void SetScale(int scale);
272  void SetScaleToLinear() { this->SetScale(VTK_SCALE_LINEAR); }
273  void SetScaleToLog10() { this->SetScale(VTK_SCALE_LOG10); }
274  vtkGetMacro(Scale, int);
276 
278 
286  virtual void SetTableRange(const double r[2]);
287  virtual void SetTableRange(double min, double max);
288  vtkGetVectorMacro(TableRange, double, 2);
290 
292 
296  vtkSetVector2Macro(HueRange, double);
297  vtkGetVector2Macro(HueRange, double);
299 
301 
305  vtkSetVector2Macro(SaturationRange, double);
306  vtkGetVector2Macro(SaturationRange, double);
308 
310 
314  vtkSetVector2Macro(ValueRange, double);
315  vtkGetVector2Macro(ValueRange, double);
317 
319 
323  vtkSetVector2Macro(AlphaRange, double);
324  vtkGetVector2Macro(AlphaRange, double);
326 
328 
332  vtkSetVector4Macro(NanColor, double);
333  vtkGetVector4Macro(NanColor, double);
335 
340  unsigned char* GetNanColorAsUnsignedChars();
341 
345  static void GetColorAsUnsignedChars(const double colorIn[4], unsigned char colorOut[4]);
346 
348 
352  vtkSetVector4Macro(BelowRangeColor, double);
353  vtkGetVector4Macro(BelowRangeColor, double);
355 
357 
360  vtkSetMacro(UseBelowRangeColor, vtkTypeBool);
361  vtkGetMacro(UseBelowRangeColor, vtkTypeBool);
362  vtkBooleanMacro(UseBelowRangeColor, vtkTypeBool);
364 
366 
370  vtkSetVector4Macro(AboveRangeColor, double);
371  vtkGetVector4Macro(AboveRangeColor, double);
373 
375 
378  vtkSetMacro(UseAboveRangeColor, vtkTypeBool);
379  vtkGetMacro(UseAboveRangeColor, vtkTypeBool);
380  vtkBooleanMacro(UseAboveRangeColor, vtkTypeBool);
382 
386  const unsigned char* MapValue(double v) override;
387 
392  void GetColor(double v, double rgb[3]) override;
393 
398  double GetOpacity(double v) override;
399 
409  virtual vtkIdType GetIndex(double v);
410 
412 
416  vtkIdType GetNumberOfTableValues() { return this->NumberOfColors; }
418 
425  virtual void SetTableValue(vtkIdType indx, const double rgba[4]);
426 
431  virtual void SetTableValue(vtkIdType indx, double r, double g, double b, double a = 1.0);
432 
438 
443  void GetTableValue(vtkIdType indx, double rgba[4]);
444 
449  unsigned char* GetPointer(vtkIdType id) { return this->Table->GetPointer(4 * id); }
450 
461  unsigned char* WritePointer(vtkIdType id, int number);
462 
464 
468  double* GetRange() VTK_SIZEHINT(2) override { return this->GetTableRange(); }
469  void SetRange(double min, double max) override { this->SetTableRange(min, max); }
470  void SetRange(const double rng[2]) override { this->SetRange(rng[0], rng[1]); }
472 
479  static void GetLogRange(const double range[2], double log_range[2]);
480 
484  static double ApplyLogScale(double v, const double range[2], const double log_range[2]);
485 
487 
493  vtkSetClampMacro(NumberOfColors, vtkIdType, 2, VTK_ID_MAX);
494  vtkGetMacro(NumberOfColors, vtkIdType);
496 
498 
504  vtkGetObjectMacro(Table, vtkUnsignedCharArray);
506 
512  void MapScalarsThroughTable2(void* input, unsigned char* output, int inputDataType,
513  int numberOfValues, int inputIncrement, int outputFormat) override;
514 
518  void DeepCopy(vtkScalarsToColors* obj) override;
519 
524  int UsingLogScale() override { return (this->GetScale() == VTK_SCALE_LOG10) ? 1 : 0; }
525 
530 
538  void GetIndexedColor(vtkIdType idx, double rgba[4]) override;
539 
540 protected:
541  vtkLookupTable(int sze = 256, int ext = 256);
542  ~vtkLookupTable() override;
543 
546  double TableRange[2];
547  double HueRange[2];
548  double SaturationRange[2];
549  double ValueRange[2];
550  double AlphaRange[2];
551  double NanColor[4];
552  double BelowRangeColor[4];
554  double AboveRangeColor[4];
556 
557  int Scale;
558  int Ramp;
561  double RGBA[4]; // used during conversion process
562  unsigned char NanColorChar[4];
563 
567 
572 
573 private:
574  vtkLookupTable(const vtkLookupTable&) = delete;
575  void operator=(const vtkLookupTable&) = delete;
576 };
577 
578 //----------------------------------------------------------------------------
579 inline unsigned char* vtkLookupTable::WritePointer(vtkIdType id, int number)
580 {
581  this->InsertTime.Modified();
582  return this->Table->WritePointer(4 * id, 4 * number);
583 }
584 
585 #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:119
map scalar values into colors via a lookup table
void SetScaleToLinear()
Set the type of scale to use, linear or logarithmic.
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...
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...
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.
vtkTimeStamp OpaqueFlagBuildTime
int 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 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.
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.
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.
int 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.
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.
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
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
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:55
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:325
#define VTK_ID_MAX
Definition: vtkType.h:329
#define VTK_SIZEHINT(...)
#define max(a, b)