#pragma once #include "geometryengine.h" #include "..\Header\SettingsWindow.h" #include #include #include #include #include #include #include class GeometryEngine; class OglViewerWidget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: explicit OglViewerWidget(QWidget *parent = 0); ~OglViewerWidget(); signals: void loadFile(QString); private: struct { bool left = false; bool right = false; QVector2D position; } m_mouse; struct { bool x = true; bool y = true; bool z = true; } m_rotDirections; struct { QVector4D position = { 1,1,1,0 }; QVector3D intensities = { 1.0,1.0,1.0 }; float attenuationFactor = 0.0f; float ambientCoefficient = 0.005f; } m_light; SettingsWindow* m_settings; QVector4D m_backgroundColor = {0.5f, 0.8f, 1.0f, 1.0f}; QOpenGLShaderProgram m_program; GeometryEngine *m_dataEngine; QMatrix4x4 m_projection; QVector3D m_translation; QQuaternion m_rotation; bool m_wireframe = false; bool m_lightOn = false; double m_zSpeed = 1.0; protected: void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE; void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE; void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE; void dropEvent(QDropEvent * event) Q_DECL_OVERRIDE; void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; void initializeGL() Q_DECL_OVERRIDE; void resizeGL(int w, int h) Q_DECL_OVERRIDE; void paintGL() Q_DECL_OVERRIDE; private: void initShaders(); void setConnections(); void updateLightPosition(); private slots: void resetView(); public slots: void changeDirection(int direction); void toggleWireframe(); void toggleLight(); void showSettings(); signals: void sendMessage(QString message, int severity); };