]> git.sur5r.net Git - fstl/blobdiff - src/canvas.h
New upstream version 0.10.0
[fstl] / src / canvas.h
index 7fa80c8f163bca4f09673f5373b1e81259102553..0fdff64cb501cc98c88e44294edc150823ced4b4 100644 (file)
@@ -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