VTK  9.3.0
vtkVolume.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
34 #ifndef vtkVolume_h
35 #define vtkVolume_h
36 
37 #include "vtkProp3D.h"
38 #include "vtkRenderingCoreModule.h" // For export macro
39 
40 VTK_ABI_NAMESPACE_BEGIN
41 class vtkRenderer;
42 class vtkPropCollection;
44 class vtkWindow;
45 class vtkVolumeProperty;
47 
48 class VTKRENDERINGCORE_EXPORT vtkVolume : public vtkProp3D
49 {
50 public:
51  vtkTypeMacro(vtkVolume, vtkProp3D);
52  void PrintSelf(ostream& os, vtkIndent indent) override;
53 
59  static vtkVolume* New();
60 
62 
66  vtkGetObjectMacro(Mapper, vtkAbstractVolumeMapper);
68 
70 
73  virtual void SetProperty(vtkVolumeProperty* property);
76 
82  void GetVolumes(vtkPropCollection* vc) override;
83 
87  void Update();
88 
90 
94  double* GetBounds() VTK_SIZEHINT(6) override;
95  void GetBounds(double bounds[6]) { this->vtkProp3D::GetBounds(bounds); }
96  double GetMinXBound();
97  double GetMaxXBound();
98  double GetMinYBound();
99  double GetMaxYBound();
100  double GetMinZBound();
101  double GetMaxZBound();
103 
107  vtkMTimeType GetMTime() override;
108 
116 
120  void ShallowCopy(vtkProp* prop) override;
121 
130  int RenderVolumetricGeometry(vtkViewport* viewport) override;
131 
139 
146 
152  float* GetScalarOpacityArray() { return this->GetScalarOpacityArray(0); }
153 
159  float* GetGradientOpacityArray() { return this->GetGradientOpacityArray(0); }
160 
165  float* GetGrayArray(int);
166  float* GetGrayArray() { return this->GetGrayArray(0); }
167 
172  float* GetRGBArray(int);
173  float* GetRGBArray() { return this->GetRGBArray(0); }
174 
181 
186  float GetArraySize() { return static_cast<float>(this->ArraySize); }
187 
193 
198  void UpdateScalarOpacityforSampleSize(vtkRenderer* ren, float sample_distance);
199 
207  bool GetSupportsSelection() override { return true; }
208 
209 protected:
211  ~vtkVolume() override;
212 
215 
216  // The rgb transfer function array - for unsigned char data this
217  // is 256 elements, for short or unsigned short it is 65536 elements
218  // This is a sample at each scalar value of the rgb transfer
219  // function. A time stamp is kept to know when it needs rebuilding
220  float* RGBArray[VTK_MAX_VRCOMP];
221  vtkTimeStamp RGBArrayMTime[VTK_MAX_VRCOMP];
222 
223  // The gray transfer function array - for unsigned char data this
224  // is 256 elements, for short or unsigned short it is 65536 elements
225  // This is a sample at each scalar value of the gray transfer
226  // function. A time stamp is kept to know when it needs rebuilding
227  float* GrayArray[VTK_MAX_VRCOMP];
228  vtkTimeStamp GrayArrayMTime[VTK_MAX_VRCOMP];
229 
230  // The scalar opacity transfer function array - for unsigned char data this
231  // is 256 elements, for short or unsigned short it is 65536 elements
232  // This is a sample at each scalar value of the opacity transfer
233  // function. A time stamp is kept to know when it needs rebuilding
234  float* ScalarOpacityArray[VTK_MAX_VRCOMP];
235  vtkTimeStamp ScalarOpacityArrayMTime[VTK_MAX_VRCOMP];
236 
237  // The corrected scalar opacity transfer function array - this is identical
238  // to the opacity transfer function array when the step size is 1.
239  // In other cases, it is corrected to reflect the new material thickness
240  // modelled by a step size different than 1.
241  float* CorrectedScalarOpacityArray[VTK_MAX_VRCOMP];
242  vtkTimeStamp CorrectedScalarOpacityArrayMTime[VTK_MAX_VRCOMP];
243 
244  // CorrectedStepSize is the step size currently modelled by
245  // CorrectedArray. It is used to determine when the
246  // CorrectedArray needs to be updated to match SampleDistance
247  // in the volume mapper.
249 
250  // Number of elements in the rgb, gray, and opacity transfer function arrays
252 
253  // The magnitude of gradient opacity transfer function array
254  float GradientOpacityArray[VTK_MAX_VRCOMP][256];
255  float GradientOpacityConstant[VTK_MAX_VRCOMP];
256  vtkTimeStamp GradientOpacityArrayMTime[VTK_MAX_VRCOMP];
257 
258  // Function to compute screen coverage of this volume
260 
261 private:
262  vtkVolume(const vtkVolume&) = delete;
263  void operator=(const vtkVolume&) = delete;
264 };
265 
266 VTK_ABI_NAMESPACE_END
267 #endif
Abstract class for a volume mapper.
a simple class to control print indentation
Definition: vtkIndent.h:38
represents an 3D object for placement in a rendered scene
Definition: vtkProp3D.h:48
double * GetBounds() override=0
Return a reference to the Prop3D's composite transform.
an ordered list of Props
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:55
abstract specification for renderers
Definition: vtkRenderer.h:71
record modification and/or execution time
Definition: vtkTimeStamp.h:34
abstract specification for Viewports
Definition: vtkViewport.h:54
an ordered list of volumes
represents the common properties for rendering a volume.
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:49
void UpdateTransferFunctions(vtkRenderer *ren)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
vtkMTimeType GetRedrawMTime() override
Return the mtime of anything that would cause the rendered image to appear differently.
double GetMaxZBound()
Get the bounds - either all six at once (xmin, xmax, ymin, ymax, zmin, zmax) or one at a time.
static vtkVolume * New()
Creates a Volume with the following defaults: origin(0,0,0) position=(0,0,0) scale=1 visibility=1 pic...
double ComputeScreenCoverage(vtkViewport *vp)
bool GetSupportsSelection() override
Used by vtkHardwareSelector to determine if the prop supports hardware selection.
Definition: vtkVolume.h:207
double GetMaxXBound()
Get the bounds - either all six at once (xmin, xmax, ymin, ymax, zmin, zmax) or one at a time.
virtual void SetProperty(vtkVolumeProperty *property)
Set/Get the volume property.
float * GetGrayArray()
Definition: vtkVolume.h:166
float GetGradientOpacityConstant()
Definition: vtkVolume.h:180
~vtkVolume() override
void GetVolumes(vtkPropCollection *vc) override
For some exporters and other other operations we must be able to collect all the actors or volumes.
vtkAbstractVolumeMapper * Mapper
Definition: vtkVolume.h:213
float CorrectedStepSize
Definition: vtkVolume.h:248
float * GetCorrectedScalarOpacityArray(int)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
void UpdateScalarOpacityforSampleSize(vtkRenderer *ren, float sample_distance)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
float GetGradientOpacityConstant(int)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
vtkMTimeType GetMTime() override
Return the MTime also considering the property etc.
void ShallowCopy(vtkProp *prop) override
Shallow copy of this vtkVolume.
void SetMapper(vtkAbstractVolumeMapper *mapper)
Set/Get the volume mapper.
double GetMinYBound()
Get the bounds - either all six at once (xmin, xmax, ymin, ymax, zmin, zmax) or one at a time.
int ArraySize
Definition: vtkVolume.h:251
void ReleaseGraphicsResources(vtkWindow *) override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
float * GetRGBArray(int)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
float * GetRGBArray()
Definition: vtkVolume.h:173
double GetMinXBound()
Get the bounds - either all six at once (xmin, xmax, ymin, ymax, zmin, zmax) or one at a time.
float * GetGradientOpacityArray(int)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
int RenderVolumetricGeometry(vtkViewport *viewport) override
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
vtkVolumeProperty * Property
Definition: vtkVolume.h:214
void Update()
Update the volume rendering pipeline by updating the volume mapper.
double GetMinZBound()
Get the bounds - either all six at once (xmin, xmax, ymin, ymax, zmin, zmax) or one at a time.
float * GetGradientOpacityArray()
Definition: vtkVolume.h:159
float * GetScalarOpacityArray(int)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
virtual vtkVolumeProperty * GetProperty()
Set/Get the volume property.
float * GetScalarOpacityArray()
Definition: vtkVolume.h:152
float GetArraySize()
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
Definition: vtkVolume.h:186
float * GetGrayArray(int)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
double * GetBounds() override
Get the bounds - either all six at once (xmin, xmax, ymin, ymax, zmin, zmax) or one at a time.
double GetMaxYBound()
Get the bounds - either all six at once (xmin, xmax, ymin, ymax, zmin, zmax) or one at a time.
float * GetCorrectedScalarOpacityArray()
Definition: vtkVolume.h:145
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
void GetBounds(T a, double bds[6])
#define VTK_MAX_VRCOMP
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:270
#define VTK_SIZEHINT(...)