VTK  9.2.6
vtkColorTransferFunction.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkColorTransferFunction.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 =========================================================================*/
151 #ifndef vtkColorTransferFunction_h
152 #define vtkColorTransferFunction_h
153 
154 #include "vtkRenderingCoreModule.h" // For export macro
155 #include "vtkScalarsToColors.h"
156 
157 class vtkColorTransferFunctionInternals;
158 class vtkDoubleArray;
159 
160 #define VTK_CTF_RGB 0
161 #define VTK_CTF_HSV 1
162 #define VTK_CTF_LAB 2
163 #define VTK_CTF_DIVERGING 3
164 #define VTK_CTF_LAB_CIEDE2000 4
165 #define VTK_CTF_STEP 5
166 
167 #define VTK_CTF_LINEAR 0
168 #define VTK_CTF_LOG10 1
169 
170 class VTKRENDERINGCORE_EXPORT vtkColorTransferFunction : public vtkScalarsToColors
171 {
172 public:
175  void DeepCopy(vtkScalarsToColors* f) override;
177 
181  void PrintSelf(ostream& os, vtkIndent indent) override;
182 
186  int GetSize();
187 
189 
195  int AddRGBPoint(double x, double r, double g, double b);
196  int AddRGBPoint(double x, double r, double g, double b, double midpoint, double sharpness);
198  int AddRGBPoints(vtkDoubleArray* x, vtkDoubleArray* rgbColors, double midpoint, double sharpness);
199  int AddHSVPoint(double x, double h, double s, double v);
200  int AddHSVPoint(double x, double h, double s, double v, double midpoint, double sharpness);
201  int RemovePoint(double x);
203 
205 
210  double x1, double r1, double g1, double b1, double x2, double r2, double g2, double b2);
212  double x1, double h1, double s1, double v1, double x2, double h2, double s2, double v2);
214 
219 
223  double* GetColor(double x) VTK_SIZEHINT(3) { return vtkScalarsToColors::GetColor(x); }
224  void GetColor(double x, double rgb[3]) override;
225 
227 
230  double GetRedValue(double x);
231  double GetGreenValue(double x);
232  double GetBlueValue(double x);
234 
236 
241  int GetNodeValue(int index, double val[6]);
242  int SetNodeValue(int index, double val[6]);
244 
248  const unsigned char* MapValue(double v) override;
249 
251 
254  double* GetRange() VTK_SIZEHINT(2) override { return this->Range; }
255  virtual void GetRange(double& arg1, double& arg2)
256  {
257  arg1 = this->Range[0];
258  arg2 = this->Range[1];
259  }
260  virtual void GetRange(double _arg[2]) { this->GetRange(_arg[0], _arg[1]); }
262 
268  int AdjustRange(double range[2]);
269 
271 
277  void GetTable(double x1, double x2, int n, double* table);
278  void GetTable(double x1, double x2, int n, float* table);
279  const unsigned char* GetTable(double x1, double x2, int n);
281 
291  void BuildFunctionFromTable(double x1, double x2, int size, double* table);
292 
294 
302  vtkSetClampMacro(Clamping, vtkTypeBool, 0, 1);
303  vtkGetMacro(Clamping, vtkTypeBool);
304  vtkBooleanMacro(Clamping, vtkTypeBool);
306 
308 
320  vtkSetClampMacro(ColorSpace, int, VTK_CTF_RGB, VTK_CTF_STEP);
321  void SetColorSpaceToRGB() { this->SetColorSpace(VTK_CTF_RGB); }
322  void SetColorSpaceToHSV() { this->SetColorSpace(VTK_CTF_HSV); }
323  void SetColorSpaceToLab() { this->SetColorSpace(VTK_CTF_LAB); }
324  void SetColorSpaceToLabCIEDE2000() { this->SetColorSpace(VTK_CTF_LAB_CIEDE2000); }
325  void SetColorSpaceToDiverging() { this->SetColorSpace(VTK_CTF_DIVERGING); }
326  void SetColorSpaceToStep() { this->SetColorSpace(VTK_CTF_STEP); }
327  vtkGetMacro(ColorSpace, int);
328  vtkSetMacro(HSVWrap, vtkTypeBool);
329  vtkGetMacro(HSVWrap, vtkTypeBool);
330  vtkBooleanMacro(HSVWrap, vtkTypeBool);
332 
334 
339  vtkSetMacro(Scale, int);
340  void SetScaleToLinear() { this->SetScale(VTK_CTF_LINEAR); }
341  void SetScaleToLog10() { this->SetScale(VTK_CTF_LOG10); }
342  vtkGetMacro(Scale, int);
344 
346 
351  vtkSetVector3Macro(NanColor, double);
352  vtkGetVector3Macro(NanColor, double);
354 
356 
360  vtkSetMacro(NanOpacity, double);
361  vtkGetMacro(NanOpacity, double);
363 
365 
370  virtual void SetNanColorRGBA(double r, double g, double b, double a)
371  {
372  this->SetNanColor(r, g, b);
373  this->SetNanOpacity(a);
374  }
375 
376  void SetNanColorRGBA(double rgba[4])
377  {
378  this->SetNanColorRGBA(rgba[0], rgba[1], rgba[2], rgba[3]);
379  }
381 
383 
387  vtkSetVector3Macro(BelowRangeColor, double);
388  vtkGetVector3Macro(BelowRangeColor, double);
390 
392 
395  vtkSetMacro(UseBelowRangeColor, vtkTypeBool);
396  vtkGetMacro(UseBelowRangeColor, vtkTypeBool);
397  vtkBooleanMacro(UseBelowRangeColor, vtkTypeBool);
399 
401 
405  vtkSetVector3Macro(AboveRangeColor, double);
406  vtkGetVector3Macro(AboveRangeColor, double);
408 
410 
413  vtkSetMacro(UseAboveRangeColor, vtkTypeBool);
414  vtkGetMacro(UseAboveRangeColor, vtkTypeBool);
415  vtkBooleanMacro(UseAboveRangeColor, vtkTypeBool);
417 
425  double* GetDataPointer();
426 
432  void FillFromDataPointer(int n, double* ptr);
433 
437  void MapScalarsThroughTable2(void* input, unsigned char* output, int inputDataType,
438  int numberOfValues, int inputIncrement, int outputIncrement) override;
439 
441 
445  vtkSetMacro(AllowDuplicateScalars, vtkTypeBool);
446  vtkGetMacro(AllowDuplicateScalars, vtkTypeBool);
447  vtkBooleanMacro(AllowDuplicateScalars, vtkTypeBool);
449 
454 
461  void GetIndexedColor(vtkIdType idx, double rgba[4]) override;
462 
467  int EstimateMinNumberOfSamples(double const& x1, double const& x2);
468 
469 protected:
472 
473  vtkColorTransferFunctionInternals* Internal;
474 
482 
487 
492 
496  int Scale;
497 
501  double NanColor[3];
502 
506  double NanOpacity;
507 
511  double BelowRangeColor[3];
512 
517 
521  double AboveRangeColor[3];
522 
527 
531  double* Function;
532 
536  double Range[2];
537 
541  unsigned char UnsignedCharRGBAValue[4];
542 
547 
549  unsigned char* Table;
550 
556 
561  void SetRange(double, double) override {}
562  void SetRange(const double rng[2]) override { this->SetRange(rng[0], rng[1]); }
563 
570 
575  bool UpdateRange();
576 
581  void MovePoint(double oldX, double newX);
582 
587 
588 private:
590  void operator=(const vtkColorTransferFunction&) = delete;
591 };
592 
593 #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:119
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:55
@ range
Definition: vtkX3D.h:244
@ size
Definition: vtkX3D.h:259
@ index
Definition: vtkX3D.h:252
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:85
int vtkTypeBool
Definition: vtkABI.h:69
#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:332
#define VTK_SIZEHINT(...)