CTL  0.6.1
Computed Tomography Library
volumeviewer.h
1 #ifndef CTL_VOLUMEVIEWER_H
2 #define CTL_VOLUMEVIEWER_H
3 
4 #include <QWidget>
5 #include "img/compositevolume.h"
6 
7 namespace Ui {
8 class VolumeViewer;
9 }
10 
11 namespace CTL {
12 namespace gui {
13 
14 class Chunk2DView;
15 
113 class VolumeViewer : public QWidget
114 {
115  Q_OBJECT
116 
117 public:
118  enum class WindowPreset {
119  Abdomen,
120  Angio,
121  Bone,
122  Brain,
123  Chest,
124  Lungs
125  };
126 
127  explicit VolumeViewer(QWidget *parent = nullptr);
128  VolumeViewer(CompositeVolume volume, QWidget *parent = nullptr);
129  ~VolumeViewer();
130 
131  template <typename T>
132  static void plot(const VoxelVolume<T>& data);
133  static void plot(CompositeVolume data);
134  static void plot(SpectralVolumeData data);
135 
136  const CompositeVolume& data() const;
137  Chunk2DView* dataView() const;
138  template <typename T>
139  void setData(const VoxelVolume<T>& data);
142  void setWindowPresets(WindowPreset preset1, WindowPreset preset2);
143  void setWindowPresetsInMu(WindowPreset preset1, WindowPreset preset2, float referenceEnergy);
144  void setWindowPresets(QPair<QString, QPair<double, double>> preset1,
145  QPair<QString, QPair<double, double>> preset2);
146 
147 public Q_SLOTS:
148  void autoResize();
149  void hideCompositeOverview(bool hide = true);
151  void showSlice(int slice);
152  void showSubvolume(int subvolume);
153 
154 protected:
155  void keyPressEvent(QKeyEvent *event) override;
156 
157 private:
158  Ui::VolumeViewer *ui;
159 
160  CompositeVolume _compData;
161 
162  const SpectralVolumeData& selectedVolume() const;
163 
164 private Q_SLOTS:
165  void changeSlice(int requestedChange);
166  void selectCentralSlice();
167  void sliceDirectionChanged();
168  void updateVolumeOverview();
169  void updateSliderRange();
170  void updatePixelInfo(int x, int y, float value);
171  void volumeSelectionChanged();
172  void windowingUpdate();
173 };
174 
179 template<typename T>
181 {
182  plot(SpectralVolumeData(assist::convertTo<float>(data)));
183 }
184 
189 template<typename T>
191 {
192  setData(SpectralVolumeData(assist::convertTo<float>(data)));
193 }
194 
195 
196 // free function plot()
197 inline void plot(CompositeVolume data)
198 { VolumeViewer::plot(std::move(data)); }
199 
200 inline void plot(SpectralVolumeData data)
201 { VolumeViewer::plot(std::move(data)); }
202 
203 template<typename T>
204 inline void plot(const VoxelVolume<T>& data)
205 { VolumeViewer::plot(data); }
206 
207 } // namespace gui
208 } // namespace CTL
209 
210 #endif // CTL_VOLUMEVIEWER_H
void showSubvolume(int subvolume)
Definition: volumeviewer.cpp:310
void setAutoMouseWindowScaling()
Definition: volumeviewer.cpp:288
void setWindowPresets(WindowPreset preset1, WindowPreset preset2)
Definition: volumeviewer.cpp:211
const CompositeVolume & data() const
Definition: volumeviewer.cpp:118
The VoxelVolume class provides a simple container for storage of voxelized 3D volume data.
Definition: ctsystemview.h:14
void setWindowPresetsInMu(WindowPreset preset1, WindowPreset preset2, float referenceEnergy)
Definition: volumeviewer.cpp:233
static void plot(const VoxelVolume< T > &data)
Definition: volumeviewer.h:180
VolumeViewer(QWidget *parent=nullptr)
Definition: volumeviewer.cpp:26
void hideCompositeOverview(bool hide=true)
Definition: volumeviewer.cpp:275
The CompositeVolume class is a container to hold multiple volume datasets of any type from the CTL.
Definition: compositevolume.h:108
void setData(const VoxelVolume< T > &data)
Definition: volumeviewer.h:190
void autoResize()
Definition: volumeviewer.cpp:255
~VolumeViewer()
Definition: volumeviewer.cpp:79
The SpectralVolumeData class holds voxelized data (for a single material) along with information on i...
Definition: spectralvolumedata.h:40
The Chunk2DView class provides basic visualization of Chunk2D data.
Definition: chunk2dview.h:87
Chunk2DView * dataView() const
Definition: volumeviewer.cpp:126
The VolumeViewer class provides a tool for visualization of volume data.
Definition: volumeviewer.h:113
void showSlice(int slice)
Definition: volumeviewer.cpp:296