]> git.sur5r.net Git - fstl/blob - src/canvas.h
New upstream version 0.10.0
[fstl] / src / canvas.h
1 #ifndef CANVAS_H
2 #define CANVAS_H
3
4 #include <QtOpenGL>
5 #include <QSurfaceFormat>
6 #include <QOpenGLShaderProgram>
7
8 class GLMesh;
9 class Mesh;
10 class Backdrop;
11 class Axis;
12
13 enum DrawMode {shaded, wireframe, surfaceangle, DRAWMODECOUNT};
14
15 class Canvas : public QOpenGLWidget, protected QOpenGLFunctions
16 {
17     Q_OBJECT
18
19 public:
20     explicit Canvas(const QSurfaceFormat& format, QWidget* parent=0);
21     ~Canvas();
22
23     const static float P_PERSPECTIVE;
24     const static float P_ORTHOGRAPHIC;
25
26     void view_perspective(float p, bool animate);
27     void draw_axes(bool d);
28     void invert_zoom(bool d);
29     void set_drawMode(enum DrawMode mode);
30
31 public slots:
32     void set_status(const QString& s);
33     void clear_status();
34     void load_mesh(Mesh* m, bool is_reload);
35
36 protected:
37     void paintGL() override;
38     void initializeGL() override;
39     void resizeGL(int width, int height) override;
40
41     void mousePressEvent(QMouseEvent* event) override;
42     void mouseReleaseEvent(QMouseEvent* event) override;
43     void mouseMoveEvent(QMouseEvent* event) override;
44     void wheelEvent(QWheelEvent* event) override;
45     
46     void set_perspective(float p);
47     void view_anim(float v);
48
49 private:
50     void draw_mesh();
51
52     QMatrix4x4 orient_matrix() const;
53     QMatrix4x4 transform_matrix() const;
54     QMatrix4x4 aspect_matrix() const;
55     QMatrix4x4 view_matrix() const;
56
57     QOpenGLShader* mesh_vertshader;
58     QOpenGLShaderProgram mesh_shader;
59     QOpenGLShaderProgram mesh_wireframe_shader;
60     QOpenGLShaderProgram mesh_surfaceangle_shader;
61
62     GLMesh* mesh;
63     Backdrop* backdrop;
64     Axis* axis;
65
66     QVector3D center;
67     float scale;
68     float zoom;
69     float tilt;
70     float yaw;
71
72     float perspective;
73     enum DrawMode drawMode;
74     bool drawAxes;
75     bool invertZoom;
76     Q_PROPERTY(float perspective MEMBER perspective WRITE set_perspective);
77     QPropertyAnimation anim;
78
79     QPoint mouse_pos;
80     QString status;
81     QString meshInfo;
82 };
83
84 #endif // CANVAS_H