81 lines
2.1 KiB
C++
81 lines
2.1 KiB
C++
#ifndef CAMERA_H
|
|
#define CAMERA_H
|
|
|
|
#include <QObject>
|
|
#include <QMatrix4x4>
|
|
#include <QPoint>
|
|
#include <QMouseEvent>
|
|
#include <QWheelEvent>
|
|
|
|
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();
|
|
|
|
void startRotation(const QVector3D& pivot);
|
|
void stopRotation();
|
|
bool isRotating() const { return m_isRotating; }
|
|
const QVector3D& rotationPivot() const { return m_rotationPivot; }
|
|
float uiCameraDistance() const;
|
|
|
|
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;
|
|
|
|
QVector3D m_rotationPivot;
|
|
bool m_isRotating = false;
|
|
float m_stableZoom = 0;
|
|
|
|
float m_savedXRot = 0;
|
|
float m_savedYRot = 0;
|
|
float m_savedZoom = -5.0f;
|
|
float m_savedPanX = 0;
|
|
float m_savedPanY = 0;
|
|
};
|
|
|
|
#endif // CAMERA_H
|