• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • lib
  • marble
  • graphicsview
BillboardGraphicsItem.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2012 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
9 // Copyright 2012 Mohammed Nafees <nafees.technocool@gmail.com>
10 //
11 
12 // self
13 #include "BillboardGraphicsItem.h"
14 #include "MarbleGraphicsItem_p.h"
15 
16 // Marble
17 #include "ViewportParams.h"
18 
19 namespace Marble
20 {
21 
22 class BillboardGraphicsItem::Private : public MarbleGraphicsItemPrivate
23 {
24  public:
25  Private( BillboardGraphicsItem *parent ) :
26  MarbleGraphicsItemPrivate( parent ),
27  m_alignment( Qt::AlignHCenter | Qt::AlignVCenter )
28  {
29  }
30 
31  QList<QPointF> positions() const
32  {
33  return m_positions;
34  }
35 
36  QList<QPointF> absolutePositions() const
37  {
38  return m_positions;
39  }
40 
41  Qt::Alignment m_alignment;
42 
43  void setProjection( const ViewportParams *viewport )
44  {
45  m_positions.clear();
46 
47  qreal x[100], y;
48  int pointRepeatNumber = 0;
49  bool globeHidesPoint;
50 
51  QRect const viewportRect = viewport->mapRegion().boundingRect();
52  viewport->screenCoordinates( m_coordinates, x, y, pointRepeatNumber,
53  m_size, globeHidesPoint );
54  if ( !globeHidesPoint ) {
55  for( int i = 0; i < pointRepeatNumber; ++i ) {
56  // Handle vertical alignment
57  qint32 topY = ( viewport->height() - m_size.height() ) / 2;
58  if ( m_alignment & Qt::AlignTop ) {
59  topY = y - m_size.height();
60  } else if ( m_alignment & Qt::AlignVCenter ) {
61  topY = y - ( m_size.height() / 2 );
62  } else if ( m_alignment & Qt::AlignBottom ) {
63  topY = y;
64  }
65 
66  // Handle horizontal alignment
67  qint32 leftX = ( viewport->width() - m_size.width() ) / 2;
68  if ( m_alignment & Qt::AlignLeft ) {
69  leftX = x[i] - m_size.width();
70  } else if ( m_alignment & Qt::AlignHCenter ) {
71  leftX = x[i] - ( m_size.width() / 2 );
72  } else if ( m_alignment & Qt::AlignRight ) {
73  leftX = x[i];
74  }
75 
76  QRect const position = QRect( QPoint ( leftX, topY ), m_size.toSize() );
77  if ( position.intersects( viewportRect ) ) {
78  m_positions.append( QPoint( leftX, topY ) );
79  }
80  }
81  }
82  }
83 
84  GeoDataCoordinates m_coordinates;
85  QList<QPointF> m_positions;
86 };
87 
88 BillboardGraphicsItem::BillboardGraphicsItem()
89  : MarbleGraphicsItem( new Private( this ) )
90 {
91 }
92 
93 GeoDataCoordinates BillboardGraphicsItem::coordinate() const
94 {
95  return p()->m_coordinates;
96 }
97 
98 void BillboardGraphicsItem::setCoordinate( const GeoDataCoordinates &coordinates )
99 {
100  p()->m_coordinates = coordinates;
101 }
102 
103 QList<QPointF> BillboardGraphicsItem::positions() const
104 {
105  return p()->positions();
106 }
107 
108 QList<QRectF> BillboardGraphicsItem::boundingRects() const
109 {
110  QList<QRectF> rects;
111  QSizeF const size = p()->m_size;
112  foreach(const QPointF &point, p()->m_positions) {
113  rects << QRectF(point, size);
114  }
115  return rects;
116 }
117 
118 QRectF BillboardGraphicsItem::containsRect( const QPointF &point ) const
119 {
120  foreach( const QRectF &rect, boundingRects() ) {
121  if( rect.contains( point ) )
122  return rect;
123  }
124 
125  return QRectF();
126 }
127 
128 Qt::Alignment BillboardGraphicsItem::alignment() const
129 {
130  return p()->m_alignment;
131 }
132 
133 void BillboardGraphicsItem::setAlignment(Qt::Alignment alignment)
134 {
135  p()->m_alignment = alignment;
136 }
137 
138 BillboardGraphicsItem::Private *BillboardGraphicsItem::p()
139 {
140  return static_cast<Private *>( d );
141 }
142 
143 const BillboardGraphicsItem::Private *BillboardGraphicsItem::p() const
144 {
145  return static_cast<Private *>( d );
146 }
147 
148 } // Marble namespace
BillboardGraphicsItem.h
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
MarbleGraphicsItem_p.h
Marble::BillboardGraphicsItem::positions
QList< QPointF > positions() const
Returns the absolute screen positions of the item.
Definition: BillboardGraphicsItem.cpp:103
Marble::BillboardGraphicsItem::boundingRects
QList< QRectF > boundingRects() const
Returns the absolute screen bounding boxes of the item.
Definition: BillboardGraphicsItem.cpp:108
QRect::intersects
bool intersects(const QRect &rectangle) const
Marble::MarbleGraphicsItem::size
QSizeF size() const
Returns the size of the item.
Definition: MarbleGraphicsItem.cpp:136
QPoint
Qt::Alignment
typedef Alignment
QPointF
Marble::MarbleGraphicsItem::MarbleGraphicsItemPrivate
friend class MarbleGraphicsItemPrivate
Definition: MarbleGraphicsItem.h:36
QRect
Marble::BillboardGraphicsItem::BillboardGraphicsItem
BillboardGraphicsItem()
Definition: BillboardGraphicsItem.cpp:88
QSizeF::toSize
QSize toSize() const
Marble::MarbleGraphicsItem
Definition: MarbleGraphicsItem.h:34
Marble::BillboardGraphicsItem::containsRect
QRectF containsRect(const QPointF &point) const
Returns the rect of one representation of the object that is at the given position.
Definition: BillboardGraphicsItem.cpp:118
QList< QPointF >
Marble::BillboardGraphicsItem::alignment
Qt::Alignment alignment() const
Definition: BillboardGraphicsItem.cpp:128
Marble::MarbleGraphicsItem::d
MarbleGraphicsItemPrivate *const d
Definition: MarbleGraphicsItem.h:144
ViewportParams.h
This file contains the headers for ViewportParams.
QSizeF
QRectF
Marble::BillboardGraphicsItem::coordinate
GeoDataCoordinates coordinate() const
Definition: BillboardGraphicsItem.cpp:93
Marble::MarbleGraphicsItemPrivate::m_size
QSizeF m_size
Definition: MarbleGraphicsItem_p.h:96
QRectF::contains
bool contains(const QPointF &point) const
QSizeF::height
qreal height() const
Marble::BillboardGraphicsItem::setCoordinate
void setCoordinate(const GeoDataCoordinates &coordinates)
Definition: BillboardGraphicsItem.cpp:98
QSizeF::width
qreal width() const
Marble::BillboardGraphicsItem::setAlignment
void setAlignment(Qt::Alignment alignment)
Definition: BillboardGraphicsItem.cpp:133
Marble::MarbleGraphicsItem::setProjection
virtual void setProjection(const ViewportParams *viewport)
Definition: MarbleGraphicsItem.cpp:272
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:38 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal