VTK  9.3.0
vtkVolumeProperty.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
3 
49 #ifndef vtkVolumeProperty_h
50 #define vtkVolumeProperty_h
51 
52 #include "vtkImplicitFunction.h" // For vtkImplicitFunction
53 #include "vtkNew.h" // Needed for vtkNew
54 #include "vtkObject.h"
55 #include "vtkRenderingCoreModule.h" // For export macro
56 #include "vtkSmartPointer.h" // Needed for vtkSmartPointer
57 
58 // STL includes
59 #include <set> // For labelmap labels set
60 #include <unordered_map> // For labelmap transfer function maps
61 
62 VTK_ABI_NAMESPACE_BEGIN
64 class vtkContourValues;
65 class vtkImageData;
67 class vtkTimeStamp;
68 
69 class VTKRENDERINGCORE_EXPORT vtkVolumeProperty : public vtkObject
70 {
71 public:
73  vtkTypeMacro(vtkVolumeProperty, vtkObject);
74  void PrintSelf(ostream& os, vtkIndent indent) override;
76 
81  vtkMTimeType GetMTime() override;
82 
84 
105  vtkSetClampMacro(IndependentComponents, vtkTypeBool, 0, 1);
106  vtkGetMacro(IndependentComponents, vtkTypeBool);
107  vtkBooleanMacro(IndependentComponents, vtkTypeBool);
109 
111 
115  vtkSetClampMacro(InterpolationType, int, VTK_NEAREST_INTERPOLATION, VTK_LINEAR_INTERPOLATION);
116  vtkGetMacro(InterpolationType, int);
117  void SetInterpolationTypeToNearest() { this->SetInterpolationType(VTK_NEAREST_INTERPOLATION); }
118  void SetInterpolationTypeToLinear() { this->SetInterpolationType(VTK_LINEAR_INTERPOLATION); }
119  const char* GetInterpolationTypeAsString();
121 
123 
127  virtual void SetComponentWeight(int index, double value);
128  virtual double GetComponentWeight(int index);
130 
136  void SetColor(int index, vtkPiecewiseFunction* function);
137  void SetColor(vtkPiecewiseFunction* function) { this->SetColor(0, function); }
138 
146  void SetColor(vtkColorTransferFunction* function) { this->SetColor(0, function); }
147 
153  int GetColorChannels() { return this->GetColorChannels(0); }
154 
162 
170 
176  void SetScalarOpacity(vtkPiecewiseFunction* function) { this->SetScalarOpacity(0, function); }
177 
185 
187 
193  void SetScalarOpacityUnitDistance(int index, double distance);
194  void SetScalarOpacityUnitDistance(double distance)
195  {
196  this->SetScalarOpacityUnitDistance(0, distance);
197  }
201 
207  void SetGradientOpacity(vtkPiecewiseFunction* function) { this->SetGradientOpacity(0, function); }
208 
210 
217  void SetTransferFunction2D(vtkImageData* function) { this->SetTransferFunction2D(0, function); };
218 
221 
230  {
231  TF_1D = 0,
232  TF_2D
233  };
234 
235  vtkSetClampMacro(TransferFunctionMode, int, 0, 1);
236  vtkGetMacro(TransferFunctionMode, int);
237  void SetTransferFunctionModeTo1D() { this->SetTransferFunctionMode(TF_1D); }
238  void SetTransferFunctionModeTo2D() { this->SetTransferFunctionMode(TF_2D); }
240 
251 
253 
260  virtual void SetDisableGradientOpacity(int index, int value);
261  virtual void SetDisableGradientOpacity(int value) { this->SetDisableGradientOpacity(0, value); }
262  virtual void DisableGradientOpacityOn(int index) { this->SetDisableGradientOpacity(index, 1); }
264  virtual void DisableGradientOpacityOff(int index) { this->SetDisableGradientOpacity(index, 0); }
267  virtual int GetDisableGradientOpacity() { return this->GetDisableGradientOpacity(0); }
271 
278  bool HasGradientOpacity(int index = 0)
279  {
280  switch (this->TransferFunctionMode)
281  {
282  case TF_1D:
283  return (this->GradientOpacity[index] != nullptr);
284  case TF_2D:
285  return true;
286  }
287  return false;
288  }
289 
290  /*
291  * Check whether or not we have label map gradient opacity functions.
292  */
293  bool HasLabelGradientOpacity() { return !this->LabelGradientOpacity.empty(); }
294 
296 
316  void SetShade(int index, int value);
317  void SetShade(int value) { this->SetShade(0, value); }
318  int GetShade(int index);
319  int GetShade() { return this->GetShade(0); }
320  void ShadeOn(int index);
321  void ShadeOn() { this->ShadeOn(0); }
322  void ShadeOff(int index);
323  void ShadeOff() { this->ShadeOff(0); }
325 
327 
330  void SetAmbient(int index, double value);
331  void SetAmbient(double value) { this->SetAmbient(0, value); }
332  double GetAmbient(int index);
333  double GetAmbient() { return this->GetAmbient(0); }
335 
337 
340  void SetDiffuse(int index, double value);
341  void SetDiffuse(double value) { this->SetDiffuse(0, value); }
342  double GetDiffuse(int index);
343  double GetDiffuse() { return this->GetDiffuse(0); }
345 
347 
350  void SetSpecular(int index, double value);
351  void SetSpecular(double value) { this->SetSpecular(0, value); }
352  double GetSpecular(int index);
353  double GetSpecular() { return this->GetSpecular(0); }
355 
357 
360  void SetSpecularPower(int index, double value);
361  void SetSpecularPower(double value) { this->SetSpecularPower(0, value); }
362  double GetSpecularPower(int index);
363  double GetSpecularPower() { return this->GetSpecularPower(0); }
365 
371 
373 
380 
382 
389  vtkSetClampMacro(ScatteringAnisotropy, float, -1.0, 1.0);
390  vtkGetMacro(ScatteringAnisotropy, float);
392 
400  void UpdateMTimes();
401 
408 
415 
422 
429 
431 
440  vtkSetMacro(UseClippedVoxelIntensity, int);
441  vtkGetMacro(UseClippedVoxelIntensity, int);
442  vtkBooleanMacro(UseClippedVoxelIntensity, int);
444 
446 
455  vtkSetMacro(ClippedVoxelIntensity, double);
456  vtkGetMacro(ClippedVoxelIntensity, double);
458 
460 
463  void SetLabelColor(int label, vtkColorTransferFunction* function);
466 
468 
471  void SetLabelScalarOpacity(int label, vtkPiecewiseFunction* function);
474 
476 
479  void SetLabelGradientOpacity(int label, vtkPiecewiseFunction* function);
482 
487  vtkGetMacro(LabelColorMTime, vtkTimeStamp);
488 
493  vtkGetMacro(LabelScalarOpacityMTime, vtkTimeStamp);
494 
499  vtkGetMacro(LabelGradientOpacityMTime, vtkTimeStamp);
500 
505  std::size_t GetNumberOfLabels();
506 
511  std::set<int> GetLabelMapLabels();
512 
513 protected:
515  ~vtkVolumeProperty() override;
516 
523 
525 
527  double ComponentWeight[VTK_MAX_VRCOMP];
528 
530 
531  float ScatteringAnisotropy = 0.0;
532 
533  int ColorChannels[VTK_MAX_VRCOMP];
534 
535  vtkPiecewiseFunction* GrayTransferFunction[VTK_MAX_VRCOMP];
536  vtkTimeStamp GrayTransferFunctionMTime[VTK_MAX_VRCOMP];
537 
539  vtkTimeStamp RGBTransferFunctionMTime[VTK_MAX_VRCOMP];
540 
542  vtkTimeStamp ScalarOpacityMTime[VTK_MAX_VRCOMP];
543  double ScalarOpacityUnitDistance[VTK_MAX_VRCOMP];
544 
546  vtkTimeStamp GradientOpacityMTime[VTK_MAX_VRCOMP];
547 
548  vtkPiecewiseFunction* DefaultGradientOpacity[VTK_MAX_VRCOMP];
549  int DisableGradientOpacity[VTK_MAX_VRCOMP];
550 
552  vtkImageData* TransferFunction2D[VTK_MAX_VRCOMP];
553  vtkTimeStamp TransferFunction2DMTime[VTK_MAX_VRCOMP];
554 
558 
559  int Shade[VTK_MAX_VRCOMP];
560  double Ambient[VTK_MAX_VRCOMP];
561  double Diffuse[VTK_MAX_VRCOMP];
562  double Specular[VTK_MAX_VRCOMP];
563  double SpecularPower[VTK_MAX_VRCOMP];
564 
567 
572 
577 
581  std::unordered_map<int, vtkColorTransferFunction*> LabelColor;
582  std::unordered_map<int, vtkPiecewiseFunction*> LabelScalarOpacity;
583  std::unordered_map<int, vtkPiecewiseFunction*> LabelGradientOpacity;
584  std::set<int> LabelMapLabels;
585 
586 private:
587  vtkVolumeProperty(const vtkVolumeProperty&) = delete;
588  void operator=(const vtkVolumeProperty&) = delete;
589 };
590 
595 {
597  {
598  return "Nearest Neighbor";
599  }
601  {
602  return "Linear";
603  }
604  return "Unknown";
605 }
606 
607 VTK_ABI_NAMESPACE_END
608 #endif
Defines a transfer function for mapping a property to an RGB color value.
helper object to manage setting and generating contour values
topologically and geometrically regular array of data
Definition: vtkImageData.h:43
abstract interface for implicit functions
a simple class to control print indentation
Definition: vtkIndent.h:29
abstract base class for most VTK objects
Definition: vtkObject.h:52
Defines a 1D piecewise function.
record modification and/or execution time
Definition: vtkTimeStamp.h:25
represents the common properties for rendering a volume.
void SetSpecular(int index, double value)
Set/Get the specular lighting coefficient.
void SetDiffuse(double value)
Set/Get the diffuse lighting coefficient.
vtkPiecewiseFunction * GetGrayTransferFunction(int index)
Get the gray transfer function.
void SetAmbient(int index, double value)
Set/Get the ambient lighting coefficient.
std::set< int > GetLabelMapLabels()
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Get access to the internal set that keeps tra...
vtkMTimeType GetMTime() override
Get the modified time for this object (or the properties registered with this object).
vtkContourValues * GetIsoSurfaceValues()
Get contour values for isosurface blending mode.
double GetAmbient(int index)
Set/Get the ambient lighting coefficient.
virtual double GetComponentWeight(int index)
Set/Get the scalar component weights.
vtkTimeStamp LabelGradientOpacityMTime
vtkTimeStamp GetRGBTransferFunctionMTime()
void SetShade(int index, int value)
Set/Get the shading of a volume.
void ShadeOn()
Set/Get the shading of a volume.
void SetScalarOpacityUnitDistance(double distance)
Set/Get the unit distance on which the scalar opacity transfer function is defined.
void SetLabelScalarOpacity(int label, vtkPiecewiseFunction *function)
Set/Get the opacity transfer function for a label in the label map.
std::size_t GetNumberOfLabels()
Get the number of labels that are provided with transfer functions using either SetLabelColor,...
static vtkVolumeProperty * New()
virtual int GetDisableGradientOpacity(int index)
Enable/Disable the gradient opacity function for the given component.
void SetTransferFunction2D(vtkImageData *function)
Color-opacity transfer function mode.
void SetSpecular(double value)
Set/Get the specular lighting coefficient.
vtkColorTransferFunction * GetLabelColor(int label)
Set/Get the color transfer function for a label in the label map.
void SetColor(vtkPiecewiseFunction *function)
vtkTimeStamp GetGrayTransferFunctionMTime(int index)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Get the time that the GrayTransferFunction wa...
vtkPiecewiseFunction * GetStoredGradientOpacity(int index)
Enable/Disable the gradient opacity function for the given component.
vtkTimeStamp LabelColorMTime
double GetSpecular()
Set/Get the specular lighting coefficient.
vtkGetSmartPointerMacro(SliceFunction, vtkImplicitFunction)
Get/Set the function used for slicing.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkSmartPointer< vtkImplicitFunction > SliceFunction
Function used for slice.
double GetSpecularPower(int index)
Set/Get the specular power.
vtkImageData * GetTransferFunction2D(int index)
Color-opacity transfer function mode.
void SetTransferFunction2D(int index, vtkImageData *function)
Set/Get a 2D transfer function.
vtkColorTransferFunction * GetRGBTransferFunction(int index)
Get the RGB transfer function for the given component.
vtkTimeStamp GetScalarOpacityMTime()
vtkPiecewiseFunction * GetStoredGradientOpacity()
Enable/Disable the gradient opacity function for the given component.
void SetGradientOpacity(int index, vtkPiecewiseFunction *function)
Set the opacity of a volume to an opacity transfer function based on gradient magnitude for the given...
void SetTransferFunctionModeTo1D()
Color-opacity transfer function mode.
double GetSpecularPower()
Set/Get the specular power.
virtual void DisableGradientOpacityOn(int index)
Enable/Disable the gradient opacity function for the given component.
void SetSpecularPower(double value)
Set/Get the specular power.
double GetScalarOpacityUnitDistance()
Set/Get the unit distance on which the scalar opacity transfer function is defined.
void SetTransferFunctionModeTo2D()
Color-opacity transfer function mode.
vtkPiecewiseFunction * GetLabelGradientOpacity(int label)
Set/Get the gradient opacity function for a label in the label map.
virtual void DisableGradientOpacityOff(int index)
Enable/Disable the gradient opacity function for the given component.
void ShadeOn(int index)
Set/Get the shading of a volume.
void ShadeOff(int index)
Set/Get the shading of a volume.
const char * GetInterpolationTypeAsString()
Return the interpolation type as a descriptive character string.
void SetShade(int value)
Set/Get the shading of a volume.
void SetScalarOpacityUnitDistance(int index, double distance)
Set/Get the unit distance on which the scalar opacity transfer function is defined.
std::unordered_map< int, vtkPiecewiseFunction * > LabelScalarOpacity
virtual void SetComponentWeight(int index, double value)
Set/Get the scalar component weights.
double GetDiffuse()
Set/Get the diffuse lighting coefficient.
virtual void SetDisableGradientOpacity(int index, int value)
Enable/Disable the gradient opacity function for the given component.
vtkTypeBool IndependentComponents
void SetAmbient(double value)
Set/Get the ambient lighting coefficient.
vtkTimeStamp GetGrayTransferFunctionMTime()
std::set< int > LabelMapLabels
virtual void DisableGradientOpacityOff()
Enable/Disable the gradient opacity function for the given component.
virtual void SetDisableGradientOpacity(int value)
Enable/Disable the gradient opacity function for the given component.
void SetLabelColor(int label, vtkColorTransferFunction *function)
Set/Get the color transfer function for a label in the label map.
int GetShade()
Set/Get the shading of a volume.
vtkPiecewiseFunction * GetScalarOpacity()
void UpdateMTimes()
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE UpdateMTimes performs a Modified() on all Tim...
void SetInterpolationTypeToNearest()
Set the interpolation type for sampling a volume.
int GetColorChannels(int index)
Get the number of color channels in the transfer function for the given component.
vtkImageData * GetTransferFunction2D()
Color-opacity transfer function mode.
virtual void DisableGradientOpacityOn()
Enable/Disable the gradient opacity function for the given component.
void DeepCopy(vtkVolumeProperty *p)
TransferMode
Color-opacity transfer function mode.
vtkPiecewiseFunction * GetGradientOpacity(int index)
Get the gradient magnitude opacity transfer function for the given component.
vtkTimeStamp GetRGBTransferFunctionMTime(int index)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Get the time that the RGBTransferFunction was...
void SetLabelGradientOpacity(int label, vtkPiecewiseFunction *function)
Set/Get the gradient opacity function for a label in the label map.
bool HasGradientOpacity(int index=0)
Check whether or not we have the gradient opacity.
void SetSpecularPower(int index, double value)
Set/Get the specular power.
vtkTimeStamp GetTransferFunction2DMTime(int index)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Get the time when the TransferFunction2D was ...
void SetScalarOpacity(int index, vtkPiecewiseFunction *function)
Set the opacity of a volume to an opacity transfer function based on scalar value for the component i...
int GetShade(int index)
Set/Get the shading of a volume.
void SetColor(int index, vtkColorTransferFunction *function)
Set the color of a volume to an RGB transfer function for the component indicated by index.
vtkNew< vtkContourValues > IsoSurfaceValues
Contour values for isosurface blend mode.
vtkPiecewiseFunction * GetScalarOpacity(int index)
Get the scalar opacity transfer function for the given component.
std::unordered_map< int, vtkColorTransferFunction * > LabelColor
Label map transfer functions.
void ShadeOff()
Set/Get the shading of a volume.
vtkTimeStamp GetTransferFunction2DMTime()
void SetColor(int index, vtkPiecewiseFunction *function)
Set the color of a volume to a gray level transfer function for the component indicated by index.
vtkColorTransferFunction * GetRGBTransferFunction()
void SetInterpolationTypeToLinear()
Set the interpolation type for sampling a volume.
vtkPiecewiseFunction * GetLabelScalarOpacity(int label)
Set/Get the opacity transfer function for a label in the label map.
std::unordered_map< int, vtkPiecewiseFunction * > LabelGradientOpacity
vtkPiecewiseFunction * GetGrayTransferFunction()
double GetAmbient()
Set/Get the ambient lighting coefficient.
void SetGradientOpacity(vtkPiecewiseFunction *function)
vtkSetSmartPointerMacro(SliceFunction, vtkImplicitFunction)
Get/Set the function used for slicing.
void SetScalarOpacity(vtkPiecewiseFunction *function)
double GetDiffuse(int index)
Set/Get the diffuse lighting coefficient.
virtual int GetDisableGradientOpacity()
Enable/Disable the gradient opacity function for the given component.
void SetColor(vtkColorTransferFunction *function)
~vtkVolumeProperty() override
double GetScalarOpacityUnitDistance(int index)
Set/Get the unit distance on which the scalar opacity transfer function is defined.
vtkTimeStamp GetGradientOpacityMTime(int index)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Get the time that the gradient opacity transf...
virtual void CreateDefaultGradientOpacity(int index)
vtkTimeStamp GetScalarOpacityMTime(int index)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Get the time that the scalar opacity transfer...
vtkTimeStamp GetGradientOpacityMTime()
void SetDiffuse(int index, double value)
Set/Get the diffuse lighting coefficient.
vtkTimeStamp LabelScalarOpacityMTime
vtkPiecewiseFunction * GetGradientOpacity()
double GetSpecular(int index)
Set/Get the specular lighting coefficient.
@ value
Definition: vtkX3D.h:220
@ index
Definition: vtkX3D.h:246
int vtkTypeBool
Definition: vtkABI.h:64
#define VTK_MAX_VRCOMP
#define VTK_NEAREST_INTERPOLATION
#define VTK_LINEAR_INTERPOLATION
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:270