VTK
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 =========================================================================*/
31 #ifndef vtkVolume_h
32 #define vtkVolume_h
33 
34 #include "vtkProp3D.h"
35 #include "vtkRenderingCoreModule.h" // For export macro
36 
37 class vtkRenderer;
38 class vtkPropCollection;
40 class vtkWindow;
41 class vtkVolumeProperty;
43 
44 class VTKRENDERINGCORE_EXPORT vtkVolume : public vtkProp3D
45 {
46 public:
47  vtkTypeMacro(vtkVolume, vtkProp3D);
48  void PrintSelf(ostream& os, vtkIndent indent) override;
49 
55  static vtkVolume* New();
56 
58 
61  void SetMapper(vtkAbstractVolumeMapper* mapper);
62  vtkGetObjectMacro(Mapper, vtkAbstractVolumeMapper);
64 
66 
69  virtual void SetProperty(vtkVolumeProperty* property);
70  virtual vtkVolumeProperty* GetProperty();
72 
78  void GetVolumes(vtkPropCollection* vc) override;
79 
83  void Update();
84 
86 
90  double* GetBounds() VTK_SIZEHINT(6) override;
91  void GetBounds(double bounds[6]) { this->vtkProp3D::GetBounds(bounds); }
92  double GetMinXBound();
93  double GetMaxXBound();
94  double GetMinYBound();
95  double GetMaxYBound();
96  double GetMinZBound();
97  double GetMaxZBound();
99 
103  vtkMTimeType GetMTime() override;
104 
111  vtkMTimeType GetRedrawMTime() override;
112 
116  void ShallowCopy(vtkProp* prop) override;
117 
126  int RenderVolumetricGeometry(vtkViewport* viewport) override;
127 
134  void ReleaseGraphicsResources(vtkWindow*) override;
135 
140  float* GetCorrectedScalarOpacityArray(int);
142 
147  float* GetScalarOpacityArray(int);
148  float* GetScalarOpacityArray() { return this->GetScalarOpacityArray(0); }
149 
154  float* GetGradientOpacityArray(int);
155  float* GetGradientOpacityArray() { return this->GetGradientOpacityArray(0); }
156 
161  float* GetGrayArray(int);
162  float* GetGrayArray() { return this->GetGrayArray(0); }
163 
168  float* GetRGBArray(int);
169  float* GetRGBArray() { return this->GetRGBArray(0); }
170 
175  float GetGradientOpacityConstant(int);
177 
182  float GetArraySize() { return static_cast<float>(this->ArraySize); }
183 
188  void UpdateTransferFunctions(vtkRenderer* ren);
189 
194  void UpdateScalarOpacityforSampleSize(vtkRenderer* ren, float sample_distance);
195 
203  bool GetSupportsSelection() override { return true; }
204 
205 protected:
206  vtkVolume();
207  ~vtkVolume() override;
208 
211 
212  // The rgb transfer function array - for unsigned char data this
213  // is 256 elements, for short or unsigned short it is 65536 elements
214  // This is a sample at each scalar value of the rgb transfer
215  // function. A time stamp is kept to know when it needs rebuilding
216  float* RGBArray[VTK_MAX_VRCOMP];
217  vtkTimeStamp RGBArrayMTime[VTK_MAX_VRCOMP];
218 
219  // The gray transfer function array - for unsigned char data this
220  // is 256 elements, for short or unsigned short it is 65536 elements
221  // This is a sample at each scalar value of the gray transfer
222  // function. A time stamp is kept to know when it needs rebuilding
223  float* GrayArray[VTK_MAX_VRCOMP];
224  vtkTimeStamp GrayArrayMTime[VTK_MAX_VRCOMP];
225 
226  // The scalar opacity transfer function array - for unsigned char data this
227  // is 256 elements, for short or unsigned short it is 65536 elements
228  // This is a sample at each scalar value of the opacity transfer
229  // function. A time stamp is kept to know when it needs rebuilding
230  float* ScalarOpacityArray[VTK_MAX_VRCOMP];
231  vtkTimeStamp ScalarOpacityArrayMTime[VTK_MAX_VRCOMP];
232 
233  // The corrected scalar opacity transfer function array - this is identical
234  // to the opacity transfer function array when the step size is 1.
235  // In other cases, it is corrected to reflect the new material thickness
236  // modelled by a step size different than 1.
237  float* CorrectedScalarOpacityArray[VTK_MAX_VRCOMP];
238  vtkTimeStamp CorrectedScalarOpacityArrayMTime[VTK_MAX_VRCOMP];
239 
240  // CorrectedStepSize is the step size currently modelled by
241  // CorrectedArray. It is used to determine when the
242  // CorrectedArray needs to be updated to match SampleDistance
243  // in the volume mapper.
245 
246  // Number of elements in the rgb, gray, and opacity transfer function arrays
248 
249  // The magnitude of gradient opacity transfer function array
250  float GradientOpacityArray[VTK_MAX_VRCOMP][256];
251  float GradientOpacityConstant[VTK_MAX_VRCOMP];
252  vtkTimeStamp GradientOpacityArrayMTime[VTK_MAX_VRCOMP];
253 
254  // Function to compute screen coverage of this volume
255  double ComputeScreenCoverage(vtkViewport* vp);
256 
257 private:
258  vtkVolume(const vtkVolume&) = delete;
259  void operator=(const vtkVolume&) = delete;
260 };
261 
262 #endif
vtkVolumeCollection
an ordered list of volumes
Definition: vtkVolumeCollection.h:35
vtkVolume::ArraySize
int ArraySize
Definition: vtkVolume.h:247
vtkVolume
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:44
vtkProp3D
represents an 3D object for placement in a rendered scene
Definition: vtkProp3D.h:43
vtkVolume::GetArraySize
float GetArraySize()
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
Definition: vtkVolume.h:182
vtkVolume::GetScalarOpacityArray
float * GetScalarOpacityArray()
Definition: vtkVolume.h:148
vtkProp3D::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkObject::New
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:32
vtkVolume::GetRGBArray
float * GetRGBArray()
Definition: vtkVolume.h:169
vtkVolume::Property
vtkVolumeProperty * Property
Definition: vtkVolume.h:210
vtkVolume::GetGrayArray
float * GetGrayArray()
Definition: vtkVolume.h:162
vtkProp3D::GetBounds
double * GetBounds() override=0
Get the bounds for this Prop as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax).
vtkProp::GetVolumes
virtual void GetVolumes(vtkPropCollection *)
Definition: vtkProp.h:60
vtkVolume::CorrectedStepSize
float CorrectedStepSize
Definition: vtkVolume.h:244
vtkWindow
window superclass for vtkRenderWindow
Definition: vtkWindow.h:34
vtkProp::RenderVolumetricGeometry
virtual int RenderVolumetricGeometry(vtkViewport *)
Definition: vtkProp.h:217
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:45
vtkVolume::GetGradientOpacityArray
float * GetGradientOpacityArray()
Definition: vtkVolume.h:155
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkProp3D::GetMTime
vtkMTimeType GetMTime() override
Get the vtkProp3D's mtime.
vtkVolume::Mapper
vtkAbstractVolumeMapper * Mapper
Definition: vtkVolume.h:209
vtkViewport
abstract specification for Viewports
Definition: vtkViewport.h:44
vtkVolume::GetCorrectedScalarOpacityArray
float * GetCorrectedScalarOpacityArray()
Definition: vtkVolume.h:141
vtkProp
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:47
vtkProp3D::ShallowCopy
void ShallowCopy(vtkProp *prop) override
Shallow copy of this vtkProp3D.
vtkAbstractVolumeMapper
Abstract class for a volume mapper.
Definition: vtkAbstractVolumeMapper.h:38
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:58
vtkVolume::GetSupportsSelection
bool GetSupportsSelection() override
Used by vtkHardwareSelector to determine if the prop supports hardware selection.
Definition: vtkVolume.h:203
vtkPropCollection
an ordered list of Props
Definition: vtkPropCollection.h:35
vtkProp::GetRedrawMTime
virtual vtkMTimeType GetRedrawMTime()
Return the mtime of anything that would cause the rendered image to appear differently.
Definition: vtkProp.h:108
vtkVolume::GetGradientOpacityConstant
float GetGradientOpacityConstant()
Definition: vtkVolume.h:176
vtkProp::ReleaseGraphicsResources
virtual void ReleaseGraphicsResources(vtkWindow *)
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE Release any graphics resources that are being...
Definition: vtkProp.h:300
vtkVolumeProperty
represents the common properties for rendering a volume.
Definition: vtkVolumeProperty.h:74
vtkMTimeType
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:304
VTK_MAX_VRCOMP
#define VTK_MAX_VRCOMP
Definition: vtkSystemIncludes.h:105
vtkProp3D.h