-
Notifications
You must be signed in to change notification settings - Fork 0
/
coronalslicewidget.h
117 lines (85 loc) · 2.8 KB
/
coronalslicewidget.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#ifndef CORONALSLICEWIDGET_H
#define CORONALSLICEWIDGET_H
#include <QOpenGLWidget>
#include <QOpenGLBuffer>
#include <QOpenGLFunctions_3_3_Core>
#include <QOpenGLShaderProgram>
#include <QOpenGLVertexArrayObject>
#include <QDebug>
#include <QMouseEvent>
#include <QWidget>
#include <QVector>
#include <QVector4D>
#include <QMatrix4x4>
#include <QUndoStack>
#include <QPainter>
#include <nifti1.h>
#include <nifti1_io.h>
#include <opencv2/opencv.hpp>
#include "niftimage.h"
#include "vertex.h"
#include "commands.h"
#include "displayinfo.h"
class CoronalSliceWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_3_Core
{
Q_OBJECT
private:
SliceDisplayType displayType;
NIFTImage *fatImage;
NIFTImage *waterImage;
// Each bit represents whether the specified item in Dirty enum needs to be updated on drawing
int dirty;
QOpenGLShaderProgram *program;
GLuint sliceVertexBuf, sliceIndexBuf;
GLuint sliceVertexObject;
GLuint sliceTexture;
QVector<VertexPT> sliceVertices;
QVector<unsigned short> sliceIndices;
bool sliceTextureInit;
// Location of where the user is viewing.
// The format is (X, Y, Z, T) where T is time
QVector4D location;
bool startPan;
QPoint lastMousePos;
CommandID moveID;
QMatrix4x4 projectionMatrix;
QMatrix4x4 viewMatrix;
float scaling;
QVector3D translation;
QUndoStack *undoStack;
public:
CoronalSliceWidget(QWidget *parent);
~CoronalSliceWidget();
void readSettings(QSettings &settings);
void writeSettings(QSettings &settings);
// A value of Location::NoChange(-1) means no change for the location
void setLocation(QVector4D location);
QVector4D getLocation() const;
QVector4D transformLocation(QVector4D location) const;
void setup(NIFTImage *fat, NIFTImage *water);
bool isLoaded() const;
// Performs actions when a new image is loaded
void imageLoaded();
SliceDisplayType getDisplayType() const;
void setDisplayType(SliceDisplayType type);
void resetView();
float &rscaling();
QVector3D &rtranslation();
QMatrix4x4 getMVPMatrix() const;
QMatrix4x4 getWindowToNIFTIMatrix(bool includeMVP = true) const;
QMatrix4x4 getWindowToOpenGLMatrix(bool includeMVP = true, bool flipY = true) const;
QMatrix4x4 getNIFTIToOpenGLMatrix(bool includeMVP = true, bool flipY = true) const;
void setUndoStack(QUndoStack *stack);
void setDirty(int bit);
void updateTexture();
protected:
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
void initializeSliceView();
void mouseMoveEvent(QMouseEvent *eventMove);
void mousePressEvent(QMouseEvent *eventPress);
void mouseReleaseEvent(QMouseEvent *eventRelease);
void wheelEvent(QWheelEvent *event);
};
#endif // CORONALSLICEWIDGET_H