5 #include <QSurfaceFormat>
6 #include <QOpenGLShaderProgram>
13 enum DrawMode {shaded, wireframe, surfaceangle, DRAWMODECOUNT};
15 class Canvas : public QOpenGLWidget, protected QOpenGLFunctions
20 explicit Canvas(const QSurfaceFormat& format, QWidget* parent=0);
23 const static float P_PERSPECTIVE;
24 const static float P_ORTHOGRAPHIC;
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);
32 void set_status(const QString& s);
34 void load_mesh(Mesh* m, bool is_reload);
37 void paintGL() override;
38 void initializeGL() override;
39 void resizeGL(int width, int height) override;
41 void mousePressEvent(QMouseEvent* event) override;
42 void mouseReleaseEvent(QMouseEvent* event) override;
43 void mouseMoveEvent(QMouseEvent* event) override;
44 void wheelEvent(QWheelEvent* event) override;
46 void set_perspective(float p);
47 void view_anim(float v);
52 QMatrix4x4 orient_matrix() const;
53 QMatrix4x4 transform_matrix() const;
54 QMatrix4x4 aspect_matrix() const;
55 QMatrix4x4 view_matrix() const;
57 QOpenGLShader* mesh_vertshader;
58 QOpenGLShaderProgram mesh_shader;
59 QOpenGLShaderProgram mesh_wireframe_shader;
60 QOpenGLShaderProgram mesh_surfaceangle_shader;
73 enum DrawMode drawMode;
76 Q_PROPERTY(float perspective MEMBER perspective WRITE set_perspective);
77 QPropertyAnimation anim;