CTL  0.6.1
Computed Tomography Library
ctsystemview.h
1 #ifndef CTL_CTSYSTEMVIEW_H
2 #define CTL_CTSYSTEMVIEW_H
3 
4 #include <QWidget>
5 #include <Qt3DWindow>
6 
7 // forward delcarations
8 namespace CTL {
9 class AbstractDetector;
10 class AbstractGantry;
11 class AbstractSource;
12 class SimpleCTSystem;
13 template <typename T>
15 } // namespace CTL
16 class QGridLayout;
17 namespace Qt3DCore {
18 class QEntity;
19 } // namespace Qt3DCore
20 namespace Qt3DExtras {
21 class QOrbitCameraController;
22 } // namespace Qt3DExtras
23 namespace Qt3DRender {
24 class QCamera;
25 class QMaterial;
26 } // namespace Qt3DRender
27 
28 
29 namespace CTL {
30 namespace gui {
31 
32 namespace details {
33 class CTL3DWindow;
34 }
35 
78 class CTSystemView : public QWidget
79 {
80  Q_OBJECT
81 public:
82  explicit CTSystemView(QWidget* parent = nullptr, float visualScale = 50.0f);
83 
84  void setCTSystem(const SimpleCTSystem& system);
85  void setData(const SimpleCTSystem& system);
86 
87  static void plot(const SimpleCTSystem& system, float visualScale = 50.0f);
88 
89  void addSystemVisualization(const SimpleCTSystem& system);
90  void addVolume(const VoxelVolume<uchar>& volume);
91 
92 public Q_SLOTS:
93  void clearScene();
94  void resetCamera();
95  void resetView();
96 
97 protected:
98  QGridLayout* _mainLayout;
99 
100  details::CTL3DWindow* _view;
101  Qt3DCore::QEntity* _rootEntity;
102 
103  void addBoxObject(const QVector3D& dimensions,
104  const QVector3D& translation,
105  const QQuaternion& rotation,
106  Qt3DRender::QMaterial* material = nullptr);
107  void addBallObject(float radius,
108  const QVector3D& translation,
109  Qt3DRender::QMaterial* material = nullptr);
110  void addDetectorComponent(AbstractGantry* gantry, AbstractDetector* detector);
111  void addSourceComponent(AbstractGantry* gantry, AbstractSource* source);
112 
113 private:
114  Qt3DRender::QCamera* _camera;
115  Qt3DExtras::QOrbitCameraController* _camController;
116  Qt3DRender::QMaterial* _defaultMaterial;
117 
118  float _visualScale = 50.0f;
119 
120  void initializeView();
121  void addAxis(Qt::Axis axis, float lineLength = 10.0f);
122  void addCoordinateSystem();
123 };
124 
125 namespace details {
126 
127 class CTL3DWindow : public Qt3DExtras::Qt3DWindow
128 {
129  Q_OBJECT
130 public:
131  using Qt3DExtras::Qt3DWindow::Qt3DWindow;
132 
133 protected:
134  void keyPressEvent(QKeyEvent* e) override;
135 
136 Q_SIGNALS:
137  void saveRequest();
138 };
139 
140 } // namespace details
141 
142 // free function plot()
143 inline void plot(const SimpleCTSystem& system, float visualScale = 50.0f)
144 { CTSystemView::plot(system, visualScale); }
145 
146 } // namespace gui
147 } // namespace CTL
148 
149 #endif // CTL_CTSYSTEMVIEW_H
void resetView()
Definition: ctsystemview.cpp:210
Definition: ctsystemview.h:127
void resetCamera()
Definition: ctsystemview.cpp:197
void clearScene()
Definition: ctsystemview.cpp:182
The VoxelVolume class provides a simple container for storage of voxelized 3D volume data.
Definition: ctsystemview.h:14
The CTSystemView class provides a tool for visualization of a SimpleCTSystem.
Definition: ctsystemview.h:78
Base class for gantry components.
Definition: abstractgantry.h:65
Base class for detector components.
Definition: abstractdetector.h:54
void addVolume(const VoxelVolume< uchar > &volume)
Definition: ctsystemview.cpp:148
void setCTSystem(const SimpleCTSystem &system)
Definition: ctsystemview.cpp:82
void addSystemVisualization(const SimpleCTSystem &system)
Definition: ctsystemview.cpp:116
static void plot(const SimpleCTSystem &system, float visualScale=50.0f)
Definition: ctsystemview.cpp:69
void setData(const SimpleCTSystem &system)
Definition: ctsystemview.cpp:91
Base class for source components.
Definition: abstractsource.h:68
The SimpleCTSystem class is a specialized sub-class of CTSystem for simple systems (i....
Definition: simplectsystem.h:95
CTSystemView(QWidget *parent=nullptr, float visualScale=50.0f)
Definition: ctsystemview.cpp:31