X-Git-Url: https://git.sur5r.net/?p=fstl;a=blobdiff_plain;f=src%2Fcanvas.h;fp=src%2Fcanvas.h;h=0fdff64cb501cc98c88e44294edc150823ced4b4;hp=7fa80c8f163bca4f09673f5373b1e81259102553;hb=dd4a156f8787b310568d82161bddd478b0938499;hpb=0da9fdf2b9623665a991990e57485a007645eba6 diff --git a/src/canvas.h b/src/canvas.h index 7fa80c8..0fdff64 100644 --- a/src/canvas.h +++ b/src/canvas.h @@ -8,19 +8,25 @@ class GLMesh; class Mesh; class Backdrop; +class Axis; + +enum DrawMode {shaded, wireframe, surfaceangle, DRAWMODECOUNT}; class Canvas : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: - explicit Canvas(const QSurfaceFormat& format, QWidget* parent=0); + explicit Canvas(const QSurfaceFormat& format, QWidget* parent=0); ~Canvas(); - void view_orthographic(); - void view_perspective(); - void draw_shaded(); - void draw_wireframe(); + const static float P_PERSPECTIVE; + const static float P_ORTHOGRAPHIC; + + void view_perspective(float p, bool animate); + void draw_axes(bool d); + void invert_zoom(bool d); + void set_drawMode(enum DrawMode mode); public slots: void set_status(const QString& s); @@ -28,31 +34,34 @@ public slots: void load_mesh(Mesh* m, bool is_reload); protected: - void paintGL() override; - void initializeGL() override; - void resizeGL(int width, int height) override; + void paintGL() override; + void initializeGL() override; + void resizeGL(int width, int height) override; void mousePressEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; void wheelEvent(QWheelEvent* event) override; - void set_perspective(float p); - void set_drawMode(int mode); + void set_perspective(float p); void view_anim(float v); private: void draw_mesh(); + QMatrix4x4 orient_matrix() const; QMatrix4x4 transform_matrix() const; + QMatrix4x4 aspect_matrix() const; QMatrix4x4 view_matrix() const; + QOpenGLShader* mesh_vertshader; QOpenGLShaderProgram mesh_shader; QOpenGLShaderProgram mesh_wireframe_shader; - QOpenGLShaderProgram quad_shader; + QOpenGLShaderProgram mesh_surfaceangle_shader; GLMesh* mesh; Backdrop* backdrop; + Axis* axis; QVector3D center; float scale; @@ -61,12 +70,15 @@ private: float yaw; float perspective; - int drawMode; + enum DrawMode drawMode; + bool drawAxes; + bool invertZoom; Q_PROPERTY(float perspective MEMBER perspective WRITE set_perspective); QPropertyAnimation anim; QPoint mouse_pos; QString status; + QString meshInfo; }; #endif // CANVAS_H