diff options
Diffstat (limited to 'src/location/maps/qgeocameratiles_p_p.h')
-rw-r--r-- | src/location/maps/qgeocameratiles_p_p.h | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/src/location/maps/qgeocameratiles_p_p.h b/src/location/maps/qgeocameratiles_p_p.h new file mode 100644 index 00000000..846d95f2 --- /dev/null +++ b/src/location/maps/qgeocameratiles_p_p.h @@ -0,0 +1,152 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtLocation module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QGEOCAMERATILES_P_P_H +#define QGEOCAMERATILES_P_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qgeocameratiles_p.h" +#include <QtPositioning/private/qwebmercator_p.h> +#include <QtPositioning/private/qdoublevector2d_p.h> +#include <QtPositioning/private/qdoublevector3d_p.h> +#include "qgeomaptype_p.h" +#include "qgeocameradata_p.h" +#include "qgeotilespec_p.h" + +#include <QtCore/qvector.h> +#include <QtCore/qset.h> + +QT_BEGIN_NAMESPACE + +struct Q_LOCATION_PRIVATE_EXPORT Frustum +{ + QDoubleVector3D apex; + QDoubleVector3D topLeftNear; + QDoubleVector3D topLeftFar; + QDoubleVector3D topRightNear; + QDoubleVector3D topRightFar; + QDoubleVector3D bottomLeftNear; + QDoubleVector3D bottomLeftFar; + QDoubleVector3D bottomRightNear; + QDoubleVector3D bottomRightFar; +}; + +typedef QVector<QDoubleVector3D> PolygonVector; + +class Q_LOCATION_PRIVATE_EXPORT QGeoCameraTilesPrivate +{ +public: + struct ClippedFootprint + { + ClippedFootprint() + {} + ClippedFootprint(const PolygonVector &left_, const PolygonVector &mid_, const PolygonVector &right_) + : left(left_), mid(mid_), right(right_) + {} + PolygonVector left; + PolygonVector mid; + PolygonVector right; + }; + + struct TileMap + { + TileMap(); + + void add(int tileX, int tileY); + + QMap<int, QPair<int, int> > data; + }; + + QGeoCameraTilesPrivate(); + ~QGeoCameraTilesPrivate(); + + + void updateMetadata(); + void updateGeometry(); + + Frustum createFrustum(double viewExpansion) const; + PolygonVector frustumFootprint(const Frustum &frustum) const; + + QPair<PolygonVector, PolygonVector> splitPolygonAtAxisValue(const PolygonVector &polygon, int axis, double value) const; + ClippedFootprint clipFootprintToMap(const PolygonVector &footprint) const; + + QList<QPair<double, int> > tileIntersections(double p1, int t1, double p2, int t2) const; + QSet<QGeoTileSpec> tilesFromPolygon(const PolygonVector &polygon) const; + + static QGeoCameraTilesPrivate *get(QGeoCameraTiles *o) { + return o->d_ptr.data(); + } + +public: + QString m_pluginString; + QGeoMapType m_mapType; + int m_mapVersion; + QGeoCameraData m_camera; + QSize m_screenSize; + QRectF m_visibleArea; + int m_tileSize; + QSet<QGeoTileSpec> m_tiles; + + int m_intZoomLevel; + int m_sideLength; + bool m_dirtyGeometry; + bool m_dirtyMetadata; + double m_viewExpansion; + +#ifdef QT_LOCATION_DEBUG + // updateGeometry + ClippedFootprint m_clippedFootprint; + PolygonVector m_frustumFootprint; + Frustum m_frustum; + + // createFrustum + mutable QDoubleVector3D m_createFrustum_center; + mutable QDoubleVector3D m_createFrustum_eye; +#endif +}; + +QT_END_NAMESPACE + +#endif // QGEOCAMERATILES_P_P_H |