From fabea2739711a27f0b53f614476a098a5137a5a5 Mon Sep 17 00:00:00 2001 From: David Laing Date: Tue, 14 Feb 2012 10:49:10 +1000 Subject: Cleans up the QGeoCameraData class. There were some fields that were unused or only used for debugging the prototype of the library which are no longer needed. This removes those fields and renames zoomFactor to zoomLevel - "zoomLevel" is a better name for it, but we need the double type / semantics of zoomFactor. Change-Id: I32ba97ca1b4bccfe33b86c8eccd2c94b12079d2e Reviewed-by: Alex Wilson --- src/location/maps/qgeocameradata.cpp | 74 +++------------------------ src/location/maps/qgeocameradata_p.h | 13 +---- src/location/maps/qgeocameratiles.cpp | 91 ++++++++++----------------------- src/location/maps/qgeocameratiles_p.h | 7 ++- src/location/maps/qgeomap.cpp | 9 ++-- src/location/maps/qgeomapcontroller.cpp | 10 ++-- src/location/maps/qgeomapgeometry.cpp | 91 ++++++++++++++++----------------- 7 files changed, 92 insertions(+), 203 deletions(-) (limited to 'src/location/maps') diff --git a/src/location/maps/qgeocameradata.cpp b/src/location/maps/qgeocameradata.cpp index 9ce169dd..54bb08ea 100644 --- a/src/location/maps/qgeocameradata.cpp +++ b/src/location/maps/qgeocameradata.cpp @@ -62,13 +62,10 @@ public: bool operator == (const QGeoCameraDataPrivate &rhs) const; QGeoCoordinate center_; - double distance_; double bearing_; double tilt_; double roll_; - double aspectRatio_; - int zoomLevel_; - double zoomFactor_; + double zoomLevel_; QWeakPointer interpolator_; }; @@ -76,36 +73,27 @@ public: QGeoCameraDataPrivate::QGeoCameraDataPrivate() : QSharedData(), center_(-27.5, 153), - distance_(0.0), bearing_(0.0), tilt_(0.0), roll_(0.0), - aspectRatio_(1.0), - zoomLevel_(9), - zoomFactor_(9.0) {} + zoomLevel_(9.0) {} QGeoCameraDataPrivate::QGeoCameraDataPrivate(const QGeoCameraDataPrivate &rhs) : QSharedData(rhs), center_(rhs.center_), - distance_(rhs.distance_), bearing_(rhs.bearing_), tilt_(rhs.tilt_), roll_(rhs.roll_), - aspectRatio_(rhs.aspectRatio_), zoomLevel_(rhs.zoomLevel_), - zoomFactor_(rhs.zoomFactor_), interpolator_(rhs.interpolator_) {} QGeoCameraDataPrivate& QGeoCameraDataPrivate::operator = (const QGeoCameraDataPrivate &rhs) { center_ = rhs.center_; - distance_ = rhs.distance_; bearing_ = rhs.bearing_; tilt_ = rhs.tilt_; roll_ = rhs.roll_; - aspectRatio_ = rhs.aspectRatio_; zoomLevel_ = rhs.zoomLevel_; - zoomFactor_ = rhs.zoomFactor_; QSharedPointer i = rhs.interpolator_.toStrongRef(); if (i) interpolator_ = i.toWeakRef(); @@ -118,13 +106,10 @@ QGeoCameraDataPrivate& QGeoCameraDataPrivate::operator = (const QGeoCameraDataPr bool QGeoCameraDataPrivate::operator == (const QGeoCameraDataPrivate &rhs) const { return ((center_ == rhs.center_) - && (distance_ == rhs.distance_) && (bearing_ == rhs.bearing_) && (tilt_ == rhs.tilt_) && (roll_ == rhs.roll_) - && (aspectRatio_ == rhs.aspectRatio_) - && (zoomLevel_ == rhs.zoomLevel_) - && (zoomFactor_ == rhs.zoomFactor_)); + && (zoomLevel_ == rhs.zoomLevel_)); } QVariant cameraInterpolator(const QGeoCameraData &start, @@ -149,7 +134,7 @@ QVariant cameraInterpolator(const QGeoCameraData &start, result.setBearing(sf * start.bearing() + ef * end.bearing()); result.setTilt(sf * start.tilt() + ef * end.tilt()); result.setRoll(sf * start.roll() + ef * end.roll()); - result.setZoomFactor(sf * start.zoomFactor() + ef * end.zoomFactor()); + result.setZoomLevel(sf * start.zoomLevel() + ef * end.zoomLevel()); return QVariant::fromValue(result); } @@ -159,7 +144,6 @@ QGeoCameraData::QGeoCameraData() { qRegisterMetaType(); qRegisterAnimationInterpolator(cameraInterpolator); - setZoomFactor(4.0); } QGeoCameraData::QGeoCameraData(const QGeoCameraData &other) @@ -225,60 +209,16 @@ double QGeoCameraData::roll() const return d->roll_; } -void QGeoCameraData::setAspectRatio(double aspectRatio) +void QGeoCameraData::setZoomLevel(double zoomFactor) { - d->aspectRatio_ = aspectRatio; + d->zoomLevel_ = zoomFactor; } -double QGeoCameraData::aspectRatio() const -{ - return d->aspectRatio_; -} - -/* - Distance and zoomLevel are only writeable for debugging purposes. - The setters will eventually go away and then zoomFactor will be - the way to set these. -*/ - -void QGeoCameraData::setDistance(double distance) -{ - d->zoomFactor_ = -1.0 * log(distance) / log(2.0); - d->distance_ = distance; -} - -double QGeoCameraData::distance() const -{ - return d->distance_; -} - -void QGeoCameraData::setZoomLevel(int zoomLevel) -{ - d->zoomLevel_ = zoomLevel; -} - -int QGeoCameraData::zoomLevel() const +double QGeoCameraData::zoomLevel() const { return d->zoomLevel_; } -void QGeoCameraData::setZoomFactor(double zoomFactor) -{ - d->zoomLevel_ = floor(zoomFactor); -// qDebug() << __FUNCTION__ << zoomFactor << d->zoomLevel_; - - // FIXME this will need some tuning - - d->distance_ = 1.0 / pow(2.0, zoomFactor); - - d->zoomFactor_ = zoomFactor; -} - -double QGeoCameraData::zoomFactor() const -{ - return d->zoomFactor_; -} - void QGeoCameraData::setCoordinateInterpolator(QSharedPointer interpolator) { d->interpolator_ = interpolator.toWeakRef(); diff --git a/src/location/maps/qgeocameradata_p.h b/src/location/maps/qgeocameradata_p.h index 675e55ba..46822a3a 100644 --- a/src/location/maps/qgeocameradata_p.h +++ b/src/location/maps/qgeocameradata_p.h @@ -90,17 +90,8 @@ public: void setRoll(double roll); double roll() const; - void setAspectRatio(double aspectRatio); - double aspectRatio() const; - - void setDistance(double distance); - double distance() const; - - void setZoomLevel(int zoomLevel); - int zoomLevel() const; - - void setZoomFactor(double zoomFactor); - double zoomFactor() const; + void setZoomLevel(double zoomLevel); + double zoomLevel() const; void setCoordinateInterpolator(QSharedPointer interpolator); QSharedPointer coordinateInterpolator() const; diff --git a/src/location/maps/qgeocameratiles.cpp b/src/location/maps/qgeocameratiles.cpp index 19f40799..87eff04d 100644 --- a/src/location/maps/qgeocameratiles.cpp +++ b/src/location/maps/qgeocameratiles.cpp @@ -83,14 +83,12 @@ public: int maxZoom_; QSet tiles_; - QSet tilesLeft_; - QSet tilesRight_; + int intZoomLevel_; + int sideLength_; void updateMetadata(); void updateGeometry(); - double sideLength() const; - Frustum frustum() const; class LengthSorter { @@ -140,6 +138,10 @@ void QGeoCameraTiles::setCamera(const QGeoCameraData &camera) return; d->camera_ = camera; + + d->intZoomLevel_ = static_cast(floor(d->camera_.zoomLevel())); + d->sideLength_ = 1 << d->intZoomLevel_; + d->updateGeometry(); } @@ -204,15 +206,11 @@ QSet QGeoCameraTiles::tiles() const return d->tiles_; } -QPair, QSet > QGeoCameraTiles::tilesSplitByDateline() const -{ - Q_D(const QGeoCameraTiles); - return QPair, QSet >(d->tilesLeft_, d->tilesRight_); -} - QGeoCameraTilesPrivate::QGeoCameraTilesPrivate() : tileSize_(0), - maxZoom_(0) {} + maxZoom_(0), + intZoomLevel_(0), + sideLength_(0) {} QGeoCameraTilesPrivate::~QGeoCameraTilesPrivate() {} @@ -231,37 +229,11 @@ void QGeoCameraTilesPrivate::updateMetadata() } tiles_ = newTiles; - - newTiles.clear(); - - i = tilesLeft_.constBegin(); - end = tilesLeft_.constEnd(); - - for (; i != end; ++i) { - QGeoTileSpec tile = *i; - newTiles.insert(QGeoTileSpec(pluginString_, mapType_.mapId(), tile.zoom(), tile.x(), tile.y())); - } - - tilesLeft_ = newTiles; - - newTiles.clear(); - - i = tilesRight_.constBegin(); - end = tilesRight_.constEnd(); - - for (; i != end; ++i) { - QGeoTileSpec tile = *i; - newTiles.insert(QGeoTileSpec(pluginString_, mapType_.mapId(), tile.zoom(), tile.x(), tile.y())); - } - - tilesRight_ = newTiles; } void QGeoCameraTilesPrivate::updateGeometry() { tiles_.clear(); - tilesLeft_.clear(); - tilesRight_.clear(); // Find the frustum from the camera / screen / viewport information Frustum f = frustum(); @@ -273,31 +245,24 @@ void QGeoCameraTilesPrivate::updateGeometry() QPair polygons = clipFootprintToMap(footprint); if (!polygons.first.isEmpty()) { - tilesLeft_ = tilesFromPolygon(polygons.first); - tiles_.unite(tilesLeft_); + QSet tilesLeft = tilesFromPolygon(polygons.first); + tiles_.unite(tilesLeft); } if (!polygons.second.isEmpty()) { - tilesRight_ = tilesFromPolygon(polygons.second); - tiles_.unite(tilesRight_); + QSet tilesRight = tilesFromPolygon(polygons.second); + tiles_.unite(tilesRight); } } -double QGeoCameraTilesPrivate::sideLength() const -{ - return double(1 << camera_.zoomLevel()); -} - Frustum QGeoCameraTilesPrivate::frustum() const { - int zpow2 = 1 << camera_.zoomLevel(); - - QDoubleVector3D center = zpow2 * QGeoProjection::coordToMercator(camera_.center()); + QDoubleVector3D center = sideLength_ * QGeoProjection::coordToMercator(camera_.center()); center.setZ(0.0); double f = qMin(screenSize_.width(), screenSize_.height()) / (1.0 * tileSize_); - double z = pow(2.0, camera_.zoomFactor() - camera_.zoomLevel()); + double z = pow(2.0, camera_.zoomLevel() - intZoomLevel_); double altitude = f / (2.0 * z); QDoubleVector3D eye = center; @@ -307,7 +272,7 @@ Frustum QGeoCameraTilesPrivate::frustum() const QDoubleVector3D side = QDoubleVector3D::normal(view, QDoubleVector3D(0.0, 1.0, 0.0)); QDoubleVector3D up = QDoubleVector3D::normal(side, view); - double nearPlane = zpow2 / (1.0 * tileSize_ * (1 << maxZoom_)); + double nearPlane = sideLength_ / (1.0 * tileSize_ * (1 << maxZoom_)); double farPlane = 3.0; double aspectRatio = 1.0 * screenSize_.width() / screenSize_.height(); @@ -539,7 +504,7 @@ QPair QGeoCameraTilesPrivate::clipFootprintToMap(const Polygon bool clipY0 = false; bool clipY1 = false; - double side = sideLength(); + double side = 1.0 * sideLength_; typedef Polygon::iterator iter; typedef Polygon::const_iterator const_iter; @@ -635,18 +600,12 @@ QSet QGeoCameraTilesPrivate::tilesFromPolygon(const Polygon &polyg if (numPoints == 0) return QSet(); - int zoomLevel = camera_.zoomLevel(); - int minY = -1; int maxY = -1; - int zpow2 = 1 << zoomLevel; - QVector tilesX(polygon.size()); QVector tilesY(polygon.size()); - double side = sideLength(); - for (int i = 0; i < numPoints; ++i) { QDoubleVector2D p = polygon.at(i).toVector2D(); @@ -654,15 +613,15 @@ QSet QGeoCameraTilesPrivate::tilesFromPolygon(const Polygon &polyg int x = 0; int y = 0; - if (qFuzzyCompare(p.x(), side)) - x = zpow2 - 1; + if (qFuzzyCompare(p.x(), sideLength_ * 1.0)) + x = sideLength_ - 1; else - x = static_cast(p.x()) % zpow2; + x = static_cast(p.x()) % sideLength_; - if (qFuzzyCompare(p.y(), side)) - y = zpow2 - 1; + if (qFuzzyCompare(p.y(), sideLength_ * 1.0)) + y = sideLength_ - 1; else - y = static_cast(p.y()) % zpow2; + y = static_cast(p.y()) % sideLength_; if (minY == -1) { minY = y; @@ -733,13 +692,15 @@ QSet QGeoCameraTilesPrivate::tilesFromPolygon(const Polygon &polyg QSet results; + int z = intZoomLevel_; + int size = map.minX.size(); for (int i = 0; i < size; ++i) { int y = map.minY + i; int minX = map.minX[i]; int maxX = map.maxX[i]; for (int x = minX; x <= maxX; ++x) { - results.insert(QGeoTileSpec(pluginString_, mapType_.mapId(), zoomLevel, x, y)); + results.insert(QGeoTileSpec(pluginString_, mapType_.mapId(), z, x, y)); } } diff --git a/src/location/maps/qgeocameratiles_p.h b/src/location/maps/qgeocameratiles_p.h index 503dbc65..2f3bbbc6 100644 --- a/src/location/maps/qgeocameratiles_p.h +++ b/src/location/maps/qgeocameratiles_p.h @@ -73,14 +73,13 @@ public: void setCamera(const QGeoCameraData &camera); void setScreenSize(const QSize &size); - void setPluginString(const QString &pluginString); - void setMapType(const QGeoMapType &mapType); - void setTileSize(int tileSize); void setMaximumZoomLevel(int maxZoom); + void setPluginString(const QString &pluginString); + void setMapType(const QGeoMapType &mapType); + QSet tiles() const; - QPair, QSet > tilesSplitByDateline() const; private: QGeoCameraTilesPrivate *d_ptr; diff --git a/src/location/maps/qgeomap.cpp b/src/location/maps/qgeomap.cpp index 2cd424fc..84471d0f 100644 --- a/src/location/maps/qgeomap.cpp +++ b/src/location/maps/qgeomap.cpp @@ -278,11 +278,11 @@ void QGeoMapPrivate::setCameraData(const QGeoCameraData &cameraData) if (manager_) { QGeoCameraCapabilities capabilities = manager_->cameraCapabilities(); - if (cameraData_.zoomFactor() < capabilities.minimumZoomLevel()) - cameraData_.setZoomFactor(capabilities.minimumZoomLevel()); + if (cameraData_.zoomLevel() < capabilities.minimumZoomLevel()) + cameraData_.setZoomLevel(capabilities.minimumZoomLevel()); - if (cameraData_.zoomFactor() > capabilities.maximumZoomLevel()) - cameraData_.setZoomFactor(capabilities.maximumZoomLevel()); + if (cameraData_.zoomLevel() > capabilities.maximumZoomLevel()) + cameraData_.setZoomLevel(capabilities.maximumZoomLevel()); if (!capabilities.supportsBearing()) cameraData_.setBearing(0.0); @@ -301,7 +301,6 @@ void QGeoMapPrivate::setCameraData(const QGeoCameraData &cameraData) cameraData_.setRoll(0.0); } - cameraData_.setAspectRatio(aspectRatio_); cameraData_.setCoordinateInterpolator(mapGeometry_->coordinateInterpolator().toWeakRef()); cameraTiles_->setCamera(cameraData_); diff --git a/src/location/maps/qgeomapcontroller.cpp b/src/location/maps/qgeomapcontroller.cpp index e08e3960..842912d7 100644 --- a/src/location/maps/qgeomapcontroller.cpp +++ b/src/location/maps/qgeomapcontroller.cpp @@ -134,8 +134,8 @@ void QGeoMapController::cameraDataChanged(const QGeoCameraData &cameraData) if (oldCameraData_.roll() != cameraData.roll()) emit rollChanged(cameraData.roll()); - if (oldCameraData_.zoomFactor() != cameraData.zoomFactor()) - emit zoomChanged(cameraData.zoomFactor()); + if (oldCameraData_.zoomLevel() != cameraData.zoomLevel()) + emit zoomChanged(cameraData.zoomLevel()); oldCameraData_ = cameraData; } @@ -206,17 +206,17 @@ void QGeoMapController::setRoll(qreal roll) qreal QGeoMapController::zoom() const { - return map_->cameraData().zoomFactor(); + return map_->cameraData().zoomLevel(); } void QGeoMapController::setZoom(qreal zoom) { QGeoCameraData cd = map_->cameraData(); - if (zoom == cd.zoomFactor()) + if (zoom == cd.zoomLevel()) return; - cd.setZoomFactor(zoom); + cd.setZoomLevel(zoom); map_->setCameraData(cd); } diff --git a/src/location/maps/qgeomapgeometry.cpp b/src/location/maps/qgeomapgeometry.cpp index 190d4762..dda47c10 100644 --- a/src/location/maps/qgeomapgeometry.cpp +++ b/src/location/maps/qgeomapgeometry.cpp @@ -133,6 +133,9 @@ public: double scaleFactor_; + int intZoomLevel_; + int sideLength_; + QHash nodes_; int minTileX_; @@ -200,6 +203,8 @@ void QGeoMapGeometry::setCameraData(const QGeoCameraData &cameraData) { Q_D(QGeoMapGeometry); d->cameraData_ = cameraData; + d->intZoomLevel_ = static_cast(floor(d->cameraData_.zoomLevel())); + d->sideLength_ = 1 << d->intZoomLevel_; } void QGeoMapGeometry::setVisibleTiles(const QSet &tiles) @@ -261,6 +266,8 @@ QGeoMapGeometryPrivate::QGeoMapGeometryPrivate() camera_(new QGLCamera()), sceneNode_(new QGLSceneNode()), scaleFactor_(10.0), + intZoomLevel_(0), + sideLength_(0), minTileX_(-1), minTileY_(-1), maxTileX_(-1), @@ -280,37 +287,33 @@ QGeoMapGeometryPrivate::~QGeoMapGeometryPrivate() QDoubleVector2D QGeoMapGeometryPrivate::screenPositionToMercator(const QPointF &pos) const { - int zpow2 = 1 << cameraData_.zoomLevel(); - double x = mercatorWidth_ * (((pos.x() - screenOffsetX_) / screenWidth_) - 0.5); x += mercatorCenterX_; - if (x > 1.0 * zpow2) - x -= 1.0 * zpow2; + if (x > 1.0 * sideLength_) + x -= 1.0 * sideLength_; if (x < 0.0) - x += 1.0 * zpow2; + x += 1.0 * sideLength_; - x /= 1.0 * zpow2; + x /= 1.0 * sideLength_; double y = mercatorHeight_ * (((pos.y() - screenOffsetY_) / screenHeight_) - 0.5); y += mercatorCenterY_; - y /= 1.0 * zpow2; + y /= 1.0 * sideLength_; return QDoubleVector2D(x, y); } QPointF QGeoMapGeometryPrivate::mercatorToScreenPosition(const QDoubleVector2D &mercator) const { - int zpow2 = 1 << cameraData_.zoomLevel(); - - double mx = zpow2 * mercator.x(); + double mx = sideLength_ * mercator.x(); double lb = mercatorCenterX_ - mercatorWidth_ / 2.0; if (lb < 0.0) - lb += zpow2; + lb += sideLength_; double ub = mercatorCenterX_ + mercatorWidth_ / 2.0; - if (zpow2 < ub) - ub -= zpow2; + if (sideLength_ < ub) + ub -= sideLength_; double m = (mx - mercatorCenterX_) / mercatorWidth_; @@ -318,28 +321,27 @@ QPointF QGeoMapGeometryPrivate::mercatorToScreenPosition(const QDoubleVector2D & if (qFuzzyCompare(ub - lb + 1.0, 1.0) || (ub < lb) ) { if (mercatorCenterX_ < ub) { if (lb < mx) { - m = (mx - mercatorCenterX_ - zpow2) / mercatorWidth_; + m = (mx - mercatorCenterX_ - sideLength_) / mercatorWidth_; } } else if (lb < mercatorCenterX_) { if (mx < ub) { - m = (mx - mercatorCenterX_ + zpow2) / mercatorWidth_; + m = (mx - mercatorCenterX_ + sideLength_) / mercatorWidth_; } } } double x = screenWidth_ * (0.5 + m); - double y = screenHeight_ * (0.5 + (zpow2 * mercator.y() - mercatorCenterY_) / mercatorHeight_); + double y = screenHeight_ * (0.5 + (sideLength_ * mercator.y() - mercatorCenterY_) / mercatorHeight_); return QPointF(x + screenOffsetX_, y + screenOffsetY_); } void QGeoMapGeometryPrivate::addTile(const QGeoTileSpec &spec, QGLTexture2D *texture) { - int zpow2 = 1 << cameraData_.zoomLevel(); int x = spec.x(); if (x < tileXWrapsBelow_) - x += zpow2; + x += sideLength_; if ((x < minTileX_) || (maxTileX_ < x) @@ -450,7 +452,6 @@ void QGeoMapGeometryPrivate::setTileBounds() iter i = visibleTiles_.constBegin(); iter end = visibleTiles_.constEnd(); - int zpow2 = 1 << cameraData_.zoomLevel(); bool hasFarLeft = false; bool hasFarRight = false; bool hasMidLeft = false; @@ -460,11 +461,11 @@ void QGeoMapGeometryPrivate::setTileBounds() int x = (*i).x(); if (x == 0) hasFarLeft = true; - else if (x == (zpow2 - 1)) + else if (x == (sideLength_ - 1)) hasFarRight = true; - else if (x == ((zpow2 / 2) - 1)) { + else if (x == ((sideLength_ / 2) - 1)) { hasMidLeft = true; - } else if (x == (zpow2 / 2)) { + } else if (x == (sideLength_ / 2)) { hasMidRight = true; } } @@ -473,9 +474,9 @@ void QGeoMapGeometryPrivate::setTileBounds() if (hasFarLeft && hasFarRight) { if (!hasMidRight) { - tileXWrapsBelow_ = zpow2 / 2; + tileXWrapsBelow_ = sideLength_ / 2; } else if (!hasMidLeft) { - tileXWrapsBelow_ = (zpow2 / 2) - 1; + tileXWrapsBelow_ = (sideLength_ / 2) - 1; } } @@ -485,7 +486,7 @@ void QGeoMapGeometryPrivate::setTileBounds() int x = tile.x(); if (tile.x() < tileXWrapsBelow_) - x += zpow2; + x += sideLength_; minTileX_ = x; maxTileX_ = x; @@ -498,7 +499,7 @@ void QGeoMapGeometryPrivate::setTileBounds() tile = *i; int x = tile.x(); if (tile.x() < tileXWrapsBelow_) - x += zpow2; + x += sideLength_; minTileX_ = qMin(minTileX_, x); maxTileX_ = qMax(maxTileX_, x); @@ -509,11 +510,9 @@ void QGeoMapGeometryPrivate::setTileBounds() void QGeoMapGeometryPrivate::setupCamera() { - int zpow2 = 1 << cameraData_.zoomLevel(); - double f = 1.0 * qMin(screenSize_.width(), screenSize_.height()); - double z = pow(2.0, cameraData_.zoomFactor() - cameraData_.zoomLevel()); + double z = pow(2.0, cameraData_.zoomLevel() - intZoomLevel_); double altitude = scaleFactor_ * f / (4.0 * z); @@ -533,10 +532,10 @@ void QGeoMapGeometryPrivate::setupCamera() double edge = scaleFactor_ * tileSize_; - QDoubleVector3D center = (zpow2 * QGeoProjection::coordToMercator(cameraData_.center())); + QDoubleVector3D center = (sideLength_ * QGeoProjection::coordToMercator(cameraData_.center())); if (center.x() < tileXWrapsBelow_) - center.setX(center.x() + 1.0 * zpow2); + center.setX(center.x() + 1.0 * sideLength_); mercatorCenterX_ = center.x(); mercatorCenterY_ = center.y(); @@ -545,12 +544,12 @@ void QGeoMapGeometryPrivate::setupCamera() center.setY(1.0 * minTileY_ - center.y()); // letter box vertically - if (useVerticalLock_ && (mercatorHeight_ > 1.0 * zpow2)) { - center.setY(-1.0 * zpow2 / 2.0); - mercatorCenterY_ = zpow2 / 2.0; - screenOffsetY_ = screenSize_.height() * (0.5 - zpow2 / (2 * mercatorHeight_)); + if (useVerticalLock_ && (mercatorHeight_ > 1.0 * sideLength_)) { + center.setY(-1.0 * sideLength_ / 2.0); + mercatorCenterY_ = sideLength_ / 2.0; + screenOffsetY_ = screenSize_.height() * (0.5 - sideLength_ / (2 * mercatorHeight_)); screenHeight_ = screenSize_.height() - 2 * screenOffsetY_; - mercatorHeight_ = 1.0 * zpow2; + mercatorHeight_ = 1.0 * sideLength_; verticalLock_ = true; } else { screenOffsetY_ = 0.0; @@ -558,10 +557,10 @@ void QGeoMapGeometryPrivate::setupCamera() verticalLock_ = false; } - if (mercatorWidth_ > 1.0 * zpow2) { - screenOffsetX_ = screenSize_.width() * (0.5 - (zpow2 / (2 * mercatorWidth_))); + if (mercatorWidth_ > 1.0 * sideLength_) { + screenOffsetX_ = screenSize_.width() * (0.5 - (sideLength_ / (2 * mercatorWidth_))); screenWidth_ = screenSize_.width() - 2 * screenOffsetX_; - mercatorWidth_ = 1.0 * zpow2; + mercatorWidth_ = 1.0 * sideLength_; } else { screenOffsetX_ = 0.0; screenWidth_ = screenSize_.width(); @@ -632,32 +631,32 @@ void QGeoMapGeometryPrivate::paintGL(QGLPainter *painter) glDisable(GL_DEPTH_TEST); - double sideLength_ = scaleFactor_ * tileSize_ * (1 << cameraData_.zoomLevel()); + double sideLength = scaleFactor_ * tileSize_ * sideLength_; QDoubleVector3D c = QDoubleVector3D(camera->center()); - c.setX(c.x() + sideLength_); + c.setX(c.x() + sideLength); camera->setCenter(c); QDoubleVector3D e = QDoubleVector3D(camera->eye()); - e.setX(e.x() + sideLength_); + e.setX(e.x() + sideLength); camera->setEye(e); painter->setCamera(camera); painter->projectionMatrix().scale(1, -1, 1); sceneNode_->draw(painter); - c.setX(c.x() - 2 * sideLength_); + c.setX(c.x() - 2 * sideLength); camera->setCenter(c); - e.setX(e.x() - 2 * sideLength_); + e.setX(e.x() - 2 * sideLength); camera->setEye(e); painter->setCamera(camera); painter->projectionMatrix().scale(1, -1, 1); sceneNode_->draw(painter); - c.setX(c.x() + sideLength_); + c.setX(c.x() + sideLength); camera->setCenter(c); - e.setX(e.x() + sideLength_); + e.setX(e.x() + sideLength); camera->setEye(e); painter->setCamera(camera); -- cgit v1.2.1