5#ifndef QDECLARATIVECIRCLEMAPITEM_P_P_H
6#define QDECLARATIVECIRCLEMAPITEM_P_P_H
19#include <QtLocation/private/qlocationglobal_p.h>
20#include <QtLocation/private/qdeclarativepolygonmapitem_p_p.h>
21#include <QtLocation/private/qdeclarativecirclemapitem_p.h>
31 QGeoMapCircleGeometry();
33 void updateSourceAndScreenPointsInvert(
const QList<QDoubleVector2D> &circlePath,
const QGeoMap &map);
38 Q_DISABLE_COPY_MOVE(QDeclarativeCircleMapItemPrivate)
40 static const int CircleSamples = 128;
56 virtual bool contains(
const QPointF &point)
const = 0;
60 if (!m_circle.map() || m_circle.map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
64 const QGeoProjectionWebMercator &p =
static_cast<
const QGeoProjectionWebMercator&>(m_circle.map()->geoProjection());
65 if (m_circle.referenceSurface() == QLocation::ReferenceSurface::Map)
66 calculatePeripheralPointsSimple(m_circlePath, m_circle.center(), m_circle.radius(), p, CircleSamples);
68 calculatePeripheralPointsGreatCircle(m_circlePath, m_circle.center(), m_circle.radius(), p, CircleSamples);
71 static int crossEarthPole(
const QGeoCoordinate ¢er, qreal distance);
74 qreal distance,
const QGeoProjectionWebMercator &p);
77 qreal distance,
const QGeoProjectionWebMercator &p,
int steps);
80 qreal distance,
const QGeoProjectionWebMercator &p,
int steps);
89 QDeclarativeCircleMapItemPrivateCPU(QDeclarativeCircleMapItem &circle);
90 ~QDeclarativeCircleMapItemPrivateCPU() override;
92 void onLinePropertiesChanged() override
95 markSourceDirtyAndUpdate();
97 void markSourceDirtyAndUpdate() override
99 m_geometry.markSourceDirty();
100 m_circle.polishAndUpdate();
102 void onMapSet() override
105 markSourceDirtyAndUpdate();
107 void onGeoGeometryChanged() override
110 markSourceDirtyAndUpdate();
112 void onItemGeometryChanged() override
114 onGeoGeometryChanged();
116 void afterViewportChanged() override
118 markSourceDirtyAndUpdate();
120 void updatePolish() override;
121 QSGNode * updateMapItemPaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) override;
122 bool contains(
const QPointF &point)
const override;
124 QGeoMapCircleGeometry m_geometry;
125 QQuickShape *m_shape =
nullptr;
126 QQuickShapePath *m_shapePath =
nullptr;
127 QDeclarativeGeoMapPainterPath *m_painterPath =
nullptr;
static void calculatePeripheralPointsGreatCircle(QList< QDoubleVector2D > &path, const QGeoCoordinate ¢er, qreal distance, const QGeoProjectionWebMercator &p, int steps)
virtual void afterViewportChanged()=0
static void calculatePeripheralPointsSimple(QList< QDoubleVector2D > &path, const QGeoCoordinate ¢er, qreal distance, const QGeoProjectionWebMercator &p, int steps)
virtual ~QDeclarativeCircleMapItemPrivate()
virtual void onMapSet()=0
virtual void updatePolish()=0
QDeclarativeCircleMapItem & m_circle
virtual QSGNode * updateMapItemPaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data)=0
virtual void onItemGeometryChanged()=0
static void includeOnePoleInPath(QList< QDoubleVector2D > &path, const QGeoCoordinate ¢er, qreal distance, const QGeoProjectionWebMercator &p)
static int crossEarthPole(const QGeoCoordinate ¢er, qreal distance)
QList< QDoubleVector2D > m_circlePath
virtual void onGeoGeometryChanged()=0
virtual bool contains(const QPointF &point) const =0
virtual void onLinePropertiesChanged()=0
virtual void markSourceDirtyAndUpdate()=0