diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2017-07-19 10:51:16 +0000 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2017-07-19 11:12:56 +0000 |
commit | bf1a14ef70d2e25d91082a4381fa4c8528bcfb5f (patch) | |
tree | 0c60c5bb32a21c1fef37779e61903efd8df46049 /src/location/maps | |
parent | 358344c7249e04e26e011a3da27b87a4564b8dc4 (diff) | |
download | qtlocation-bf1a14ef70d2e25d91082a4381fa4c8528bcfb5f.tar.gz |
Revert "Fix dragging items out of map bounds"
This reverts commit 2ab93acd9751b3ffe2c36a4a0e37dc792686a08f.
Reason being: not passing QNX6 bot
Change-Id: If45fe095b6e6959f7c40e3e0ed7a14d278bbb230
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/location/maps')
-rw-r--r-- | src/location/maps/qgeoprojection.cpp | 57 | ||||
-rw-r--r-- | src/location/maps/qgeoprojection_p.h | 4 |
2 files changed, 6 insertions, 55 deletions
diff --git a/src/location/maps/qgeoprojection.cpp b/src/location/maps/qgeoprojection.cpp index 609fb934..07747a31 100644 --- a/src/location/maps/qgeoprojection.cpp +++ b/src/location/maps/qgeoprojection.cpp @@ -317,13 +317,6 @@ QList<QDoubleVector2D> QGeoProjectionWebMercator::visibleRegion() const return m_visibleRegion; } -QList<QDoubleVector2D> QGeoProjectionWebMercator::projectableRegion() const -{ - if (m_visibleRegionDirty) - const_cast<QGeoProjectionWebMercator *>(this)->updateVisibleRegion(); - return m_projectableRegion; -} - QDoubleVector2D QGeoProjectionWebMercator::viewportToWrappedMapProjection(const QDoubleVector2D &itemPosition) const { double s; @@ -357,8 +350,6 @@ void QGeoProjectionWebMercator::setupCamera() int intZoomLevel = static_cast<int>(std::floor(m_cameraData.zoomLevel())); m_sideLength = (1 << intZoomLevel) * defaultTileSize; m_center = m_centerMercator * m_sideLength; - //aperture(90 / 2) = 1 - m_aperture = tan(QLocationUtils::radians(m_cameraData.fieldOfView()) * 0.5); double f = m_viewportHeight; double z = std::pow(2.0, m_cameraData.zoomLevel() - intZoomLevel) * defaultTileSize; @@ -367,13 +358,15 @@ void QGeoProjectionWebMercator::setupCamera() double z_mercator = std::pow(2.0, m_cameraData.zoomLevel()) * defaultTileSize; double altitude_mercator = f / (2.0 * z_mercator); + //aperture(90 / 2) = 1 + m_aperture = tan(QLocationUtils::radians(m_cameraData.fieldOfView()) * 0.5); // calculate eye m_eye = m_center; m_eye.setZ(altitude * defaultTileSize / m_aperture); // And in mercator space m_eyeMercator = m_centerMercator; - m_eyeMercator.setZ(altitude_mercator / m_aperture); + m_eyeMercator.setZ(altitude_mercator); m_view = m_eye - m_center; QDoubleVector3D side = QDoubleVector3D::normal(m_view, QDoubleVector3D(0.0, 1.0, 0.0)); @@ -409,7 +402,7 @@ void QGeoProjectionWebMercator::setupCamera() m_eyeMercator = mTiltMercator * m_viewMercator + m_centerMercator; } - m_view = m_eye - m_center; // ToDo: this should be inverted (center - eye), and the rest should follow + m_view = m_eye - m_center; m_viewNormalized = m_view.normalized(); m_up = QDoubleVector3D::normal(m_view, m_side); @@ -462,7 +455,7 @@ void QGeoProjectionWebMercator::setupCamera() m_transformation.scale(m_sideLength, m_sideLength, 1.0); m_centerNearPlane = m_eye + m_viewNormalized; - m_centerNearPlaneMercator = m_eyeMercator - m_viewNormalized * m_nearPlaneMercator; + m_centerNearPlaneMercator = m_eyeMercator + m_viewNormalized * m_nearPlaneMercator; // The method does not support tilting angles >= 90.0 or < 0. @@ -512,46 +505,6 @@ void QGeoProjectionWebMercator::updateVisibleRegion() m_visibleRegion.clear(); if (res.size()) m_visibleRegion = QClipperUtils::pathToQList(res[0]); // Intersection between two convex quadrilaterals should always be a single polygon - - m_projectableRegion.clear(); - if (m_cameraData.tilt() == 0) { - m_projectableRegion = mapRect; - } else { - QGeoProjectionWebMercator::Plane nearPlane(m_centerNearPlaneMercator, m_viewNormalized); - Line2D nearPlaneXYIntersection = nearPlane.planeXYIntersection(); - double squareHalfSide = qMax(5.0, nearPlaneXYIntersection.m_point.length()); - QDoubleVector2D viewDirectionProjected = -m_viewNormalized.toVector2D().normalized(); - - - QDoubleVector2D tl = nearPlaneXYIntersection.m_point - - squareHalfSide * nearPlaneXYIntersection.m_direction - + 2 * squareHalfSide * viewDirectionProjected; - QDoubleVector2D tr = nearPlaneXYIntersection.m_point - + squareHalfSide * nearPlaneXYIntersection.m_direction - + 2 * squareHalfSide * viewDirectionProjected; - QDoubleVector2D bl = nearPlaneXYIntersection.m_point - - squareHalfSide * nearPlaneXYIntersection.m_direction; - QDoubleVector2D br = nearPlaneXYIntersection.m_point - + squareHalfSide * nearPlaneXYIntersection.m_direction; - - QList<QDoubleVector2D> projectableRect; - projectableRect.push_back(bl); - projectableRect.push_back(br); - projectableRect.push_back(tr); - projectableRect.push_back(tl); - - - c2t::clip2tri clipperProjectable; - clipperProjectable.clearClipper(); - clipperProjectable.addSubjectPath(QClipperUtils::qListToPath(mapRect), true); - clipperProjectable.addClipPolygon(QClipperUtils::qListToPath(projectableRect)); - - Paths resProjectable = clipperProjectable.execute(c2t::clip2tri::Intersection); - if (resProjectable.size()) - m_projectableRegion = QClipperUtils::pathToQList(resProjectable[0]); // Intersection between two convex quadrilaterals should always be a single polygon - else - m_projectableRegion = viewportRect; - } } /* diff --git a/src/location/maps/qgeoprojection_p.h b/src/location/maps/qgeoprojection_p.h index 76e11af0..7d306eea 100644 --- a/src/location/maps/qgeoprojection_p.h +++ b/src/location/maps/qgeoprojection_p.h @@ -73,7 +73,6 @@ public: virtual bool isProjectable(const QDoubleVector2D &wrappedProjection) const = 0; virtual QList<QDoubleVector2D> visibleRegion() const = 0; - virtual QList<QDoubleVector2D> projectableRegion() const = 0; // Conversion methods for QGeoCoordinate <-> screen. // This currently assumes that the "MapProjection" space is [0, 1][0, 1] for every type of possibly supported map projection @@ -127,7 +126,7 @@ public: bool isProjectable(const QDoubleVector2D &wrappedProjection) const Q_DECL_OVERRIDE; QList<QDoubleVector2D> visibleRegion() const Q_DECL_OVERRIDE; - QList<QDoubleVector2D> projectableRegion() const Q_DECL_OVERRIDE; + inline QDoubleVector2D viewportToWrappedMapProjection(const QDoubleVector2D &itemPosition) const; inline QDoubleVector2D viewportToWrappedMapProjection(const QDoubleVector2D &itemPosition, double &s) const; private: @@ -203,7 +202,6 @@ private: Line2D m_nearPlaneMapIntersection; QList<QDoubleVector2D> m_visibleRegion; - QList<QDoubleVector2D> m_projectableRegion; bool m_visibleRegionDirty; Q_DISABLE_COPY(QGeoProjectionWebMercator) |