14#include <QtCore/QObject>
15#include <QtCore/QPointF>
16#include <QtCore/QSizeF>
17#include <QtCore/qnumeric.h>
18#include <QtGui/QQuaternion>
19#include <QtGui/QVector3D>
20#include <QtPositioning/QGeoCoordinate>
21#include <QtPositioning/QGeoRectangle>
22#include <QtQmlIntegration/QtQmlIntegration>
79 QGeoCoordinate
center() const;
87 qreal
heading()
const {
return _heading; }
91 qreal
tilt()
const {
return _tilt; }
138 Q_INVOKABLE
void reset();
161 Q_INVOKABLE
void beginPan(
const QPointF& screenPos,
double anchorZ = 0.0);
163 Q_INVOKABLE
void panTo(
const QPointF& screenPos);
166 Q_INVOKABLE
void beginOrbit(
const QPointF& screenPos,
double anchorZ = 0.0);
170 Q_INVOKABLE
void orbitTo(
const QPointF& screenPos);
173 Q_INVOKABLE
void beginLook(
const QPointF& screenPos);
178 Q_INVOKABLE
void lookTo(
const QPointF& screenPos);
182 Q_INVOKABLE
void rotateBy(qreal degrees,
const QPointF& screenPos);
186 Q_INVOKABLE
void tiltBy(qreal degrees,
const QPointF& screenPos);
190 Q_INVOKABLE
void zoom(qreal amount,
const QPointF& screenPos);
194 Q_INVOKABLE
void zoomBy(qreal factor,
const QPointF& screenPos);
219 const QPointF& screenPos,
double worldZ = 0.0,
226 Q_INVOKABLE
void fitToRegion(
const QGeoRectangle& region);
267 std::optional<PickRay>
pickRayAt(
const QPointF& screenPos)
const;
273 std::optional<QPointF>
screenToGround(
const QPointF& screenPos,
double planeZ = 0.0)
const;
284 std::optional<QPointF>
groundPointCapped(
const QPointF& screenPos,
double maxRange)
const;
289 std::optional<QPointF>
worldToScreen(
const QPointF& worldGround,
double worldZ = 0.0)
const;
307 void _setCenterWorld(
const QPointF& world);
309 void _anchorToScreen(
const QPointF& anchorWorld,
const QPointF& screenPos,
double anchorZ = 0.0);
310 static qreal _normalizedHeading(qreal
heading);
312 QPointF _centerWorld;
313 bool _positioned =
false;
314 QPointF _sceneOrigin;
316 qreal _heading = 0.0;
319 qreal _centerElevation = 0.0;
320 QSizeF _viewportSize;
324 std::optional<QPointF> _panAnchorWorld;
325 double _panAnchorZ = 0.0;
326 std::optional<QPointF> _orbitAnchorWorld;
327 double _orbitAnchorZ = 0.0;
328 QPointF _orbitAnchorScreen;
329 QPointF _orbitStartScreen;
330 qreal _orbitStartHeading = 0.0;
331 qreal _orbitStartTilt = 0.0;
332 std::optional<QPointF> _lookCameraGround;
333 qreal _lookCameraZ = 0.0;
334 QPointF _lookStartScreen;
335 qreal _lookStartHeading = 0.0;
336 qreal _lookStartTilt = 0.0;
qreal default3DTilt() const
Q_INVOKABLE void panTo(const QPointF &screenPos)
Continue a pan gesture: the surface point picked at beginPan stays under the cursor.
void unitsPerPixelAtUnitDistanceChanged()
Q_INVOKABLE QGeoCoordinate coordinateAtScreenPoint(const QPointF &screenPos, double worldZ=0.0) const
QSizeF viewportSize() const
void centerElevationChanged()
qreal unitsPerPixelAtUnitDistance() const
void setCenterElevation(qreal elevation)
Q_INVOKABLE void beginPan(const QPointF &screenPos, double anchorZ=0.0)
Q_INVOKABLE qreal zoomLevelForDistance(qreal distance) const
Q_INVOKABLE void lookTo(const QPointF &screenPos)
void setFieldOfView(qreal fov)
std::optional< QPointF > worldToScreen(const QPointF &worldGround, double worldZ=0.0) const
Q_INVOKABLE void goTo2D()
qreal fieldOfView() const
static constexpr qreal kMinTilt
void verticalFieldOfViewChanged()
QPointF cameraGroundPosition() const
Q_INVOKABLE void fitToRegion(const QGeoRectangle ®ion)
Q_INVOKABLE qreal sceneUnitsPerPixel() const
Q_INVOKABLE void zoom(qreal amount, const QPointF &screenPos)
void setCenter(const QGeoCoordinate ¢er)
static constexpr qreal kDefault3DTilt
qreal centerElevation() const
static constexpr qreal kMinDistance
void setSceneOrigin(const QPointF &origin)
Q_INVOKABLE void beginLook(const QPointF &screenPos)
Start a first-person look gesture at the given screen position (pixels)
void fieldOfViewChanged()
Q_INVOKABLE void zoomBy(qreal factor, const QPointF &screenPos)
Q_INVOKABLE void beginOrbit(const QPointF &screenPos, double anchorZ=0.0)
Start an orbit gesture at the given screen position (pixels); anchorZ as in beginPan.
Q_INVOKABLE void orbitTo(const QPointF &screenPos)
qreal verticalFieldOfView() const
void setDistance(qreal distance)
Q_INVOKABLE void lookAt(const QGeoCoordinate ¢er, qreal heading, qreal tilt, qreal distance)
Set the full pose in one call. tilt/distance are clamped.
bool isPositioned() const
std::optional< QPointF > screenToGround(const QPointF &screenPos, double planeZ=0.0) const
QVector3D cameraPosition() const
Q_INVOKABLE void goTo3D()
void setHeading(qreal heading)
QVector3D scenePosition() const
void setViewportSize(const QSizeF &size)
void viewportSizeChanged()
static constexpr qreal kDefaultDistance
Q_INVOKABLE void reset()
Restore the default pose at the current center (heading 0, tilt 0, default distance)
QPointF sceneOrigin() const
static constexpr qreal kMaxTilt
Q_INVOKABLE void tiltBy(qreal degrees, const QPointF &screenPos)
static constexpr qreal kDefaultFieldOfView
std::optional< QPointF > groundPointCapped(const QPointF &screenPos, double maxRange) const
Q_INVOKABLE void rotateBy(qreal degrees, const QPointF &screenPos)
std::optional< PickRay > pickRayAt(const QPointF &screenPos) const
Q_INVOKABLE qreal distanceForZoomLevel(qreal zoomLevel) const
Q_INVOKABLE QGeoCoordinate centerForCoordinateAtScreenPoint(const QGeoCoordinate &coordinate, const QPointF &screenPos, double worldZ=0.0, double centerElevation=qQNaN()) const
QGeoCoordinate center() const
static constexpr qreal kMaxDistance
QQuaternion sceneRotation() const