27 qCDebug(GeoMapGeoSceneLog) <<
"camera" << (
camera ?
"set" :
"cleared");
29 disconnect(_camera,
nullptr,
this,
nullptr);
36 connect(_camera, &QObject::destroyed,
this, [
this] {
55 if (qFuzzyCompare(scale, _terrainScale)) {
58 _terrainScale = scale;
64 if (node == _content3D) {
67 qCDebug(GeoMapGeoSceneLog) <<
"content3D" << (node ?
"set" :
"cleared");
69 disconnect(_content3D,
nullptr,
this,
nullptr);
73 connect(_content3D, &QObject::destroyed,
this, [
this] {
84 const double altitude = std::isfinite(coordinate.altitude()) ? coordinate.altitude() : 0.0;
85 return QVector3D(
static_cast<float>(world.x() - _origin.x()),
static_cast<float>(world.y() - _origin.y()),
95 const double altitude = std::isfinite(coordinate.altitude()) ? coordinate.altitude() : 0.0;
97 return screen ? QVariant(*screen) : QVariant();
101 double centerElevation)
const
106 const double altitude = std::isfinite(coordinate.altitude()) ? coordinate.altitude() : 0.0;
107 const double pivotElevation =
108 std::isfinite(centerElevation) ? centerElevation *
verticalScale() * _terrainScale : centerElevation;
113void GeoScene::_maybeReanchor()
120 const QPointF offset = cameraWorld - _origin;
125 _origin = cameraWorld;
127 qCDebug(GeoMapGeoSceneLog) <<
"scene origin re-anchored to" << _origin;
#define QGC_LOGGING_CATEGORY(name, categoryStr)
std::optional< QPointF > worldToScreen(const QPointF &worldGround, double worldZ=0.0) const
Q_INVOKABLE QGeoCoordinate centerForCoordinateAtScreenPoint(const QGeoCoordinate &coordinate, const QPointF &screenPos, double worldZ=0.0, double centerElevation=qQNaN()) const
QGeoCoordinate center() const
Q_INVOKABLE QGeoCoordinate centerForCoordinateAtScreenPoint(const QGeoCoordinate &coordinate, const QPointF &screenPos, double centerElevation=qQNaN()) const
qreal verticalScale() const
void sceneOriginChanged()
void terrainScaleChanged()
void setTerrainScale(qreal scale)
static constexpr double kReanchorDistance
scene-origin re-anchor threshold (m)
Q_INVOKABLE QVector3D scenePositionFor(const QGeoCoordinate &coordinate) const
void setContent3D(QObject *node)
GeoMapCamera * camera() const
void setCamera(GeoMapCamera *camera)
Q_INVOKABLE QVariant screenPositionFor(const QGeoCoordinate &coordinate) const
QPointF geoToWorld(const QGeoCoordinate &coord)
Geo -> world meters. Latitude is clamped to +/-kMaxLatitude.
double mercatorScale(double latitude)
QGeoCoordinate worldToGeo(const QPointF &world)
World meters -> geo (altitude 0)