VTK  9.3.0
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
39 #ifndef vtkColorTransferFunction_h
40 #define vtkColorTransferFunction_h
41 
42 #include "vtkRenderingCoreModule.h" // For export macro
43 #include "vtkScalarsToColors.h"
44 
45 VTK_ABI_NAMESPACE_BEGIN
46 class vtkColorTransferFunctionInternals;
47 class vtkDoubleArray;
48 
49 #define VTK_CTF_RGB 0
50 #define VTK_CTF_HSV 1
51 #define VTK_CTF_LAB 2
52 #define VTK_CTF_DIVERGING 3
53 #define VTK_CTF_LAB_CIEDE2000 4
54 #define VTK_CTF_STEP 5
55 
56 #define VTK_CTF_LINEAR 0
57 #define VTK_CTF_LOG10 1
58 
59 class VTKRENDERINGCORE_EXPORT vtkColorTransferFunction : public vtkScalarsToColors
60 {
61 public:
64  void DeepCopy(vtkScalarsToColors* f) override;
66 
70  void PrintSelf(ostream& os, vtkIndent indent) override;
71 
75  int GetSize();
76 
78 
84  int AddRGBPoint(double x, double r, double g, double b);
85  int AddRGBPoint(double x, double r, double g, double b, double midpoint, double sharpness);
87  int AddRGBPoints(vtkDoubleArray* x, vtkDoubleArray* rgbColors, double midpoint, double sharpness);
88  int AddHSVPoint(double x, double h, double s, double v);
89  int AddHSVPoint(double x, double h, double s, double v, double midpoint, double sharpness);
90  int RemovePoint(double x);
92 
94 
99  double x1, double r1, double g1, double b1, double x2, double r2, double g2, double b2);
101  double x1, double h1, double s1, double v1, double x2, double h2, double s2, double v2);
103 
108 
112  double* GetColor(double x) VTK_SIZEHINT(3) { return vtkScalarsToColors::GetColor(x); }
113  void GetColor(double x, double rgb[3]) override;
114 
116 
119  double GetRedValue(double x);
120  double GetGreenValue(double x);
121  double GetBlueValue(double x);
123 
125 
130  int GetNodeValue(int index, double val[6]);
131  int SetNodeValue(int index, double val[6]);
133 
137  const unsigned char* MapValue(double v) override;
138 
140 
143  double* GetRange() VTK_SIZEHINT(2) override { return this->Range; }
144  virtual void GetRange(double& arg1, double& arg2)
145  {
146  arg1 = this->Range[0];
147  arg2 = this->Range[1];
148  }
149  virtual void GetRange(double _arg[2]) { this->GetRange(_arg[0], _arg[1]); }
151 
157  int AdjustRange(double range[2]);
158 
160 
166  void GetTable(double x1, double x2, int n, double* table);
167  void GetTable(double x1, double x2, int n, float* table);
168  const unsigned char* GetTable(double x1, double x2, int n);
170 
180  void BuildFunctionFromTable(double x1, double x2, int size, double* table);
181 
183 
191  vtkSetClampMacro(Clamping, vtkTypeBool, 0, 1);
192  vtkGetMacro(Clamping, vtkTypeBool);
193  vtkBooleanMacro(Clamping, vtkTypeBool);
195 
197 
209  vtkSetClampMacro(ColorSpace, int, VTK_CTF_RGB, VTK_CTF_STEP);
210  void SetColorSpaceToRGB() { this->SetColorSpace(VTK_CTF_RGB); }
211  void SetColorSpaceToHSV() { this->SetColorSpace(VTK_CTF_HSV); }
212  void SetColorSpaceToLab() { this->SetColorSpace(VTK_CTF_LAB); }
213  void SetColorSpaceToLabCIEDE2000() { this->SetColorSpace(VTK_CTF_LAB_CIEDE2000); }
214  void SetColorSpaceToDiverging() { this->SetColorSpace(VTK_CTF_DIVERGING); }
215  void SetColorSpaceToStep() { this->SetColorSpace(VTK_CTF_STEP); }
216  vtkGetMacro(ColorSpace, int);
217  vtkSetMacro(HSVWrap, vtkTypeBool);
218  vtkGetMacro(HSVWrap, vtkTypeBool);
219  vtkBooleanMacro(HSVWrap, vtkTypeBool);
221 
223 
228  vtkSetMacro(Scale, int);
229  void SetScaleToLinear() { this->SetScale(VTK_CTF_LINEAR); }
230  void SetScaleToLog10() { this->SetScale(VTK_CTF_LOG10); }
231  vtkGetMacro(Scale, int);
233 
235 
240  vtkSetVector3Macro(NanColor, double);
241  vtkGetVector3Macro(NanColor, double);
243 
245 
249  vtkSetMacro(NanOpacity, double);
250  vtkGetMacro(NanOpacity, double);
252 
254 
259  virtual void SetNanColorRGBA(double r, double g, double b, double a)
260  {
261  this->SetNanColor(r, g, b);
262  this->SetNanOpacity(a);
263  }
264 
265  void SetNanColorRGBA(double rgba[4])
266  {
267  this->SetNanColorRGBA(rgba[0], rgba[1], rgba[2], rgba[3]);
268  }
270 
272 
276  vtkSetVector3Macro(BelowRangeColor, double);
277  vtkGetVector3Macro(BelowRangeColor, double);
279 
281 
284  vtkSetMacro(UseBelowRangeColor, vtkTypeBool);
285  vtkGetMacro(UseBelowRangeColor, vtkTypeBool);
286  vtkBooleanMacro(UseBelowRangeColor, vtkTypeBool);
288 
290 
294  vtkSetVector3Macro(AboveRangeColor, double);
295  vtkGetVector3Macro(AboveRangeColor, double);
297 
299 
302  vtkSetMacro(UseAboveRangeColor, vtkTypeBool);
303  vtkGetMacro(UseAboveRangeColor, vtkTypeBool);
304  vtkBooleanMacro(UseAboveRangeColor, vtkTypeBool);
306 
314  double* GetDataPointer();
315 
321  void FillFromDataPointer(int n, double* ptr);
322 
326  void MapScalarsThroughTable2(void* input, unsigned char* output, int inputDataType,
327  int numberOfValues, int inputIncrement, int outputIncrement) override;
328 
330 
334  vtkSetMacro(AllowDuplicateScalars, vtkTypeBool);
335  vtkGetMacro(AllowDuplicateScalars, vtkTypeBool);
336  vtkBooleanMacro(AllowDuplicateScalars, vtkTypeBool);
338 
343 
350  void GetIndexedColor(vtkIdType idx, double rgba[4]) override;
351 
356  int EstimateMinNumberOfSamples(double const& x1, double const& x2);
357 
358 protected:
361 
362  vtkColorTransferFunctionInternals* Internal;
363 
371 
376 
381 
385  int Scale;
386 
390  double NanColor[3];
391 
395  double NanOpacity;
396 
400  double BelowRangeColor[3];
401 
406 
410  double AboveRangeColor[3];
411 
416 
420  double* Function;
421 
425  double Range[2];
426 
430  unsigned char UnsignedCharRGBAValue[4];
431 
436 
438  unsigned char* Table;
439 
445 
450  void SetRange(double, double) override {}
451  void SetRange(const double rng[2]) override { this->SetRange(rng[0], rng[1]); }
452 
459 
464  bool UpdateRange();
465 
470  void MovePoint(double oldX, double newX);
471 
476 
477 private:
479  void operator=(const vtkColorTransferFunction&) = delete;
480 };
481 
482 VTK_ABI_NAMESPACE_END
483 #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:38
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:34
@ 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(...)