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

marble

  • sources
  • kde-4.12
  • 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() const
40 {
41  return static_cast<GeoDataMultiTrackPrivate*>(d);
42 }
43 
44 
45 const GeoDataLatLonAltBox& GeoDataMultiTrack::latLonAltBox() const
46 {
47  QVector<GeoDataTrack*>::const_iterator it = p()->m_vector.constBegin();
48  QVector<GeoDataTrack*>::const_iterator end = p()->m_vector.constEnd();
49 
50  p()->m_latLonAltBox.clear();
51  for (; it != end; ++it) {
52  if ( !(*it)->latLonAltBox().isEmpty() ) {
53  if ( p()->m_latLonAltBox.isEmpty() ) {
54  p()->m_latLonAltBox = (*it)->latLonAltBox();
55  }
56  else {
57  p()->m_latLonAltBox |= (*it)->latLonAltBox();
58  }
59  }
60  }
61  return p()->m_latLonAltBox;
62 }
63 
64 int GeoDataMultiTrack::size() const
65 {
66  return p()->m_vector.size();
67 }
68 
69 QVector<GeoDataTrack> GeoDataMultiTrack::vector() const
70 {
71  QVector<GeoDataTrack> results;
72 
73  QVector<GeoDataTrack*>::const_iterator it = p()->m_vector.constBegin();
74  QVector<GeoDataTrack*>::const_iterator end = p()->m_vector.constEnd();
75 
76  for (; it != end; ++it) {
77  GeoDataTrack f = **it;
78  results.append( f );
79  }
80 
81  return results;
82 }
83 
84 GeoDataTrack& GeoDataMultiTrack::at( int pos )
85 {
86  mDebug() << "detaching!";
87  detach();
88  return *(p()->m_vector[ pos ]);
89 }
90 
91 const GeoDataTrack& GeoDataMultiTrack::at( int pos ) const
92 {
93  return *(p()->m_vector.at( pos ));
94 }
95 
96 GeoDataTrack& GeoDataMultiTrack::operator[]( int pos )
97 {
98  detach();
99  return *(p()->m_vector[ pos ]);
100 }
101 
102 const GeoDataTrack& GeoDataMultiTrack::operator[]( int pos ) const
103 {
104  return *(p()->m_vector[ pos ]);
105 }
106 
107 GeoDataTrack& GeoDataMultiTrack::last()
108 {
109  detach();
110  return *(p()->m_vector.last());
111 }
112 
113 GeoDataTrack& GeoDataMultiTrack::first()
114 {
115  detach();
116  return *(p()->m_vector.first());
117 }
118 
119 const GeoDataTrack& GeoDataMultiTrack::last() const
120 {
121  return *(p()->m_vector.last());
122 }
123 
124 const GeoDataTrack& GeoDataMultiTrack::first() const
125 {
126  return *(p()->m_vector.first());
127 }
128 
129 QVector<GeoDataTrack*>::Iterator GeoDataMultiTrack::begin()
130 {
131  detach();
132  return p()->m_vector.begin();
133 }
134 
135 QVector<GeoDataTrack*>::Iterator GeoDataMultiTrack::end()
136 {
137  detach();
138  return p()->m_vector.end();
139 }
140 
141 QVector<GeoDataTrack*>::ConstIterator GeoDataMultiTrack::constBegin() const
142 {
143  return p()->m_vector.constBegin();
144 }
145 
146 QVector<GeoDataTrack*>::ConstIterator GeoDataMultiTrack::constEnd() const
147 {
148  return p()->m_vector.constEnd();
149 }
150 
154 GeoDataTrack* GeoDataMultiTrack::child( int i )
155 {
156  return p()->m_vector.at( i );
157 }
158 
159 const GeoDataTrack* GeoDataMultiTrack::child( int i ) const
160 {
161  return p()->m_vector.at( i );
162 }
163 
167 int GeoDataMultiTrack::childPosition( GeoDataTrack *object)
168 {
169  for ( int i=0; i< p()->m_vector.size(); i++ )
170  {
171  if ( p()->m_vector.at( i ) == object )
172  {
173  return i;
174  }
175  }
176  return -1;
177 }
178 
182 void GeoDataMultiTrack::append( GeoDataTrack *other )
183 {
184  detach();
185  other->setParent( this );
186  p()->m_vector.append( other );
187 }
188 
189 
190 GeoDataMultiTrack& GeoDataMultiTrack::operator << ( const GeoDataTrack& value )
191 {
192  detach();
193  GeoDataTrack *g = new GeoDataTrack( value );
194  g->setParent( this );
195  p()->m_vector.append( g );
196  return *this;
197 }
198 
199 void GeoDataMultiTrack::clear()
200 {
201  detach();
202  qDeleteAll(p()->m_vector);
203  p()->m_vector.clear();
204 }
205 
206 void GeoDataMultiTrack::pack( QDataStream& stream ) const
207 {
208  GeoDataGeometry::pack( stream );
209 
210  stream << p()->m_vector.size();
211 
212  for( QVector<GeoDataTrack*>::const_iterator iterator
213  = p()->m_vector.constBegin();
214  iterator != p()->m_vector.constEnd();
215  ++iterator ) {
216  const GeoDataTrack *geometry = *iterator;
217  stream << geometry->geometryId();
218  geometry->pack( stream );
219  }
220 }
221 
222 void GeoDataMultiTrack::unpack( QDataStream& stream )
223 {
224  detach();
225  GeoDataGeometry::unpack( stream );
226 
227  int size = 0;
228 
229  stream >> size;
230 
231  for( int i = 0; i < size; i++ ) {
232  int geometryId;
233  stream >> geometryId;
234  switch( geometryId ) {
235  case InvalidGeometryId:
236  break;
237  case GeoDataTrackId:
238  {
239  GeoDataTrack *track = new GeoDataTrack;
240  track->unpack( stream );
241  p()->m_vector.append( track );
242  }
243  break;
244  case GeoDataModelId:
245  break;
246  default: break;
247  };
248  }
249 }
250 
251 }
Marble::GeoDataMultiTrackPrivate
Definition: GeoDataMultiTrack_p.h:21
Marble::GeoDataMultiTrack::child
GeoDataTrack * child(int)
returns the requested child item
Definition: GeoDataMultiTrack.cpp:154
Marble::GeoDataMultiTrack::vector
QVector< GeoDataTrack > vector() const
Definition: GeoDataMultiTrack.cpp:69
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:107
Marble::GeoDataMultiTrack::size
int size() const
Definition: GeoDataMultiTrack.cpp:64
Marble::GeoDataTrack::pack
virtual void pack(QDataStream &stream) const
Serialize the contents of the feature to stream.
Definition: GeoDataTrack.cpp:286
GeoDataPolygon.h
Marble::GeoDataMultiTrack::begin
QVector< GeoDataTrack * >::Iterator begin()
Definition: GeoDataMultiTrack.cpp:129
Marble::GeoDataMultiTrack::append
void append(GeoDataTrack *other)
add an element
Definition: GeoDataMultiTrack.cpp:182
Marble::GeoDataMultiTrack::latLonAltBox
virtual const GeoDataLatLonAltBox & latLonAltBox() const
Definition: GeoDataMultiTrack.cpp:45
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:84
MarbleDebug.h
Marble::GeoDataMultiTrack::first
GeoDataTrack & first()
Definition: GeoDataMultiTrack.cpp:113
Marble::GeoDataMultiTrack::unpack
virtual void unpack(QDataStream &stream)
Unserialize the contents of the feature from stream.
Definition: GeoDataMultiTrack.cpp:222
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:291
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:135
Marble::GeoDataMultiTrack::operator[]
GeoDataTrack & operator[](int pos)
Definition: GeoDataMultiTrack.cpp:96
GeoDataLineString.h
Marble::GeoDataMultiTrack::childPosition
int childPosition(GeoDataTrack *child)
returns the position of an item in the list
Definition: GeoDataMultiTrack.cpp:167
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:275
Marble::GeoDataMultiTrack::constEnd
QVector< GeoDataTrack * >::ConstIterator constEnd() const
Definition: GeoDataMultiTrack.cpp:146
Marble::GeoDataTrackId
Definition: Serializable.h:49
GeoDataLinearRing.h
Marble::GeoDataMultiTrack::constBegin
QVector< GeoDataTrack * >::ConstIterator constBegin() const
Definition: GeoDataMultiTrack.cpp:141
GeoDataPoint.h
Marble::GeoDataLatLonAltBox::clear
virtual void clear()
Resets the bounding box to its uninitialised state (and thus contains nothing).
Definition: GeoDataLatLonAltBox.cpp:284
Marble::GeoDataMultiTrack::clear
void clear()
Definition: GeoDataMultiTrack.cpp:199
GeoDataMultiTrack_p.h
Marble::GeoDataGeometryPrivate::m_latLonAltBox
GeoDataLatLonAltBox m_latLonAltBox
Definition: GeoDataGeometry_p.h:71
Marble::GeoDataMultiTrack::operator<<
GeoDataMultiTrack & operator<<(const GeoDataTrack &value)
Definition: GeoDataMultiTrack.cpp:190
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:31
Marble::GeoDataMultiTrackPrivate::m_vector
QVector< GeoDataTrack * > m_vector
Definition: GeoDataMultiTrack_p.h:58
Marble::GeoDataMultiTrack::pack
virtual void pack(QDataStream &stream) const
Serialize the contents of the feature to stream.
Definition: GeoDataMultiTrack.cpp:206
Marble::GeoDataLatLonAltBox
A class that defines a 3D bounding box for geographic data.
Definition: GeoDataLatLonAltBox.h:49
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-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:50 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
  • kstars
  • libkdeedu
  •   keduvocdocument
  • 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