VTK  9.3.20240328
vtkColorTransferFunction.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
139 #ifndef vtkColorTransferFunction_h
140 #define vtkColorTransferFunction_h
141 
142 #include "vtkRenderingCoreModule.h" // For export macro
143 #include "vtkScalarsToColors.h"
144 
145 VTK_ABI_NAMESPACE_BEGIN
146 class vtkColorTransferFunctionInternals;
147 class vtkDoubleArray;
148 
149 #define VTK_CTF_RGB 0
150 #define VTK_CTF_HSV 1
151 #define VTK_CTF_LAB 2
152 #define VTK_CTF_DIVERGING 3
153 #define VTK_CTF_LAB_CIEDE2000 4
154 #define VTK_CTF_STEP 5
155 
156 #define VTK_CTF_LINEAR 0
157 #define VTK_CTF_LOG10 1
158 
159 class VTKRENDERINGCORE_EXPORT vtkColorTransferFunction : public vtkScalarsToColors
160 {
161 public:
164  void DeepCopy(vtkScalarsToColors* f) override;
166 
170  void PrintSelf(ostream& os, vtkIndent indent) override;
171 
175  int GetSize();
176 
178 
184  int AddRGBPoint(double x, double r, double g, double b);
185  int AddRGBPoint(double x, double r, double g, double b, double midpoint, double sharpness);
187  int AddRGBPoints(vtkDoubleArray* x, vtkDoubleArray* rgbColors, double midpoint, double sharpness);
188  int AddHSVPoint(double x, double h, double s, double v);
189  int AddHSVPoint(double x, double h, double s, double v, double midpoint, double sharpness);
190  int RemovePoint(double x);
192 
194 
199  double x1, double r1, double g1, double b1, double x2, double r2, double g2, double b2);
201  double x1, double h1, double s1, double v1, double x2, double h2, double s2, double v2);
203 
208 
212  double* GetColor(double x) VTK_SIZEHINT(3) { return vtkScalarsToColors::GetColor(x); }
213  void GetColor(double x, double rgb[3]) override;
214 
216 
219  double GetRedValue(double x);
220  double GetGreenValue(double x);
221  double GetBlueValue(double x);
223 
225 
230  int GetNodeValue(int index, double val[6]);
231  int SetNodeValue(int index, double val[6]);
233 
237  const unsigned char* MapValue(double v) override;
238 
240 
243  double* GetRange() VTK_SIZEHINT(2) override { return this->Range; }
244  virtual void GetRange(double& arg1, double& arg2)
245  {
246  arg1 = this->Range[0];
247  arg2 = this->Range[1];
248  }
249  virtual void GetRange(double _arg[2]) { this->GetRange(_arg[0], _arg[1]); }
251 
257  int AdjustRange(double range[2]);
258 
260 
266  void GetTable(double x1, double x2, int n, double* table);
267  void GetTable(double x1, double x2, int n, float* table);
268  const unsigned char* GetTable(double x1, double x2, int n);
270 
280  void BuildFunctionFromTable(double x1, double x2, int size, double* table);
281 
283 
291  vtkSetClampMacro(Clamping, vtkTypeBool, 0, 1);
292  vtkGetMacro(Clamping, vtkTypeBool);
293  vtkBooleanMacro(Clamping, vtkTypeBool);
295 
297 
309  vtkSetClampMacro(ColorSpace, int, VTK_CTF_RGB, VTK_CTF_STEP);
310  void SetColorSpaceToRGB() { this->SetColorSpace(VTK_CTF_RGB); }
311  void SetColorSpaceToHSV() { this->SetColorSpace(VTK_CTF_HSV); }
312  void SetColorSpaceToLab() { this->SetColorSpace(VTK_CTF_LAB); }
313  void SetColorSpaceToLabCIEDE2000() { this->SetColorSpace(VTK_CTF_LAB_CIEDE2000); }
314  void SetColorSpaceToDiverging() { this->SetColorSpace(VTK_CTF_DIVERGING); }
315  void SetColorSpaceToStep() { this->SetColorSpace(VTK_CTF_STEP); }
316  vtkGetMacro(ColorSpace, int);
317  vtkSetMacro(HSVWrap, vtkTypeBool);
318  vtkGetMacro(HSVWrap, vtkTypeBool);
319  vtkBooleanMacro(HSVWrap, vtkTypeBool);
321 
323 
328  vtkSetMacro(Scale, int);
329  void SetScaleToLinear() { this->SetScale(VTK_CTF_LINEAR); }
330  void SetScaleToLog10() { this->SetScale(VTK_CTF_LOG10); }
331  vtkGetMacro(Scale, int);
333 
335 
340  vtkSetVector3Macro(NanColor, double);
341  vtkGetVector3Macro(NanColor, double);
343 
345 
349  vtkSetMacro(NanOpacity, double);
350  vtkGetMacro(NanOpacity, double);
352 
354 
359  virtual void SetNanColorRGBA(double r, double g, double b, double a)
360  {
361  this->SetNanColor(r, g, b);
362  this->SetNanOpacity(a);
363  }
364 
365  void SetNanColorRGBA(double rgba[4])
366  {
367  this->SetNanColorRGBA(rgba[0], rgba[1], rgba[2], rgba[3]);
368  }
370 
372 
376  vtkSetVector3Macro(BelowRangeColor, double);
377  vtkGetVector3Macro(BelowRangeColor, double);
379 
381 
384  vtkSetMacro(UseBelowRangeColor, vtkTypeBool);
385  vtkGetMacro(UseBelowRangeColor, vtkTypeBool);
386  vtkBooleanMacro(UseBelowRangeColor, vtkTypeBool);
388 
390 
394  vtkSetVector3Macro(AboveRangeColor, double);
395  vtkGetVector3Macro(AboveRangeColor, double);
397 
399 
402  vtkSetMacro(UseAboveRangeColor, vtkTypeBool);
403  vtkGetMacro(UseAboveRangeColor, vtkTypeBool);
404  vtkBooleanMacro(UseAboveRangeColor, vtkTypeBool);
406 
414  double* GetDataPointer();
415 
421  void FillFromDataPointer(int n, double* ptr);
422 
426  void MapScalarsThroughTable2(void* input, unsigned char* output, int inputDataType,
427  int numberOfValues, int inputIncrement, int outputIncrement) override;
428 
430 
434  vtkSetMacro(AllowDuplicateScalars, vtkTypeBool);
435  vtkGetMacro(AllowDuplicateScalars, vtkTypeBool);
436  vtkBooleanMacro(AllowDuplicateScalars, vtkTypeBool);
438 
443 
450  void GetIndexedColor(vtkIdType idx, double rgba[4]) override;
451 
456  int EstimateMinNumberOfSamples(double const& x1, double const& x2);
457 
458 protected:
461 
462  vtkColorTransferFunctionInternals* Internal;
463 
471 
476 
481 
485  int Scale;
486 
490  double NanColor[3];
491 
495  double NanOpacity;
496 
500  double BelowRangeColor[3];
501 
506 
510  double AboveRangeColor[3];
511 
516 
520  double* Function;
521 
525  double Range[2];
526 
530  unsigned char UnsignedCharRGBAValue[4];
531 
536 
538  unsigned char* Table;
539 
545 
550  void SetRange(double, double) override {}
551  void SetRange(const double rng[2]) override { this->SetRange(rng[0], rng[1]); }
552 
559 
564  bool UpdateRange();
565 
570  void MovePoint(double oldX, double newX);
571 
576 
577 private:
579  void operator=(const vtkColorTransferFunction&) = delete;
580 };
581 
582 VTK_ABI_NAMESPACE_END
583 #endif
Defines a transfer function for mapping a property to an RGB color value.
virtual void SetNanColorRGBA(double r, double g, double b, double a)
Set the RGBA color to use when a NaN (not a number) is encountered.
const unsigned char * MapValue(double v) override
Map one value through the lookup table.
void GetTable(double x1, double x2, int n, double *table)
Fills in a table of n colors mapped from values mapped with even spacing between x1 and x2,...
int Scale
The color interpolation scale (linear or logarithmic).
void BuildFunctionFromTable(double x1, double x2, int size, double *table)
Construct a color transfer function from a table.
void DeepCopy(vtkScalarsToColors *f) override
Copy the contents from another object.
void RemoveAllPoints()
Remove all points.
void AddHSVSegment(double x1, double h1, double s1, double v1, double x2, double h2, double s2, double v2)
Add two points to the function and remove all the points between them.
void SetNanColorRGBA(double rgba[4])
Set the RGBA color to use when a NaN (not a number) is encountered.
int AdjustRange(double range[2])
Remove all points out of the new range, and make sure there is a point at each end of that range.
int AddHSVPoint(double x, double h, double s, double v)
Add/Remove a point to/from the function defined in RGB or HSV Return the index of the point (0 based)...
void GetTable(double x1, double x2, int n, float *table)
Fills in a table of n colors mapped from values mapped with even spacing between x1 and x2,...
int RemovePoint(double x)
Add/Remove a point to/from the function defined in RGB or HSV Return the index of the point (0 based)...
int TableSize
Temporary storage for the size of the table.
void PrintSelf(ostream &os, vtkIndent indent) override
Print method for vtkColorTransferFunction.
~vtkColorTransferFunction() override
int AddRGBPoints(vtkDoubleArray *x, vtkDoubleArray *rgbColors, double midpoint, double sharpness)
Add/Remove a point to/from the function defined in RGB or HSV Return the index of the point (0 based)...
int EstimateMinNumberOfSamples(double const &x1, double const &x2)
Estimates the minimum size of a table such that it would correctly sample this function.
void SetScaleToLog10()
Set the type of scale to use, linear or logarithmic.
double NanOpacity
The opacity to use for not-a-number.
const unsigned char * GetTable(double x1, double x2, int n)
Fills in a table of n colors mapped from values mapped with even spacing between x1 and x2,...
double GetRedValue(double x)
Get the color components individually.
vtkIdType GetNumberOfAvailableColors() override
Get the number of available colors for mapping to.
int ColorSpace
The color space in which interpolation is performed.
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.
void SetColorSpaceToHSV()
Set/Get the color space used for interpolation: RGB, HSV, CIELAB, Diverging or Step.
int AddRGBPoint(double x, double r, double g, double b, double midpoint, double sharpness)
Add/Remove a point to/from the function defined in RGB or HSV Return the index of the point (0 based)...
int AddRGBPoints(vtkDoubleArray *x, vtkDoubleArray *rgbColors)
Add/Remove a point to/from the function defined in RGB or HSV Return the index of the point (0 based)...
int GetSize()
How many nodes define this function?
void SetColorSpaceToDiverging()
Set/Get the color space used for interpolation: RGB, HSV, CIELAB, Diverging or Step.
vtkColorTransferFunctionInternals * Internal
int AddHSVPoint(double x, double h, double s, double v, double midpoint, double sharpness)
Add/Remove a point to/from the function defined in RGB or HSV Return the index of the point (0 based)...
void MovePoint(double oldX, double newX)
Moves point from oldX to newX.
int GetNodeValue(int index, double val[6])
For the node specified by index, set/get the location (X), R, G, and B values, midpoint,...
double FindMinimumXDistance()
Traverses the nodes to find the minimum distance.
double * GetColor(double x)
Returns an RGB color for the specified scalar value.
void SetRange(const double rng[2]) override
Sets/Gets the range of scalars that will be mapped.
virtual void GetRange(double &arg1, double &arg2)
Returns min and max position of all function points.
void SetScaleToLinear()
Set the type of scale to use, linear or logarithmic.
int AddRGBPoint(double x, double r, double g, double b)
Add/Remove a point to/from the function defined in RGB or HSV Return the index of the point (0 based)...
void SetColorSpaceToLab()
Set/Get the color space used for interpolation: RGB, HSV, CIELAB, Diverging or Step.
vtkTypeBool HSVWrap
Specify if HSV is wrap or not.
double * Function
Temporary array to store data from the nodes.
void SetColorSpaceToStep()
Set/Get the color space used for interpolation: RGB, HSV, CIELAB, Diverging or Step.
void AddRGBSegment(double x1, double r1, double g1, double b1, double x2, double r2, double g2, double b2)
Add two points to the function and remove all the points between them.
int SetNodeValue(int index, double val[6])
For the node specified by index, set/get the location (X), R, G, and B values, midpoint,...
double GetBlueValue(double x)
Get the color components individually.
static vtkColorTransferFunction * New()
void ShallowCopy(vtkColorTransferFunction *f)
void SetColorSpaceToLabCIEDE2000()
Set/Get the color space used for interpolation: RGB, HSV, CIELAB, Diverging or Step.
void FillFromDataPointer(int n, double *ptr)
Defines the nodes from an array ptr with the layout [X1, R1, G1, B1, X2, R2, G2, B2,...
vtkTypeBool UseAboveRangeColor
Flag indicating whether below-range color should be used.
vtkTypeBool UseBelowRangeColor
Flag indicating whether below-range color should be used.
double * GetDataPointer()
Returns a pointer to an array of all node values in an interleaved array with the layout [X1,...
vtkTypeBool Clamping
Determines the function value outside of defined points Zero = always return 0.0 outside of defined p...
void GetColor(double x, double rgb[3]) override
Map one value through the lookup table and store the color as an RGB array of doubles between 0 and 1...
vtkTypeBool AllowDuplicateScalars
If on, the same scalar value may have more than one node assigned to it.
void SetColorSpaceToRGB()
Set/Get the color space used for interpolation: RGB, HSV, CIELAB, Diverging or Step.
void SetRange(double, double) override
Set the range of scalars being mapped.
void SortAndUpdateRange()
Internal method to sort the vector and update the Range whenever a node is added, edited or removed I...
void GetIndexedColor(vtkIdType idx, double rgba[4]) override
Return a color given an integer index.
virtual void GetRange(double _arg[2])
Returns min and max position of all function points.
bool UpdateRange()
Returns true if the range has been changed.
double GetGreenValue(double x)
Get the color components individually.
double * GetRange() override
Returns min and max position of all function points.
dynamic, self-adjusting array of double
a simple class to control print indentation
Definition: vtkIndent.h:108
Superclass for mapping scalar values to colors.
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...
Computes the portion of a dataset which is inside a selection.
record modification and/or execution time
Definition: vtkTimeStamp.h:44
@ range
Definition: vtkX3D.h:238
@ size
Definition: vtkX3D.h:253
@ index
Definition: vtkX3D.h:246
auto Range(IterablePtr iterable, Options &&... opts) -> typename detail::IterableTraits< typename detail::StripPointers< IterablePtr >::type >::RangeType
Generate an iterable STL proxy object for a VTK container.
Definition: vtkRange.h:74
int vtkTypeBool
Definition: vtkABI.h:64
#define VTK_CTF_DIVERGING
#define VTK_CTF_LAB_CIEDE2000
#define VTK_CTF_RGB
#define VTK_CTF_LAB
#define VTK_CTF_LINEAR
#define VTK_CTF_HSV
#define VTK_CTF_STEP
#define VTK_CTF_LOG10
int vtkIdType
Definition: vtkType.h:315
#define VTK_SIZEHINT(...)