• 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
  • geodata
  • data
GeoDataMultiTrack.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 Thibaut Gridel <tgridel@free.fr>
9 
10 #include "GeoDataMultiTrack.h"
11 #include "GeoDataMultiTrack_p.h"
12 
13 #include "GeoDataLineString.h"
14 #include "GeoDataLinearRing.h"
15 #include "GeoDataPoint.h"
16 #include "GeoDataPolygon.h"
17 #include "GeoDataTrack.h"
18 
19 #include "MarbleDebug.h"
20 
21 
22 namespace Marble
23 {
24 
25 GeoDataMultiTrack::GeoDataMultiTrack()
26  : GeoDataGeometry( new GeoDataMultiTrackPrivate )
27 {
28 }
29 
30 GeoDataMultiTrack::GeoDataMultiTrack( const GeoDataGeometry& other )
31  : GeoDataGeometry( other )
32 {
33 }
34 
35 GeoDataMultiTrack::~GeoDataMultiTrack()
36 {
37 }
38 
39 GeoDataMultiTrackPrivate* GeoDataMultiTrack::p()
40 {
41  return static_cast<GeoDataMultiTrackPrivate*>(d);
42 }
43 
44 const GeoDataMultiTrackPrivate* GeoDataMultiTrack::p() const
45 {
46  return static_cast<GeoDataMultiTrackPrivate*>(d);
47 }
48 
49 
50 bool GeoDataMultiTrack::operator==( const GeoDataMultiTrack& other ) const
51 {
52  if ( !equals(other) ) return false;
53 
54  QVector<GeoDataTrack*>::const_iterator d_it = p()->m_vector.constBegin();
55  QVector<GeoDataTrack*>::const_iterator d_end = p()->m_vector.constEnd();
56  QVector<GeoDataTrack*>::const_iterator other_it = other.p()->m_vector.constBegin();
57  QVector<GeoDataTrack*>::const_iterator other_end = other.p()->m_vector.constEnd();
58 
59 
60  for (; d_it != d_end && other_it != other_end; ++d_it, ++other_it) {
61  if ( **d_it != **other_it ) return false;
62  }
63 
64  return d_it == d_end && other_it == other_end;
65 }
66 
67 bool GeoDataMultiTrack::operator!=( const GeoDataMultiTrack& other ) const
68 {
69  return !this->operator==( other );
70 }
71 
72 const GeoDataLatLonAltBox& GeoDataMultiTrack::latLonAltBox() const
73 {
74  QVector<GeoDataTrack*>::const_iterator it = p()->m_vector.constBegin();
75  QVector<GeoDataTrack*>::const_iterator end = p()->m_vector.constEnd();
76 
77  p()->m_latLonAltBox.clear();
78  for (; it != end; ++it) {
79  if ( !(*it)->latLonAltBox().isEmpty() ) {
80  if ( p()->m_latLonAltBox.isEmpty() ) {
81  p()->m_latLonAltBox = (*it)->latLonAltBox();
82  }
83  else {
84  p()->m_latLonAltBox |= (*it)->latLonAltBox();
85  }
86  }
87  }
88  return p()->m_latLonAltBox;
89 }
90 
91 int GeoDataMultiTrack::size() const
92 {
93  return p()->m_vector.size();
94 }
95 
96 QVector<GeoDataTrack> GeoDataMultiTrack::vector() const
97 {
98  QVector<GeoDataTrack> results;
99 
100  QVector<GeoDataTrack*>::const_iterator it = p()->m_vector.constBegin();
101  QVector<GeoDataTrack*>::const_iterator end = p()->m_vector.constEnd();
102 
103  for (; it != end; ++it) {
104  GeoDataTrack f = **it;
105  results.append( f );
106  }
107 
108  return results;
109 }
110 
111 GeoDataTrack& GeoDataMultiTrack::at( int pos )
112 {
113  mDebug() << "detaching!";
114  detach();
115  return *(p()->m_vector[ pos ]);
116 }
117 
118 const GeoDataTrack& GeoDataMultiTrack::at( int pos ) const
119 {
120  return *(p()->m_vector.at( pos ));
121 }
122 
123 GeoDataTrack& GeoDataMultiTrack::operator[]( int pos )
124 {
125  detach();
126  return *(p()->m_vector[ pos ]);
127 }
128 
129 const GeoDataTrack& GeoDataMultiTrack::operator[]( int pos ) const
130 {
131  return *(p()->m_vector[ pos ]);
132 }
133 
134 GeoDataTrack& GeoDataMultiTrack::last()
135 {
136  detach();
137  return *(p()->m_vector.last());
138 }
139 
140 GeoDataTrack& GeoDataMultiTrack::first()
141 {
142  detach();
143  return *(p()->m_vector.first());
144 }
145 
146 const GeoDataTrack& GeoDataMultiTrack::last() const
147 {
148  return *(p()->m_vector.last());
149 }
150 
151 const GeoDataTrack& GeoDataMultiTrack::first() const
152 {
153  return *(p()->m_vector.first());
154 }
155 
156 QVector<GeoDataTrack*>::Iterator GeoDataMultiTrack::begin()
157 {
158  detach();
159  return p()->m_vector.begin();
160 }
161 
162 QVector<GeoDataTrack*>::Iterator GeoDataMultiTrack::end()
163 {
164  detach();
165  return p()->m_vector.end();
166 }
167 
168 QVector<GeoDataTrack*>::ConstIterator GeoDataMultiTrack::constBegin() const
169 {
170  return p()->m_vector.constBegin();
171 }
172 
173 QVector<GeoDataTrack*>::ConstIterator GeoDataMultiTrack::constEnd() const
174 {
175  return p()->m_vector.constEnd();
176 }
177 
181 GeoDataTrack* GeoDataMultiTrack::child( int i )
182 {
183  return p()->m_vector.at( i );
184 }
185 
186 const GeoDataTrack* GeoDataMultiTrack::child( int i ) const
187 {
188  return p()->m_vector.at( i );
189 }
190 
194 int GeoDataMultiTrack::childPosition( const GeoDataTrack *object ) const
195 {
196  for ( int i=0; i< p()->m_vector.size(); i++ )
197  {
198  if ( p()->m_vector.at( i ) == object )
199  {
200  return i;
201  }
202  }
203  return -1;
204 }
205 
209 void GeoDataMultiTrack::append( GeoDataTrack *other )
210 {
211  detach();
212  other->setParent( this );
213  p()->m_vector.append( other );
214 }
215 
216 
217 GeoDataMultiTrack& GeoDataMultiTrack::operator << ( const GeoDataTrack& value )
218 {
219  detach();
220  GeoDataTrack *g = new GeoDataTrack( value );
221  g->setParent( this );
222  p()->m_vector.append( g );
223  return *this;
224 }
225 
226 void GeoDataMultiTrack::clear()
227 {
228  detach();
229  qDeleteAll(p()->m_vector);
230  p()->m_vector.clear();
231 }
232 
233 void GeoDataMultiTrack::pack( QDataStream& stream ) const
234 {
235  GeoDataGeometry::pack( stream );
236 
237  stream << p()->m_vector.size();
238 
239  for( QVector<GeoDataTrack*>::const_iterator iterator
240  = p()->m_vector.constBegin();
241  iterator != p()->m_vector.constEnd();
242  ++iterator ) {
243  const GeoDataTrack *geometry = *iterator;
244  stream << geometry->geometryId();
245  geometry->pack( stream );
246  }
247 }
248 
249 void GeoDataMultiTrack::unpack( QDataStream& stream )
250 {
251  detach();
252  GeoDataGeometry::unpack( stream );
253 
254  int size = 0;
255 
256  stream >> size;
257 
258  for( int i = 0; i < size; i++ ) {
259  int geometryId;
260  stream >> geometryId;
261  switch( geometryId ) {
262  case InvalidGeometryId:
263  break;
264  case GeoDataTrackId:
265  {
266  GeoDataTrack *track = new GeoDataTrack;
267  track->unpack( stream );
268  p()->m_vector.append( track );
269  }
270  break;
271  case GeoDataModelId:
272  break;
273  default: break;
274  };
275  }
276 }
277 
278 }
Marble::GeoDataMultiTrack::operator==
bool operator==(const GeoDataMultiTrack &other) const
Definition: GeoDataMultiTrack.cpp:50
Marble::GeoDataMultiTrackPrivate
Definition: GeoDataMultiTrack_p.h:21
Marble::GeoDataMultiTrack::child
GeoDataTrack * child(int)
returns the requested child item
Definition: GeoDataMultiTrack.cpp:181
Marble::GeoDataMultiTrack::vector
QVector< GeoDataTrack > vector() const
Definition: GeoDataMultiTrack.cpp:96
Marble::GeoDataMultiTrack
Definition: GeoDataMultiTrack.h:25
Marble::GeoDataGeometry::unpack
virtual void unpack(QDataStream &stream)
Unserialize the contents of the feature from stream.
Definition: GeoDataGeometry.cpp:135
Marble::GeoDataTrack
A geometry for tracking objects made of (time, coordinates) pairs.
Definition: GeoDataTrack.h:54
Marble::GeoDataLatLonBox::isEmpty
virtual bool isEmpty() const
Indicates whether the bounding box is not initialised (and contains nothing).
Definition: GeoDataLatLonBox.cpp:768
Marble::GeoDataMultiTrack::last
GeoDataTrack & last()
Definition: GeoDataMultiTrack.cpp:134
Marble::GeoDataMultiTrack::size
int size() const
Definition: GeoDataMultiTrack.cpp:91
QVector::append
void append(const T &value)
Marble::GeoDataTrack::pack
virtual void pack(QDataStream &stream) const
Serialize the contents of the feature to stream.
Definition: GeoDataTrack.cpp:294
GeoDataPolygon.h
QDataStream
Marble::GeoDataMultiTrack::begin
QVector< GeoDataTrack * >::Iterator begin()
Definition: GeoDataMultiTrack.cpp:156
Marble::GeoDataMultiTrack::append
void append(GeoDataTrack *other)
add an element
Definition: GeoDataMultiTrack.cpp:209
Marble::GeoDataMultiTrack::latLonAltBox
virtual const GeoDataLatLonAltBox & latLonAltBox() const
Definition: GeoDataMultiTrack.cpp:72
Marble::GeoDataGeometry
A base class for all geodata features.
Definition: GeoDataGeometry.h:47
Marble::GeoDataGeometry::detach
void detach()
Definition: GeoDataGeometry.cpp:54
Marble::GeoDataMultiTrack::at
GeoDataTrack & at(int pos)
Definition: GeoDataMultiTrack.cpp:111
Marble::GeoDataMultiTrack::operator!=
bool operator!=(const GeoDataMultiTrack &other) const
Definition: GeoDataMultiTrack.cpp:67
MarbleDebug.h
Marble::GeoDataMultiTrack::first
GeoDataTrack & first()
Definition: GeoDataMultiTrack.cpp:140
Marble::GeoDataMultiTrack::unpack
virtual void unpack(QDataStream &stream)
Unserialize the contents of the feature from stream.
Definition: GeoDataMultiTrack.cpp:249
GeoDataTrack.h
Marble::GeoDataGeometry::pack
virtual void pack(QDataStream &stream) const
Serialize the contents of the feature to stream.
Definition: GeoDataGeometry.cpp:127
Marble::GeoDataTrack::unpack
virtual void unpack(QDataStream &stream)
Unserialize the contents of the feature from stream.
Definition: GeoDataTrack.cpp:299
Marble::GeoDataObject::setParent
virtual void setParent(GeoDataObject *parent)
Sets the parent of the object.
Definition: GeoDataObject.cpp:70
Marble::GeoDataMultiTrack::end
QVector< GeoDataTrack * >::Iterator end()
Definition: GeoDataMultiTrack.cpp:162
Marble::GeoDataMultiTrack::operator[]
GeoDataTrack & operator[](int pos)
Definition: GeoDataMultiTrack.cpp:123
GeoDataLineString.h
Marble::GeoDataMultiTrack::~GeoDataMultiTrack
virtual ~GeoDataMultiTrack()
Definition: GeoDataMultiTrack.cpp:35
Marble::GeoDataModelId
Definition: Serializable.h:48
GeoDataMultiTrack.h
Marble::GeoDataTrack::geometryId
virtual EnumGeometryId geometryId() const
Definition: GeoDataTrack.cpp:283
Marble::GeoDataMultiTrack::constEnd
QVector< GeoDataTrack * >::ConstIterator constEnd() const
Definition: GeoDataMultiTrack.cpp:173
Marble::GeoDataTrackId
Definition: Serializable.h:49
GeoDataLinearRing.h
Marble::GeoDataMultiTrack::constBegin
QVector< GeoDataTrack * >::ConstIterator constBegin() const
Definition: GeoDataMultiTrack.cpp:168
GeoDataPoint.h
QVector
Marble::GeoDataLatLonAltBox::clear
virtual void clear()
Resets the bounding box to its uninitialised state (and thus contains nothing).
Definition: GeoDataLatLonAltBox.cpp:283
Marble::GeoDataMultiTrack::clear
void clear()
Definition: GeoDataMultiTrack.cpp:226
GeoDataMultiTrack_p.h
Marble::GeoDataGeometryPrivate::m_latLonAltBox
GeoDataLatLonAltBox m_latLonAltBox
Definition: GeoDataGeometry_p.h:74
Marble::GeoDataMultiTrack::operator<<
GeoDataMultiTrack & operator<<(const GeoDataTrack &value)
Definition: GeoDataMultiTrack.cpp:217
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:36
Marble::GeoDataGeometry::equals
bool equals(const GeoDataGeometry &other) const
Definition: GeoDataGeometry.cpp:146
Marble::GeoDataMultiTrackPrivate::m_vector
QVector< GeoDataTrack * > m_vector
Definition: GeoDataMultiTrack_p.h:59
Marble::GeoDataMultiTrack::pack
virtual void pack(QDataStream &stream) const
Serialize the contents of the feature to stream.
Definition: GeoDataMultiTrack.cpp:233
Marble::GeoDataLatLonAltBox
A class that defines a 3D bounding box for geographic data.
Definition: GeoDataLatLonAltBox.h:49
Marble::GeoDataMultiTrack::childPosition
int childPosition(const GeoDataTrack *child) const
returns the position of an item in the list
Definition: GeoDataMultiTrack.cpp:194
Marble::GeoDataMultiTrack::GeoDataMultiTrack
GeoDataMultiTrack()
Definition: GeoDataMultiTrack.cpp:25
Marble::InvalidGeometryId
Definition: Serializable.h:41
Marble::GeoDataGeometry::geometryId
virtual EnumGeometryId geometryId() const
Definition: GeoDataGeometry.cpp:82
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:39 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