#ifndef CAMERA_H #define CAMERA_H #include #include #include #include #include class Camera : public QObject { 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: explicit Camera(QObject *parent = nullptr); void mousePressEvent(QMouseEvent* event); void mouseMoveEvent(QMouseEvent* event, int viewportHeight); void wheelEvent(QWheelEvent* event, const QVector3D& worldPos); QMatrix4x4 modelViewMatrix() const; 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); void saveState(); void restoreState(); void animateToPlaneView(int plane); void animateRestoreState(); float savedXRot() const { return m_savedXRot; } float savedYRot() const { return m_savedYRot; } float savedZoom() const { return m_savedZoom; } float savedPanX() const { return m_savedPanX; } float savedPanY() const { return m_savedPanY; } signals: void cameraChanged(); void restoreStateAnimationFinished(); private: QPoint m_lastPos; float m_xRot; float m_yRot; float m_zoom; float m_panX; float m_panY; float m_savedXRot = 0; float m_savedYRot = 0; float m_savedZoom = -5.0f; float m_savedPanX = 0; float m_savedPanY = 0; }; #endif // CAMERA_H