6#ifndef QDECLARATIVECIRCLEMAPITEM_P_P_H
7#define QDECLARATIVECIRCLEMAPITEM_P_P_H
20#include <QtLocation/private/qlocationglobal_p.h>
21#include <QtLocation/private/qdeclarativepolygonmapitem_p_p.h>
22#include <QtLocation/private/qdeclarativecirclemapitem_p.h>
32 QGeoMapCircleGeometry();
34 void updateSourceAndScreenPointsInvert(
const QList<QDoubleVector2D> &circlePath,
const QGeoMap &map);
39 Q_DISABLE_COPY_MOVE(QDeclarativeCircleMapItemPrivate)
41 static const int CircleSamples = 128;
57 virtual bool contains(
const QPointF &point)
const = 0;
61 if (!m_circle.map() || m_circle.map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
65 const QGeoProjectionWebMercator &p =
static_cast<
const QGeoProjectionWebMercator&>(m_circle.map()->geoProjection());
66 if (m_circle.referenceSurface() == QLocation::ReferenceSurface::Map)
67 calculatePeripheralPointsSimple(m_circlePath, m_circle.center(), m_circle.radius(), p, CircleSamples);
69 calculatePeripheralPointsGreatCircle(m_circlePath, m_circle.center(), m_circle.radius(), p, CircleSamples);
72 static int crossEarthPole(
const QGeoCoordinate ¢er, qreal distance);
75 qreal distance,
const QGeoProjectionWebMercator &p);
78 qreal distance,
const QGeoProjectionWebMercator &p,
int steps);
81 qreal distance,
const QGeoProjectionWebMercator &p,
int steps);
90 QDeclarativeCircleMapItemPrivateCPU(QDeclarativeCircleMapItem &circle);
91 ~QDeclarativeCircleMapItemPrivateCPU() override;
93 void onLinePropertiesChanged() override
96 markSourceDirtyAndUpdate();
98 void markSourceDirtyAndUpdate() override
100 m_geometry.markSourceDirty();
101 m_circle.polishAndUpdate();
103 void onMapSet() override
106 markSourceDirtyAndUpdate();
108 void onGeoGeometryChanged() override
111 markSourceDirtyAndUpdate();
113 void onItemGeometryChanged() override
115 onGeoGeometryChanged();
117 void afterViewportChanged() override
119 markSourceDirtyAndUpdate();
121 void updatePolish() override;
122 QSGNode * updateMapItemPaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) override;
123 bool contains(
const QPointF &point)
const override;
125 QGeoMapCircleGeometry m_geometry;
126 QQuickShape *m_shape =
nullptr;
127 QQuickShapePath *m_shapePath =
nullptr;
128 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