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);
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;
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