VTK  9.4.20250114
vtkScalarsToColors.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
59#ifndef vtkScalarsToColors_h
60#define vtkScalarsToColors_h
61
62#include "vtkCommonCoreModule.h" // For export macro
63#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_5_0
64#include "vtkObject.h"
65#include "vtkVariant.h" // Set/get annotation methods require variants.
66#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
67
68VTK_ABI_NAMESPACE_BEGIN
70class vtkDataArray;
73class vtkStringArray;
75
76class VTKCOMMONCORE_EXPORT VTK_MARSHALAUTO vtkScalarsToColors : public vtkObject
77{
78public:
80 void PrintSelf(ostream& os, vtkIndent indent) override;
82
84
90 virtual vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component);
91 virtual vtkTypeBool IsOpaque(vtkAbstractArray* scalars, int colorMode, int component,
92 vtkUnsignedCharArray* ghosts, unsigned char ghostsToSkip = 0xff);
94
99 virtual void Build() {}
100
102
105 virtual double* GetRange() VTK_SIZEHINT(2);
106 virtual void SetRange(double min, double max);
107 virtual void SetRange(const double rng[2]) { this->SetRange(rng[0], rng[1]); }
109
114 virtual const unsigned char* MapValue(double v);
115
120 virtual void GetColor(double v, double rgb[3]);
121
126 double* GetColor(double v) VTK_SIZEHINT(3)
127 {
128 this->GetColor(v, this->RGB);
129 return this->RGB;
130 }
131
137 virtual double GetOpacity(double v);
138
144 double GetLuminance(double x)
145 {
146 double rgb[3];
147 this->GetColor(x, rgb);
148 return static_cast<double>(rgb[0] * 0.30 + rgb[1] * 0.59 + rgb[2] * 0.11);
149 }
150
152
158 virtual void SetAlpha(double alpha);
159 vtkGetMacro(Alpha, double);
161
163
183 vtkDataArray* scalars, int colorMode, int component, int outputFormat = VTK_RGBA);
185 vtkAbstractArray* scalars, int colorMode, int component, int outputFormat = VTK_RGBA);
187
189
194 vtkSetMacro(VectorMode, int);
195 vtkGetMacro(VectorMode, int);
200
202 {
203 MAGNITUDE = 0,
204 COMPONENT = 1,
205 RGBCOLORS = 2
206 };
207
209
213 vtkSetMacro(VectorComponent, int);
214 vtkGetMacro(VectorComponent, int);
216
218
225 vtkSetMacro(VectorSize, int);
226 vtkGetMacro(VectorSize, int);
228
236 void MapVectorsThroughTable(void* input, unsigned char* output, int inputDataType,
237 int numberOfValues, int inputIncrement, int outputFormat, int vectorComponent, int vectorSize);
238 void MapVectorsThroughTable(void* input, unsigned char* output, int inputDataType,
239 int numberOfValues, int inputIncrement, int outputFormat)
240 {
241 this->MapVectorsThroughTable(
242 input, output, inputDataType, numberOfValues, inputIncrement, outputFormat, -1, -1);
243 }
244
253 void MapScalarsThroughTable(vtkDataArray* scalars, unsigned char* output, int outputFormat);
254 void MapScalarsThroughTable(vtkDataArray* scalars, unsigned char* output)
255 {
256 this->MapScalarsThroughTable(scalars, output, VTK_RGBA);
257 }
258 void MapScalarsThroughTable(void* input, unsigned char* output, int inputDataType,
259 int numberOfValues, int inputIncrement, int outputFormat)
260 {
261 this->MapScalarsThroughTable2(
262 input, output, inputDataType, numberOfValues, inputIncrement, outputFormat);
263 }
264
270 virtual void MapScalarsThroughTable2(void* input, unsigned char* output, int inputDataType,
271 int numberOfValues, int inputIncrement, int outputFormat);
272
276 virtual void DeepCopy(vtkScalarsToColors* o);
277
282 virtual vtkTypeBool UsingLogScale() { return 0; }
283
288
290
303 virtual void SetAnnotations(vtkAbstractArray* values, vtkStringArray* annotations);
304 vtkGetObjectMacro(AnnotatedValues, vtkAbstractArray);
305 vtkGetObjectMacro(Annotations, vtkStringArray);
307
312 virtual vtkIdType SetAnnotation(vtkVariant value, vtkStdString annotation);
313
319
324
330
336
340 virtual void GetAnnotationColor(const vtkVariant& val, double rgba[4]);
341
346
353
366 virtual void GetIndexedColor(vtkIdType i, double rgba[4]);
367
374 virtual bool RemoveAnnotation(vtkVariant value);
375
379 virtual void ResetAnnotations();
380
382
390 vtkSetMacro(IndexedLookup, vtkTypeBool);
391 vtkGetMacro(IndexedLookup, vtkTypeBool);
392 vtkBooleanMacro(IndexedLookup, vtkTypeBool);
394
396
401 template <typename T>
402 static unsigned char ColorToUChar(T t)
403 {
404 return static_cast<unsigned char>(t);
405 }
406 template <typename T>
407 static void ColorToUChar(T t, unsigned char* dest)
408 {
409 *dest = ColorToUChar(t);
410 }
412
413protected:
416
428 void MapColorsToColors(void* input, unsigned char* output, int inputDataType, int numberOfValues,
429 int numberOfComponents, int vectorSize, int outputFormat);
430
437 vtkDataArray* colors, int numComp, int numTuples);
438
443 void MapVectorsToMagnitude(void* input, double* output, int inputDataType, int numberOfValues,
444 int numberOfComponents, int vectorSize);
445
451
457
458 // Annotations of specific values.
461
462 class vtkInternalAnnotatedValueList;
463 vtkInternalAnnotatedValueList* AnnotatedValueList;
464
466
467 double Alpha;
468
469 // How to map arrays with multiple components.
473
474#if !defined(VTK_LEGACY_REMOVE)
475 VTK_DEPRECATED_IN_9_5_0("UseMagnitude is ignored and will be removed")
476 int UseMagnitude;
477#endif
478
479 unsigned char RGBABytes[4];
480
481private:
482 double RGB[3];
483 double InputRange[2];
484
485 vtkScalarsToColors(const vtkScalarsToColors&) = delete;
486 void operator=(const vtkScalarsToColors&) = delete;
487};
488
490
495template <>
496inline unsigned char vtkScalarsToColors::ColorToUChar(double t)
497{
498 double temp = (t * 255.0) + 0.5;
499 return static_cast<unsigned char>(temp);
500}
501template <>
502inline unsigned char vtkScalarsToColors::ColorToUChar(float t)
503{
504 double temp = (t * 255.0) + 0.5;
505 return static_cast<unsigned char>(temp);
506}
508
509VTK_ABI_NAMESPACE_END
510#endif
Abstract superclass for all arrays.
abstract superclass for arrays of numeric data
a simple class to control print indentation
Definition vtkIndent.h:108
abstract base class for most VTK objects
Definition vtkObject.h:162
Superclass for mapping scalar values to colors.
virtual vtkTypeBool UsingLogScale()
This should return 1 if the subclass is using log scale for mapping scalars to colors.
double * GetColor(double v)
Map one value through the lookup table and return the color as an RGB array of doubles between 0 and ...
void MapScalarsThroughTable(vtkDataArray *scalars, unsigned char *output)
void MapColorsToColors(void *input, unsigned char *output, int inputDataType, int numberOfValues, int numberOfComponents, int vectorSize, int outputFormat)
An internal method that assumes that the input already has the right colors, and only remaps the rang...
virtual void DeepCopy(vtkScalarsToColors *o)
Copy the contents from another object.
vtkVariant GetAnnotatedValue(vtkIdType idx)
Return the annotated value at a particular index in the list of annotations.
void MapScalarsThroughTable(vtkDataArray *scalars, unsigned char *output, int outputFormat)
Map a set of scalars through the lookup table in a single operation.
virtual void UpdateAnnotatedValueMap()
Update the map from annotated values to indices in the array of annotations.
virtual vtkTypeBool IsOpaque(vtkAbstractArray *scalars, int colorMode, int component)
Return true if all of the values defining the mapping have an opacity equal to 1.
vtkUnsignedCharArray * ConvertToRGBA(vtkDataArray *colors, int numComp, int numTuples)
An internal method used to convert a color array to RGBA.
virtual void SetAlpha(double alpha)
Specify an additional opacity (alpha) value to blend with.
double GetLuminance(double x)
Map one value through the lookup table and return the luminance 0.3*red + 0.59*green + 0....
virtual void SetRange(const double rng[2])
Sets/Gets the range of scalars that will be mapped.
static vtkScalarsToColors * New()
virtual void GetIndexedColor(vtkIdType i, double rgba[4])
Get the "indexed color" assigned to an index.
virtual vtkIdType SetAnnotation(vtkStdString value, vtkStdString annotation)
This variant of SetAnnotation accepts the value as a string so ParaView can treat annotations as stri...
virtual vtkTypeBool IsOpaque()
Return true if all of the values defining the mapping have an opacity equal to 1.
virtual vtkIdType GetNumberOfAvailableColors()
Get the number of available colors for mapping to.
static void ColorToUChar(T t, unsigned char *dest)
Converts a color from numeric type T to uchar.
void MapScalarsThroughTable(void *input, unsigned char *output, int inputDataType, int numberOfValues, int inputIncrement, int outputFormat)
void MapVectorsThroughTable(void *input, unsigned char *output, int inputDataType, int numberOfValues, int inputIncrement, int outputFormat, int vectorComponent, int vectorSize)
Map vectors through the lookup table.
virtual bool RemoveAnnotation(vtkVariant value)
Remove an existing entry from the list of annotated values.
virtual double GetOpacity(double v)
Map one value through the lookup table and return the alpha value (the opacity) as a double between 0...
void MapVectorsThroughTable(void *input, unsigned char *output, int inputDataType, int numberOfValues, int inputIncrement, int outputFormat)
~vtkScalarsToColors() override
virtual void ResetAnnotations()
Remove all existing values and their annotations.
virtual const unsigned char * MapValue(double v)
Map one value through the lookup table and return a color defined as an RGBA unsigned char tuple (4 b...
virtual vtkTypeBool IsOpaque(vtkAbstractArray *scalars, int colorMode, int component, vtkUnsignedCharArray *ghosts, unsigned char ghostsToSkip=0xff)
Return true if all of the values defining the mapping have an opacity equal to 1.
virtual vtkUnsignedCharArray * MapScalars(vtkDataArray *scalars, int colorMode, int component, int outputFormat=VTK_RGBA)
Internal methods that map a data array into an unsigned char array.
void SetVectorModeToComponent()
Change mode that maps vectors by magnitude vs.
void SetVectorModeToMagnitude()
Change mode that maps vectors by magnitude vs.
vtkIdType GetAnnotatedValueIndexInternal(const vtkVariant &val)
Look up an index into the array of annotations given a value.
virtual void SetAnnotations(vtkAbstractArray *values, vtkStringArray *annotations)
Set a list of discrete values, either as a categorical set of values (when IndexedLookup is true) or ...
static unsigned char ColorToUChar(T t)
Converts a color from numeric type T to uchar.
virtual void GetColor(double v, double rgb[3])
Map one value through the lookup table and store the color as an RGB array of doubles between 0 and 1...
vtkIdType GetNumberOfAnnotatedValues()
Return the annotated value at a particular index in the list of annotations.
virtual void MapScalarsThroughTable2(void *input, unsigned char *output, int inputDataType, int numberOfValues, int inputIncrement, int outputFormat)
An internal method typically not used in applications.
virtual void Build()
Perform any processing required (if any) before processing scalars.
virtual vtkIdType SetAnnotation(vtkVariant value, vtkStdString annotation)
Add a new entry (or change an existing entry) to the list of annotated values.
virtual void GetAnnotationColor(const vtkVariant &val, double rgba[4])
Obtain the color associated with a particular annotated value (or NanColor if unmatched).
vtkInternalAnnotatedValueList * AnnotatedValueList
vtkAbstractArray * AnnotatedValues
virtual vtkIdType CheckForAnnotatedValue(vtkVariant value)
Allocate annotation arrays if needed, then return the index of the given value or -1 if not present.
virtual double * GetRange()
Sets/Gets the range of scalars that will be mapped.
void MapVectorsToMagnitude(void *input, double *output, int inputDataType, int numberOfValues, int numberOfComponents, int vectorSize)
An internal method for converting vectors to magnitudes, used as a preliminary step before doing magn...
virtual vtkUnsignedCharArray * MapScalars(vtkAbstractArray *scalars, int colorMode, int component, int outputFormat=VTK_RGBA)
Internal methods that map a data array into an unsigned char array.
vtkIdType GetAnnotatedValueIndex(vtkVariant val)
Return the index of the given value in the list of annotated values (or -1 if not present).
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkStringArray * Annotations
void SetVectorModeToRGBColors()
Change mode that maps vectors by magnitude vs.
vtkStdString GetAnnotation(vtkIdType idx)
Return the annotation at a particular index in the list of annotations.
Wrapper around std::string to keep symbols short.
a vtkAbstractArray subclass for strings
dynamic, self-adjusting array of unsigned char
A type representing the union of many types.
Definition vtkVariant.h:162
int vtkTypeBool
Definition vtkABI.h:64
#define VTK_DEPRECATED_IN_9_5_0(reason)
#define VTK_RGBA
int vtkIdType
Definition vtkType.h:315
#define VTK_SIZEHINT(...)
#define VTK_MARSHALAUTO
#define VTK_NEWINSTANCE
#define max(a, b)