NorMIT-nav  18.04
An IGT application
cxMehdiGPURayCastMultiVolumeRep.h
Go to the documentation of this file.
1 /*=========================================================================
2 This file is part of CustusX, an Image Guided Therapy Application.
3 
4 Copyright (c) SINTEF Department of Medical Technology.
5 All rights reserved.
6 
7 CustusX is released under a BSD 3-Clause license.
8 
9 See Lisence.txt (https://github.com/SINTEFMedtek/CustusX/blob/master/License.txt) for details.
10 =========================================================================*/
11 #ifndef CXMEHDIGPURAYCASTMULTIVOLUMEREP_H
12 #define CXMEHDIGPURAYCASTMULTIVOLUMEREP_H
13 
14 #include "cxResourceVisualizationExport.h"
15 
16 #include "cxRepImpl.h"
17 #include "cxForwardDeclarations.h"
18 #include <vector>
19 #include "vtkForwardDeclarations.h"
20 
21 #include "cxConfig.h"
22 
23 #include "cxImageMapperMonitor.h"
24 
25 typedef vtkSmartPointer<class vtkOpenGLGPUMultiVolumeRayCastMapper> vtkOpenGLGPUMultiVolumeRayCastMapperPtr;
26 
27 
28 namespace cx
29 {
30 
31 
32 typedef boost::shared_ptr<class ImageEnveloper> ImageEnveloperPtr;
33 typedef boost::shared_ptr<class MehdiGPURayCastMultiVolumeRep> MehdiGPURayCastMultiVolumeRepPtr;
34 typedef boost::shared_ptr<class VolumeProperty> VolumePropertyPtr;
35 typedef boost::shared_ptr<class ImageMapperMonitor> ImageMapperMonitorPtr;
36 
37 class cxResourceVisualization_EXPORT MehdiGPURayCastMultiVolumeRepImageMapperMonitor : public ImageMapperMonitor
38 {
39 public:
40  static ImageMapperMonitorPtr create(vtkVolumePtr volume, ImagePtr image, int volumeIndex);
41 protected:
42  virtual void clearClipping();
45  virtual void applyClipping();
46  virtual void applyCropping();
48 private:
50  int mVolumeIndex;
51 };
52 
53 
59 class cxResourceVisualization_EXPORT MehdiGPURayCastMultiVolumeRepBase: public RepImpl
60 {
61 Q_OBJECT
62 public:
65  virtual void setMaxVolumeSize(long maxVoxels);
66 
67 protected:
68  long mMaxVoxels;
69 
70 private slots:
71  virtual void transformChangedSlot() = 0;
72  virtual void vtkImageDataChangedSlot() = 0;
73 };
74 
75 #ifdef CX_BUILD_MEHDI_VTKMULTIVOLUME
76 
85 class cxResourceVisualization_EXPORT MehdiGPURayCastMultiVolumeRep: public MehdiGPURayCastMultiVolumeRepBase
86 {
87  Q_OBJECT
88 public:
89  static MehdiGPURayCastMultiVolumeRepPtr New(QString uid="") { return wrap_new(new MehdiGPURayCastMultiVolumeRep(), uid); }
90  virtual ~MehdiGPURayCastMultiVolumeRep();
91 
92  virtual QString getType() const { return "MehdiGPURayCastMultiVolumeRep"; }
93 
94  void setImages(std::vector<ImagePtr> images);
95 
96 protected:
97  MehdiGPURayCastMultiVolumeRep();
98  virtual void addRepActorsToViewRenderer(View* view);
99  virtual void removeRepActorsFromViewRenderer(View* view);
100 
101 private slots:
102  void transformChangedSlot();
103  void vtkImageDataChangedSlot();
104 
105 private:
106  void initializeMapper();
107  void updateTransforms();
108  void clearVolume();
109  void setupVolume();
110  ImagePtr getEnvelopingImage();
111  void disconnectImages();
112  void connectImages();
113  void setupMonitor();
114  void setupVolumeProperties();
115  void setupReferenceVolumeAndPropertiesAndConnectToVolume();
116 
117  vtkVolumePtr mVolume;
119  std::vector<VolumePropertyPtr> mVolumeProperties;
120  VolumePropertyPtr mReferenceProperty;
121  std::vector<ImagePtr> mImages;
122  ImagePtr mReferenceImage;
123  std::vector<ImageMapperMonitorPtr> mMonitors;
124 };
125 
126 #endif // CXMEHDIGPURAYCASTMULTIVOLUMEREP_H
127 
128 
129 } // namespace cx
130 
131 
132 #endif //CX_BUILD_MEHDI_VTKMULTIVOLUME
133 
134 
vtkSmartPointer< class vtkVolume > vtkVolumePtr
vtkSmartPointer< class vtkOpenGLGPUMultiVolumeRayCastMapper > vtkOpenGLGPUMultiVolumeRayCastMapperPtr
boost::shared_ptr< class Image > ImagePtr
Definition: cxDicomWidget.h:27
boost::shared_ptr< class ImageMapperMonitor > ImageMapperMonitorPtr
boost::shared_ptr< class MehdiGPURayCastMultiVolumeRep > MehdiGPURayCastMultiVolumeRepPtr
Default implementation of Rep.
Definition: cxRepImpl.h:42
boost::shared_ptr< class VolumeProperty > VolumePropertyPtr
long mMaxVoxels
always resample volume below this size.
boost::shared_ptr< class ImageEnveloper > ImageEnveloperPtr
Namespace for all CustusX production code.