#ifndef VIEWPORTWIDGET_H #define VIEWPORTWIDGET_H #include #include #include #include #include #include class ViewCube; class SketchGrid; class Document; class FeatureBrowser; class ViewportWidget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT Q_PROPERTY(float xRotation READ xRotation WRITE setXRotation) Q_PROPERTY(float yRotation READ yRotation WRITE setYRotation) Q_PROPERTY(float zoom READ zoom WRITE setZoom) Q_PROPERTY(float panX READ panX WRITE setPanX) Q_PROPERTY(float panY READ panY WRITE setPanY) public: enum class SketchPlane { NONE, XY, XZ, YZ }; explicit ViewportWidget(QWidget *parent = nullptr); ~ViewportWidget(); void startSketch(SketchPlane plane); void saveSketch(); void setDocument(Document* document); float xRotation() const; void setXRotation(float angle); float yRotation() const; void setYRotation(float angle); float zoom() const; void setZoom(float value); float panX() const; void setPanX(float value); float panY() const; void setPanY(float value); protected: void initializeGL() override; void paintGL() override; void resizeGL(int w, int h) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; private: QVector3D project(const QVector3D& worldCoord, const QMatrix4x4& modelView, const QMatrix4x4& projection, const QRect& viewport); void drawAxisLabels(QPainter& painter, const QMatrix4x4& modelView, const QMatrix4x4& projection); QMatrix4x4 projection; ViewCube* m_viewCube; SketchGrid* m_sketchGrid = nullptr; FeatureBrowser* m_featureBrowser = nullptr; SketchPlane m_currentPlane = SketchPlane::NONE; float m_xRot = 0; float m_yRot = 0; float m_zoom = -5.0f; float m_panX = 0; float m_panY = 0; QPoint lastPos; float m_savedXRot = 0; float m_savedYRot = 0; float m_savedZoom = -5.0f; float m_savedPanX = 0; float m_savedPanY = 0; }; #endif // VIEWPORTWIDGET_H