VTK  9.3.20240423
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
157#ifndef vtkLookupTable_h
158#define vtkLookupTable_h
159
160#include "vtkCommonCoreModule.h" // For export macro
161#include "vtkScalarsToColors.h"
162#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
163
164#include "vtkUnsignedCharArray.h" // Needed for inline method
165
166#define VTK_RAMP_LINEAR 0
167#define VTK_RAMP_SCURVE 1
168#define VTK_RAMP_SQRT 2
169#define VTK_SCALE_LINEAR 0
170#define VTK_SCALE_LOG10 1
171
172VTK_ABI_NAMESPACE_BEGIN
173class VTKCOMMONCORE_EXPORT VTK_MARSHALAUTO vtkLookupTable : public vtkScalarsToColors
174{
175public:
177
188
194
196 void PrintSelf(ostream& os, vtkIndent indent) override;
197
199
204 vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component) override;
205 vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component,
206 vtkUnsignedCharArray* ghosts, unsigned char ghostsToSkip = 0xff) override;
208
213 int Allocate(int sz = 256, int ext = 256);
214
219 void Build() override;
220
228 virtual void ForceBuild();
229
234
236
248 vtkSetMacro(Ramp, int);
249 void SetRampToLinear() { this->SetRamp(VTK_RAMP_LINEAR); }
250 void SetRampToSCurve() { this->SetRamp(VTK_RAMP_SCURVE); }
251 void SetRampToSQRT() { this->SetRamp(VTK_RAMP_SQRT); }
252 vtkGetMacro(Ramp, int);
254
256
261 void SetScale(int scale);
262 void SetScaleToLinear() { this->SetScale(VTK_SCALE_LINEAR); }
263 void SetScaleToLog10() { this->SetScale(VTK_SCALE_LOG10); }
264 vtkGetMacro(Scale, int);
266
268
276 virtual void SetTableRange(const double r[2]);
277 virtual void SetTableRange(double min, double max);
278 vtkGetVectorMacro(TableRange, double, 2);
280
282
286 vtkSetVector2Macro(HueRange, double);
287 vtkGetVector2Macro(HueRange, double);
289
291
295 vtkSetVector2Macro(SaturationRange, double);
296 vtkGetVector2Macro(SaturationRange, double);
298
300
304 vtkSetVector2Macro(ValueRange, double);
305 vtkGetVector2Macro(ValueRange, double);
307
309
313 vtkSetVector2Macro(AlphaRange, double);
314 vtkGetVector2Macro(AlphaRange, double);
316
318
322 vtkSetVector4Macro(NanColor, double);
323 vtkGetVector4Macro(NanColor, double);
325
331
335 static void GetColorAsUnsignedChars(const double colorIn[4], unsigned char colorOut[4]);
336
338
342 vtkSetVector4Macro(BelowRangeColor, double);
343 vtkGetVector4Macro(BelowRangeColor, double);
345
347
350 vtkSetMacro(UseBelowRangeColor, vtkTypeBool);
351 vtkGetMacro(UseBelowRangeColor, vtkTypeBool);
352 vtkBooleanMacro(UseBelowRangeColor, vtkTypeBool);
354
356
360 vtkSetVector4Macro(AboveRangeColor, double);
361 vtkGetVector4Macro(AboveRangeColor, double);
363
365
368 vtkSetMacro(UseAboveRangeColor, vtkTypeBool);
369 vtkGetMacro(UseAboveRangeColor, vtkTypeBool);
370 vtkBooleanMacro(UseAboveRangeColor, vtkTypeBool);
372
376 const unsigned char* MapValue(double v) override;
377
382 void GetColor(double v, double rgb[3]) override;
383
388 double GetOpacity(double v) override;
389
399 virtual vtkIdType GetIndex(double v);
400
402
406 vtkIdType GetNumberOfTableValues() { return this->NumberOfColors; }
408
415 virtual void SetTableValue(vtkIdType indx, const double rgba[4]);
416
421 virtual void SetTableValue(vtkIdType indx, double r, double g, double b, double a = 1.0);
422
428
433 void GetTableValue(vtkIdType indx, double rgba[4]);
434
439 unsigned char* GetPointer(vtkIdType id) { return this->Table->GetPointer(4 * id); }
440
451 unsigned char* WritePointer(vtkIdType id, int number);
452
454
458 double* GetRange() VTK_SIZEHINT(2) override { return this->GetTableRange(); }
459 void SetRange(double min, double max) override { this->SetTableRange(min, max); }
460 void SetRange(const double rng[2]) override { this->SetRange(rng[0], rng[1]); }
462
469 static void GetLogRange(const double range[2], double log_range[2]);
470
474 static double ApplyLogScale(double v, const double range[2], const double log_range[2]);
475
477
483 vtkSetClampMacro(NumberOfColors, vtkIdType, 2, VTK_ID_MAX);
484 vtkGetMacro(NumberOfColors, vtkIdType);
486
488
494 vtkGetObjectMacro(Table, vtkUnsignedCharArray);
496
502 void MapScalarsThroughTable2(void* input, unsigned char* output, int inputDataType,
503 int numberOfValues, int inputIncrement, int outputFormat) override;
504
508 void DeepCopy(vtkScalarsToColors* obj) override;
509
514 vtkTypeBool UsingLogScale() override { return (this->GetScale() == VTK_SCALE_LOG10) ? 1 : 0; }
515
520
528 void GetIndexedColor(vtkIdType idx, double rgba[4]) override;
529
530protected:
531 vtkLookupTable(int sze = 256, int ext = 256);
532 ~vtkLookupTable() override;
533
536 double TableRange[2];
537 double HueRange[2];
538 double SaturationRange[2];
539 double ValueRange[2];
540 double AlphaRange[2];
541 double NanColor[4];
542 double BelowRangeColor[4];
544 double AboveRangeColor[4];
546
547 int Scale;
548 int Ramp;
551 double RGBA[4]; // used during conversion process
552 unsigned char NanColorChar[4];
553
557
562
563private:
564 vtkLookupTable(const vtkLookupTable&) = delete;
565 void operator=(const vtkLookupTable&) = delete;
566};
567
568//----------------------------------------------------------------------------
569inline unsigned char* vtkLookupTable::WritePointer(vtkIdType id, int number)
570{
571 this->InsertTime.Modified();
572 return this->Table->WritePointer(4 * id, 4 * number);
573}
574
575VTK_ABI_NAMESPACE_END
576#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:108
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 VTK_MARSHALAUTO
#define max(a, b)