VTK  9.1.20211230
vtkVolume.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkVolume.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 =========================================================================*/
120 #ifndef vtkVolume_h
121 #define vtkVolume_h
122 
123 #include "vtkProp3D.h"
124 #include "vtkRenderingCoreModule.h" // For export macro
125 
126 class vtkRenderer;
127 class vtkPropCollection;
128 class vtkVolumeCollection;
129 class vtkWindow;
130 class vtkVolumeProperty;
132 
133 class VTKRENDERINGCORE_EXPORT vtkVolume : public vtkProp3D
134 {
135 public:
136  vtkTypeMacro(vtkVolume, vtkProp3D);
137  void PrintSelf(ostream& os, vtkIndent indent) override;
138 
144  static vtkVolume* New();
145 
147 
151  vtkGetObjectMacro(Mapper, vtkAbstractVolumeMapper);
153 
155 
158  virtual void SetProperty(vtkVolumeProperty* property);
161 
167  void GetVolumes(vtkPropCollection* vc) override;
168 
172  void Update();
173 
175 
179  double* GetBounds() VTK_SIZEHINT(6) override;
180  void GetBounds(double bounds[6]) { this->vtkProp3D::GetBounds(bounds); }
181  double GetMinXBound();
182  double GetMaxXBound();
183  double GetMinYBound();
184  double GetMaxYBound();
185  double GetMinZBound();
186  double GetMaxZBound();
188 
192  vtkMTimeType GetMTime() override;
193 
201 
205  void ShallowCopy(vtkProp* prop) override;
206 
215  int RenderVolumetricGeometry(vtkViewport* viewport) override;
216 
224 
231 
237  float* GetScalarOpacityArray() { return this->GetScalarOpacityArray(0); }
238 
244  float* GetGradientOpacityArray() { return this->GetGradientOpacityArray(0); }
245 
250  float* GetGrayArray(int);
251  float* GetGrayArray() { return this->GetGrayArray(0); }
252 
257  float* GetRGBArray(int);
258  float* GetRGBArray() { return this->GetRGBArray(0); }
259 
266 
271  float GetArraySize() { return static_cast<float>(this->ArraySize); }
272 
278 
283  void UpdateScalarOpacityforSampleSize(vtkRenderer* ren, float sample_distance);
284 
292  bool GetSupportsSelection() override { return true; }
293 
294 protected:
296  ~vtkVolume() override;
297 
300 
301  // The rgb transfer function array - for unsigned char data this
302  // is 256 elements, for short or unsigned short it is 65536 elements
303  // This is a sample at each scalar value of the rgb transfer
304  // function. A time stamp is kept to know when it needs rebuilding
305  float* RGBArray[VTK_MAX_VRCOMP];
306  vtkTimeStamp RGBArrayMTime[VTK_MAX_VRCOMP];
307 
308  // The gray transfer function array - for unsigned char data this
309  // is 256 elements, for short or unsigned short it is 65536 elements
310  // This is a sample at each scalar value of the gray transfer
311  // function. A time stamp is kept to know when it needs rebuilding
312  float* GrayArray[VTK_MAX_VRCOMP];
313  vtkTimeStamp GrayArrayMTime[VTK_MAX_VRCOMP];
314 
315  // The scalar opacity transfer function array - for unsigned char data this
316  // is 256 elements, for short or unsigned short it is 65536 elements
317  // This is a sample at each scalar value of the opacity transfer
318  // function. A time stamp is kept to know when it needs rebuilding
319  float* ScalarOpacityArray[VTK_MAX_VRCOMP];
320  vtkTimeStamp ScalarOpacityArrayMTime[VTK_MAX_VRCOMP];
321 
322  // The corrected scalar opacity transfer function array - this is identical
323  // to the opacity transfer function array when the step size is 1.
324  // In other cases, it is corrected to reflect the new material thickness
325  // modelled by a step size different than 1.
326  float* CorrectedScalarOpacityArray[VTK_MAX_VRCOMP];
327  vtkTimeStamp CorrectedScalarOpacityArrayMTime[VTK_MAX_VRCOMP];
328 
329  // CorrectedStepSize is the step size currently modelled by
330  // CorrectedArray. It is used to determine when the
331  // CorrectedArray needs to be updated to match SampleDistance
332  // in the volume mapper.
334 
335  // Number of elements in the rgb, gray, and opacity transfer function arrays
337 
338  // The magnitude of gradient opacity transfer function array
339  float GradientOpacityArray[VTK_MAX_VRCOMP][256];
340  float GradientOpacityConstant[VTK_MAX_VRCOMP];
341  vtkTimeStamp GradientOpacityArrayMTime[VTK_MAX_VRCOMP];
342 
343  // Function to compute screen coverage of this volume
345 
346 private:
347  vtkVolume(const vtkVolume&) = delete;
348  void operator=(const vtkVolume&) = delete;
349 };
350 
351 #endif
Abstract class for a volume mapper.
a simple class to control print indentation
Definition: vtkIndent.h:113
represents an 3D object for placement in a rendered scene
Definition: vtkProp3D.h:93
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:76
abstract specification for renderers
Definition: vtkRenderer.h:182
record modification and/or execution time
Definition: vtkTimeStamp.h:52
abstract specification for Viewports
Definition: vtkViewport.h:47
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:134
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:292
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:251
float GetGradientOpacityConstant()
Definition: vtkVolume.h:265
~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:298
float CorrectedStepSize
Definition: vtkVolume.h:333
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:336
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:258
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:299
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:244
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:237
float GetArraySize()
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
Definition: vtkVolume.h:271
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:230
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:39
void GetBounds(T a, double bds[6])
#define VTK_MAX_VRCOMP
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
#define VTK_SIZEHINT(...)