12#include <QtCore/QObject>
13#include <QtCore/QPointF>
14#include <QtCore/QSizeF>
15#include <QtGui/QVector3D>
16#include <QtQmlIntegration/QtQmlIntegration>
55 qreal
heading()
const {
return _heading; }
59 qreal
tilt()
const {
return _tilt; }
76 Q_INVOKABLE
void reset();
82 Q_INVOKABLE
void beginPan(
const QPointF& screenPos);
84 Q_INVOKABLE
void panTo(
const QPointF& screenPos);
87 Q_INVOKABLE
void beginOrbit(
const QPointF& screenPos);
90 Q_INVOKABLE
void orbitTo(
const QPointF& screenPos);
95 Q_INVOKABLE
void rotateBy(qreal degrees,
const QPointF& screenPos);
100 Q_INVOKABLE
void tiltBy(qreal degrees,
const QPointF& screenPos);
104 Q_INVOKABLE
void zoom(qreal amount,
const QPointF& screenPos);
108 Q_INVOKABLE
void zoomBy(qreal factor,
const QPointF& screenPos);
119 std::optional<QVector3D>
screenToGround(
const QPointF& screenPos)
const;
130 QVector3D _orbitCenter;
131 qreal _heading = 0.0;
134 QSizeF _viewportSize;
137 QVector3D _panAnchor;
138 bool _panAnchorValid =
false;
139 QVector3D _orbitAnchor;
140 bool _orbitAnchorValid =
false;
141 QPointF _lastOrbitPos;
145 void _rotateAboutAnchor(
const QVector3D& anchor, qreal headingDelta, qreal tiltDelta);
Q_INVOKABLE void beginOrbit(const QPointF &screenPos)
Start an orbit gesture at the given screen position (pixels)
Q_INVOKABLE void zoomBy(qreal factor, const QPointF &screenPos)
void setOrbitCenter(const QVector3D ¢er)
QSizeF viewportSize() const
std::optional< QVector3D > screenToGround(const QPointF &screenPos) const
Q_INVOKABLE void orbitTo(const QPointF &screenPos)
Q_INVOKABLE void lookAt(const QVector3D ¢er, qreal heading, qreal tilt, qreal distance)
Set the full pose in one call. tilt/distance are clamped.
friend class Viewer3DCameraControllerTest
static constexpr qreal kMinTilt
Q_INVOKABLE void rotateBy(qreal degrees, const QPointF &screenPos)
qreal fieldOfView() const
static constexpr qreal kDefaultDistance
Q_INVOKABLE void zoom(qreal amount, const QPointF &screenPos)
QVector3D orbitCenter() const
void viewportSizeChanged()
static constexpr qreal kMaxDistance
void setDistance(qreal distance)
Q_INVOKABLE void reset()
Restore the default pose (center origin, heading 0, tilt 0, default distance)
void fieldOfViewChanged()
Q_INVOKABLE void beginPan(const QPointF &screenPos)
Start a pan gesture at the given screen position (pixels)
void setHeading(qreal heading)
static constexpr qreal kMinDistance
Q_INVOKABLE void panTo(const QPointF &screenPos)
Continue a pan gesture: the ground point picked at beginPan stays under the cursor.
void orbitCenterChanged()
static constexpr qreal kMaxTilt
void setFieldOfView(qreal fov)
QVector3D cameraPosition() const
Derived camera position in scene space.
void setViewportSize(const QSizeF &size)
Q_INVOKABLE void tiltBy(qreal degrees, const QPointF &screenPos)
Q_INVOKABLE qreal sceneUnitsPerPixel() const
static constexpr qreal kDefaultFieldOfView