Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkGPUVolumeMapper3D.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef MITKGPUVOLUMEMAPPER3D_H_HEADER_INCLUDED
14 #define MITKGPUVOLUMEMAPPER3D_H_HEADER_INCLUDED
15 
16 // MITK
17 #include "MitkMapperExtExports.h"
18 #include "mitkBaseRenderer.h"
19 #include "mitkCommon.h"
20 #include "mitkImage.h"
21 #include "mitkVtkMapper.h"
22 
23 // VTK
24 #include <vtkFixedPointVolumeRayCastMapper.h>
25 #include <vtkGPUVolumeRayCastMapper.h>
26 #include <vtkImageChangeInformation.h>
27 #include <vtkSmartPointer.h>
28 #include <vtkVersionMacros.h>
29 #include <vtkVolumeProperty.h>
30 
32 
33 namespace mitk
34 {
35  /************************************************************************/
36  /* Properties that influence the mapper are:
37  *
38  * - \b "level window": for the level window of the volume data
39  * - \b "LookupTable" : for the lookup table of the volume data
40  * - \b "TransferFunction" (mitk::TransferFunctionProperty): for the used transfer function of the volume data
41  ************************************************************************/
42 
43  //##Documentation
44  //## @brief Vtk-based mapper for VolumeData
45  //##
46  //## @ingroup Mapper
48  {
49  public:
51 
52  itkFactorylessNewMacro(Self);
53 
54  itkCloneMacro(Self);
55 
56  virtual const mitk::Image *GetInput();
57 
58  vtkProp *GetVtkProp(mitk::BaseRenderer *renderer) override;
59 
60  void ApplyProperties(vtkActor *actor, mitk::BaseRenderer *renderer) override;
61  static void SetDefaultProperties(mitk::DataNode *node, mitk::BaseRenderer *renderer = nullptr, bool overwrite = false);
62 
66  bool IsLODEnabled(BaseRenderer *renderer = nullptr) const override;
67  bool IsMIPEnabled(BaseRenderer *renderer = nullptr);
68  bool IsGPUEnabled(BaseRenderer *renderer = nullptr);
69  bool IsRAYEnabled(BaseRenderer *renderer = nullptr);
70 
71  void MitkRenderVolumetricGeometry(mitk::BaseRenderer *renderer) override;
72 
73  protected:
75  ~GPUVolumeMapper3D() override;
76 
77  bool IsRenderable(mitk::BaseRenderer *renderer);
78 
79  void InitCommon();
80  void DeinitCommon();
81 
82  void InitCPU(mitk::BaseRenderer *renderer);
83  void DeinitCPU(mitk::BaseRenderer *renderer);
84  void GenerateDataCPU(mitk::BaseRenderer *renderer);
85 
86  bool InitGPU(mitk::BaseRenderer *renderer);
87  void DeinitGPU(mitk::BaseRenderer *);
88  void GenerateDataGPU(mitk::BaseRenderer *);
89 
90  bool InitRAY(mitk::BaseRenderer *renderer);
91  void DeinitRAY(mitk::BaseRenderer *renderer);
92  void GenerateDataRAY(mitk::BaseRenderer *renderer);
93 
94  void InitVtkMapper(mitk::BaseRenderer *renderer);
95 
96  void GenerateDataForRenderer(mitk::BaseRenderer *renderer) override;
97 
98  void CreateDefaultTransferFunctions();
99  void UpdateTransferFunctions(mitk::BaseRenderer *renderer);
100 
101  vtkSmartPointer<vtkVolume> m_Volumenullptr;
102 
104  vtkSmartPointer<vtkImageChangeInformation> m_UnitSpacingImageFilter;
105  vtkSmartPointer<vtkPiecewiseFunction> m_DefaultOpacityTransferFunction;
106  vtkSmartPointer<vtkPiecewiseFunction> m_DefaultGradientTransferFunction;
107  vtkSmartPointer<vtkColorTransferFunction> m_DefaultColorTransferFunction;
108  vtkSmartPointer<vtkPiecewiseFunction> m_BinaryOpacityTransferFunction;
109  vtkSmartPointer<vtkPiecewiseFunction> m_BinaryGradientTransferFunction;
110  vtkSmartPointer<vtkColorTransferFunction> m_BinaryColorTransferFunction;
111 
113  {
114  public:
115  // NO SMARTPOINTER HERE
116  vtkRenderWindow *m_VtkRenderWindow;
117 
119  vtkSmartPointer<vtkVolume> m_VolumeCPU;
120  vtkSmartPointer<vtkFixedPointVolumeRayCastMapper> m_MapperCPU;
121  vtkSmartPointer<vtkVolumeProperty> m_VolumePropertyCPU;
122 
125  vtkSmartPointer<vtkVolume> m_VolumeGPU;
126  vtkSmartPointer<vtkVolumeProperty> m_VolumePropertyGPU;
127 
130  vtkSmartPointer<vtkVolume> m_VolumeRAY;
131  vtkSmartPointer<vtkGPUVolumeRayCastMapper> m_MapperRAY;
132  vtkSmartPointer<vtkVolumeProperty> m_VolumePropertyRAY;
133 
135  {
136  m_VtkRenderWindow = nullptr;
137 
138  m_cpuInitialized = false;
139 
140  m_gpuInitialized = false;
141  m_gpuSupported = true; // assume initially gpu slicing is supported
142 
143  m_rayInitialized = false;
144  m_raySupported = true; // assume initially gpu raycasting is supported
145  }
146 
147  ~LocalStorage() override
148  {
149  if (m_cpuInitialized && m_MapperCPU && m_VtkRenderWindow)
150  m_MapperCPU->ReleaseGraphicsResources(m_VtkRenderWindow);
151 
152  if (m_rayInitialized && m_MapperRAY && m_VtkRenderWindow)
153  m_MapperRAY->ReleaseGraphicsResources(m_VtkRenderWindow);
154  }
155  };
156 
158  };
159 
160 } // namespace mitk
161 
162 #endif /* MITKVOLUMEDATAVTKMAPPER3D_H_HEADER_INCLUDED */
vtkSmartPointer< vtkImageChangeInformation > m_UnitSpacingImageFilter
Base class for mapper specific rendering ressources.
Definition: mitkMapper.h:193
#define MITKMAPPEREXT_EXPORT
vtkSmartPointer< vtkPiecewiseFunction > m_DefaultOpacityTransferFunction
vtkSmartPointer< vtkGPUVolumeRayCastMapper > m_MapperRAY
vtkSmartPointer< vtkVolumeProperty > m_VolumePropertyGPU
Organizes the rendering process.
DataCollection - Class to facilitate loading/accessing structured data.
vtkSmartPointer< vtkVolume > m_VolumeGPU
Base class of all Vtk Mappers in order to display primitives by exploiting Vtk functionality.
Definition: mitkVtkMapper.h:48
Base class of all mappers, Vtk as well as OpenGL mappers.
Definition: mitkMapper.h:49
vtkSmartPointer< vtkVolumeProperty > m_VolumePropertyRAY
vtkSmartPointer< vtkPiecewiseFunction > m_DefaultGradientTransferFunction
vtkSmartPointer< vtkVolume > m_VolumeRAY
vtkSmartPointer< vtkVolumeProperty > m_VolumePropertyCPU
vtkSmartPointer< vtkPiecewiseFunction > m_BinaryOpacityTransferFunction
#define mitkClassMacro(className, SuperClassName)
Definition: mitkCommon.h:40
Image class for storing images.
Definition: mitkImage.h:72
vtkSmartPointer< vtkVolume > m_Volumenullptr
mitk::LocalStorageHandler< LocalStorage > m_LSH
Vtk-based mapper for VolumeData.
vtkSmartPointer< vtkColorTransferFunction > m_DefaultColorTransferFunction
vtkSmartPointer< vtkVolume > m_VolumeCPU
vtkSmartPointer< vtkColorTransferFunction > m_BinaryColorTransferFunction
Class for nodes of the DataTree.
Definition: mitkDataNode.h:57
vtkSmartPointer< vtkPiecewiseFunction > m_BinaryGradientTransferFunction
vtkSmartPointer< vtkFixedPointVolumeRayCastMapper > m_MapperCPU