8#include "BillboardGraphicsItem.h"
9#include "MarbleGraphicsItem_p.h"
17class BillboardGraphicsItemPrivate :
public MarbleGraphicsItemPrivate
20 BillboardGraphicsItemPrivate(BillboardGraphicsItem *parent)
21 : MarbleGraphicsItemPrivate(parent),
38 void setProjection(
const ViewportParams *viewport)
override
43 int pointRepeatNumber = 0;
46 viewport->screenCoordinates( m_coordinates, x, y, pointRepeatNumber,
47 m_size, globeHidesPoint );
50 if (globeHidesPoint)
return;
52 m_positions.reserve(pointRepeatNumber);
54 qint32 topY = ( viewport->height() - m_size.height() ) / 2;
56 topY = y - m_size.height();
59 topY = y - ( m_size.height() / 2 );
65 for (
int i = 0; i < pointRepeatNumber; ++i ) {
67 qint32 leftX = ( viewport->width() - m_size.width() ) / 2;
69 leftX = x[i] - m_size.width();
72 leftX = x[i] - ( m_size.width() / 2 );
78 m_positions.append(
QPoint( leftX, topY ) );
82 GeoDataCoordinates m_coordinates;
86BillboardGraphicsItem::BillboardGraphicsItem()
87 : MarbleGraphicsItem(new BillboardGraphicsItemPrivate(this))
91GeoDataCoordinates BillboardGraphicsItem::coordinate()
const
93 Q_D(
const BillboardGraphicsItem);
94 return d->m_coordinates;
97void BillboardGraphicsItem::setCoordinate(
const GeoDataCoordinates &coordinates )
99 Q_D(BillboardGraphicsItem);
100 d->m_coordinates = coordinates;
106 return d->positions();
114 rects.
reserve(d->m_positions.size());
116 QSizeF const size = d->m_size;
117 for (
const QPointF &point: d->m_positions) {
118 rects <<
QRectF(point, size);
125 for(
const QRectF &rect: boundingRects() ) {
126 if( rect.contains( point ) )
136 return d->m_alignment;
139void BillboardGraphicsItem::setAlignment(
Qt::Alignment alignment)
141 Q_D(BillboardGraphicsItem);
142 d->m_alignment = alignment;
This file contains the headers for ViewportParams.
Base class for all 2D labels (a.k.a.
Binds a QML item to a specific geodetic location in screen coordinates.
void reserve(qsizetype size)