• 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
  • layers
TextureLayer.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 2006-2007 Torsten Rahn <tackat@kde.org>
9 // Copyright 2007 Inge Wallin <ingwa@kde.org>
10 // Copyright 2008, 2009, 2010 Jens-Michael Hoffmann <jmho@c-xx.com>
11 // Copyright 2010-2012 Bernhard Beschow <bbeschow@cs.tu-berlin.de>//
12 
13 #include "TextureLayer.h"
14 
15 #include <qmath.h>
16 #include <QTimer>
17 #include <QList>
18 #include <QSortFilterProxyModel>
19 
20 #include "SphericalScanlineTextureMapper.h"
21 #include "EquirectScanlineTextureMapper.h"
22 #include "MercatorScanlineTextureMapper.h"
23 #include "TileScalingTextureMapper.h"
24 #include "GeoDataGroundOverlay.h"
25 #include "GeoPainter.h"
26 #include "GeoSceneGroup.h"
27 #include "GeoSceneTypes.h"
28 #include "MergedLayerDecorator.h"
29 #include "MarbleDebug.h"
30 #include "MarbleDirs.h"
31 #include "MarblePlacemarkModel.h"
32 #include "StackedTile.h"
33 #include "StackedTileLoader.h"
34 #include "SunLocator.h"
35 #include "TextureColorizer.h"
36 #include "TileLoader.h"
37 #include "VectorComposer.h"
38 #include "ViewportParams.h"
39 
40 namespace Marble
41 {
42 
43 const int REPAINT_SCHEDULING_INTERVAL = 1000;
44 
45 class TextureLayer::Private
46 {
47 public:
48  Private( HttpDownloadManager *downloadManager,
49  const SunLocator *sunLocator,
50  VectorComposer *veccomposer,
51  const PluginManager *pluginManager,
52  QAbstractItemModel *groundOverlayModel,
53  TextureLayer *parent );
54 
55  void requestDelayedRepaint();
56  void updateTextureLayers();
57  void updateTile( const TileId &tileId, const QImage &tileImage );
58 
59  void addGroundOverlays( QModelIndex parent, int first, int last );
60  void removeGroundOverlays( QModelIndex parent, int first, int last );
61  void resetGroundOverlaysCache();
62 
63  void updateGroundOverlays();
64 
65  static bool drawOrderLessThan( const GeoDataGroundOverlay* o1, const GeoDataGroundOverlay* o2 );
66 
67 public:
68  TextureLayer *const m_parent;
69  const SunLocator *const m_sunLocator;
70  VectorComposer *const m_veccomposer;
71  TileLoader m_loader;
72  MergedLayerDecorator m_layerDecorator;
73  StackedTileLoader m_tileLoader;
74  GeoDataCoordinates m_centerCoordinates;
75  int m_tileZoomLevel;
76  TextureMapperInterface *m_texmapper;
77  TextureColorizer *m_texcolorizer;
78  QVector<const GeoSceneTextureTile *> m_textures;
79  const GeoSceneGroup *m_textureLayerSettings;
80  QString m_runtimeTrace;
81  QSortFilterProxyModel m_groundOverlayModel;
82  QList<const GeoDataGroundOverlay *> m_groundOverlayCache;
83  // For scheduling repaints
84  QTimer m_repaintTimer;
85 };
86 
87 TextureLayer::Private::Private( HttpDownloadManager *downloadManager,
88  const SunLocator *sunLocator,
89  VectorComposer *veccomposer,
90  const PluginManager *pluginManager,
91  QAbstractItemModel *groundOverlayModel,
92  TextureLayer *parent )
93  : m_parent( parent )
94  , m_sunLocator( sunLocator )
95  , m_veccomposer( veccomposer )
96  , m_loader( downloadManager, pluginManager )
97  , m_layerDecorator( &m_loader, sunLocator )
98  , m_tileLoader( &m_layerDecorator )
99  , m_centerCoordinates()
100  , m_tileZoomLevel( -1 )
101  , m_texmapper( 0 )
102  , m_texcolorizer( 0 )
103  , m_textureLayerSettings( 0 )
104  , m_repaintTimer()
105 {
106  m_groundOverlayModel.setSourceModel( groundOverlayModel );
107  m_groundOverlayModel.setDynamicSortFilter( true );
108  m_groundOverlayModel.setSortRole ( MarblePlacemarkModel::PopularityIndexRole );
109  m_groundOverlayModel.sort (0, Qt::AscendingOrder );
110 
111  connect( &m_groundOverlayModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
112  m_parent, SLOT(addGroundOverlays(QModelIndex,int,int)) );
113 
114  connect( &m_groundOverlayModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
115  m_parent, SLOT(removeGroundOverlays(QModelIndex,int,int)) );
116 
117  connect( &m_groundOverlayModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
118  m_parent, SLOT(resetGroundOverlaysCache()) );
119 
120  connect( &m_groundOverlayModel, SIGNAL(modelReset()),
121  m_parent, SLOT(resetGroundOverlaysCache()) );
122 
123  updateGroundOverlays();
124 }
125 
126 void TextureLayer::Private::requestDelayedRepaint()
127 {
128  if ( m_texmapper ) {
129  m_texmapper->setRepaintNeeded();
130  }
131 
132  if ( !m_repaintTimer.isActive() ) {
133  m_repaintTimer.start();
134  }
135 }
136 
137 void TextureLayer::Private::updateTextureLayers()
138 {
139  QVector<GeoSceneTextureTile const *> result;
140 
141  foreach ( const GeoSceneTextureTile *candidate, m_textures ) {
142  bool enabled = true;
143  if ( m_textureLayerSettings ) {
144  const bool propertyExists = m_textureLayerSettings->propertyValue( candidate->name(), enabled );
145  enabled |= !propertyExists; // if property doesn't exist, enable texture nevertheless
146  }
147  if ( enabled ) {
148  result.append( candidate );
149  mDebug() << "enabling texture" << candidate->name();
150  } else {
151  mDebug() << "disabling texture" << candidate->name();
152  }
153  }
154 
155  updateGroundOverlays();
156 
157  m_layerDecorator.setTextureLayers( result );
158  m_tileLoader.clear();
159 
160  m_parent->setNeedsUpdate();
161 }
162 
163 void TextureLayer::Private::updateTile( const TileId &tileId, const QImage &tileImage )
164 {
165  if ( tileImage.isNull() )
166  return; // keep tiles in cache to improve performance
167 
168  m_tileLoader.updateTile( tileId, tileImage );
169 
170  requestDelayedRepaint();
171 }
172 
173 bool TextureLayer::Private::drawOrderLessThan( const GeoDataGroundOverlay* o1, const GeoDataGroundOverlay* o2 )
174 {
175  return o1->drawOrder() < o2->drawOrder();
176 }
177 
178 void TextureLayer::Private::addGroundOverlays( QModelIndex parent, int first, int last )
179 {
180  for ( int i = first; i <= last; ++i ) {
181  QModelIndex index = m_groundOverlayModel.index( i, 0, parent );
182  const GeoDataGroundOverlay *overlay = static_cast<GeoDataGroundOverlay *>( qvariant_cast<GeoDataObject *>( index.data( MarblePlacemarkModel::ObjectPointerRole ) ) );
183 
184  if ( overlay->icon().isNull() ) {
185  continue;
186  }
187 
188  int pos = qLowerBound( m_groundOverlayCache.begin(), m_groundOverlayCache.end(), overlay, drawOrderLessThan ) - m_groundOverlayCache.begin();
189  m_groundOverlayCache.insert( pos, overlay );
190  }
191 
192  updateGroundOverlays();
193 
194  m_parent->reset();
195 }
196 
197 void TextureLayer::Private::removeGroundOverlays( QModelIndex parent, int first, int last )
198 {
199  for ( int i = first; i <= last; ++i ) {
200  QModelIndex index = m_groundOverlayModel.index( i, 0, parent );
201  const GeoDataGroundOverlay *overlay = static_cast<GeoDataGroundOverlay *>( qvariant_cast<GeoDataObject *>( index.data( MarblePlacemarkModel::ObjectPointerRole ) ) );
202 
203  int pos = qLowerBound( m_groundOverlayCache.begin(), m_groundOverlayCache.end(), overlay, drawOrderLessThan ) - m_groundOverlayCache.begin();
204  if (pos >= 0 && pos < m_groundOverlayCache.size() ) {
205  m_groundOverlayCache.removeAt( pos );
206  }
207  }
208 
209  updateGroundOverlays();
210 
211  m_parent->reset();
212 }
213 
214 void TextureLayer::Private::resetGroundOverlaysCache()
215 {
216  m_groundOverlayCache.clear();
217 
218  updateGroundOverlays();
219 
220  m_parent->reset();
221 }
222 
223 void TextureLayer::Private::updateGroundOverlays()
224 {
225  if ( !m_texcolorizer ) {
226  m_layerDecorator.updateGroundOverlays( m_groundOverlayCache );
227  }
228  else {
229  m_layerDecorator.updateGroundOverlays( QList<const GeoDataGroundOverlay *>() );
230  }
231 }
232 
233 
234 TextureLayer::TextureLayer( HttpDownloadManager *downloadManager,
235  const SunLocator *sunLocator,
236  VectorComposer *veccomposer ,
237  const PluginManager *pluginManager,
238  QAbstractItemModel *groundOverlayModel )
239  : QObject()
240  , d( new Private( downloadManager, sunLocator, veccomposer, pluginManager, groundOverlayModel, this ) )
241 {
242  connect( &d->m_loader, SIGNAL(tileCompleted(TileId,QImage)),
243  this, SLOT(updateTile(TileId,QImage)) );
244 
245  // Repaint timer
246  d->m_repaintTimer.setSingleShot( true );
247  d->m_repaintTimer.setInterval( REPAINT_SCHEDULING_INTERVAL );
248  connect( &d->m_repaintTimer, SIGNAL(timeout()),
249  this, SIGNAL(repaintNeeded()) );
250 
251  connect( d->m_veccomposer, SIGNAL(datasetLoaded()),
252  this, SLOT(requestDelayedRepaint()) );
253 }
254 
255 TextureLayer::~TextureLayer()
256 {
257  delete d->m_texmapper;
258  delete d->m_texcolorizer;
259  delete d;
260 }
261 
262 QStringList TextureLayer::renderPosition() const
263 {
264  return QStringList() << "SURFACE";
265 }
266 
267 void TextureLayer::addSeaDocument( const GeoDataDocument *seaDocument )
268 {
269  if( d->m_texcolorizer ) {
270  d->m_texcolorizer->addSeaDocument( seaDocument );
271  reset();
272  }
273 }
274 
275 void TextureLayer::addLandDocument( const GeoDataDocument *landDocument )
276 {
277  if( d->m_texcolorizer ) {
278  d->m_texcolorizer->addLandDocument( landDocument );
279  reset();
280  }
281 }
282 
283 bool TextureLayer::showSunShading() const
284 {
285  return d->m_layerDecorator.showSunShading();
286 }
287 
288 bool TextureLayer::showCityLights() const
289 {
290  return d->m_layerDecorator.showCityLights();
291 }
292 
293 bool TextureLayer::render( GeoPainter *painter, ViewportParams *viewport,
294  const QString &renderPos, GeoSceneLayer *layer )
295 {
296  Q_UNUSED( renderPos );
297  Q_UNUSED( layer );
298 
299  // Stop repaint timer if it is already running
300  d->m_repaintTimer.stop();
301 
302  if ( d->m_textures.isEmpty() )
303  return false;
304 
305  if ( d->m_layerDecorator.textureLayersSize() == 0 )
306  return false;
307 
308  if ( !d->m_texmapper )
309  return false;
310 
311  if ( d->m_centerCoordinates.longitude() != viewport->centerLongitude() ||
312  d->m_centerCoordinates.latitude() != viewport->centerLatitude() ) {
313  d->m_centerCoordinates.setLongitude( viewport->centerLongitude() );
314  d->m_centerCoordinates.setLatitude( viewport->centerLatitude() );
315  d->m_texmapper->setRepaintNeeded();
316  }
317 
318  // choose the smaller dimension for selecting the tile level, leading to higher-resolution results
319  const int levelZeroWidth = d->m_layerDecorator.tileSize().width() * d->m_layerDecorator.tileColumnCount( 0 );
320  const int levelZeroHight = d->m_layerDecorator.tileSize().height() * d->m_layerDecorator.tileRowCount( 0 );
321  const int levelZeroMinDimension = qMin( levelZeroWidth, levelZeroHight );
322 
323  // limit to 1 as dirty fix for invalid entry linearLevel
324  const qreal linearLevel = qMax( 1.0, viewport->radius() * 4.0 / levelZeroMinDimension );
325 
326  // As our tile resolution doubles with each level we calculate
327  // the tile level from tilesize and the globe radius via log(2)
328  const qreal tileLevelF = qLn( linearLevel ) / qLn( 2.0 ) * 1.00001; // snap to the sharper tile level a tiny bit earlier
329  // to work around rounding errors when the radius
330  // roughly equals the global texture width
331 
332  const int tileLevel = qMin<int>( d->m_layerDecorator.maximumTileLevel(), tileLevelF );
333 
334  if ( tileLevel != d->m_tileZoomLevel ) {
335  d->m_tileZoomLevel = tileLevel;
336  emit tileLevelChanged( d->m_tileZoomLevel );
337  }
338 
339  const QRect dirtyRect = QRect( QPoint( 0, 0), viewport->size() );
340  d->m_texmapper->mapTexture( painter, viewport, d->m_tileZoomLevel, dirtyRect, d->m_texcolorizer );
341  d->m_runtimeTrace = QString("Texture Cache: %1 ").arg(d->m_tileLoader.tileCount());
342  return true;
343 }
344 
345 QString TextureLayer::runtimeTrace() const
346 {
347  return d->m_runtimeTrace;
348 }
349 
350 void TextureLayer::setShowRelief( bool show )
351 {
352  if ( d->m_texcolorizer ) {
353  d->m_texcolorizer->setShowRelief( show );
354  }
355 }
356 
357 void TextureLayer::setShowSunShading( bool show )
358 {
359  disconnect( d->m_sunLocator, SIGNAL(positionChanged(qreal,qreal)),
360  this, SLOT(reset()) );
361 
362  if ( show ) {
363  connect( d->m_sunLocator, SIGNAL(positionChanged(qreal,qreal)),
364  this, SLOT(reset()) );
365  }
366 
367  d->m_layerDecorator.setShowSunShading( show );
368 
369  reset();
370 }
371 
372 void TextureLayer::setShowCityLights( bool show )
373 {
374  d->m_layerDecorator.setShowCityLights( show );
375 
376  reset();
377 }
378 
379 void TextureLayer::setShowTileId( bool show )
380 {
381  d->m_layerDecorator.setShowTileId( show );
382 
383  reset();
384 }
385 
386 void TextureLayer::setProjection( Projection projection )
387 {
388  if ( d->m_textures.isEmpty() ) {
389  return;
390  }
391 
392  // FIXME: replace this with an approach based on the factory method pattern.
393  delete d->m_texmapper;
394 
395  switch( projection ) {
396  case Spherical:
397  d->m_texmapper = new SphericalScanlineTextureMapper( &d->m_tileLoader );
398  break;
399  case Equirectangular:
400  d->m_texmapper = new EquirectScanlineTextureMapper( &d->m_tileLoader );
401  break;
402  case Mercator:
403  if ( d->m_tileLoader.tileProjection() == GeoSceneTiled::Mercator ) {
404  d->m_texmapper = new TileScalingTextureMapper( &d->m_tileLoader );
405  } else {
406  d->m_texmapper = new MercatorScanlineTextureMapper( &d->m_tileLoader );
407  }
408  break;
409  default:
410  d->m_texmapper = 0;
411  }
412  Q_ASSERT( d->m_texmapper );
413 }
414 
415 void TextureLayer::setNeedsUpdate()
416 {
417  if ( d->m_texmapper ) {
418  d->m_texmapper->setRepaintNeeded();
419  }
420 
421  emit repaintNeeded();
422 }
423 
424 void TextureLayer::setVolatileCacheLimit( quint64 kilobytes )
425 {
426  d->m_tileLoader.setVolatileCacheLimit( kilobytes );
427 }
428 
429 void TextureLayer::reset()
430 {
431  mDebug() << Q_FUNC_INFO;
432 
433  d->m_tileLoader.clear();
434  setNeedsUpdate();
435 }
436 
437 void TextureLayer::reload()
438 {
439  foreach ( const TileId &id, d->m_tileLoader.visibleTiles() ) {
440  // it's debatable here, whether DownloadBulk or DownloadBrowse should be used
441  // but since "reload" or "refresh" seems to be a common action of a browser and it
442  // allows for more connections (in our model), use "DownloadBrowse"
443  d->m_layerDecorator.downloadStackedTile( id, DownloadBrowse );
444  }
445 }
446 
447 void TextureLayer::downloadStackedTile( const TileId &stackedTileId )
448 {
449  d->m_layerDecorator.downloadStackedTile( stackedTileId, DownloadBulk );
450 }
451 
452 void TextureLayer::setMapTheme( const QVector<const GeoSceneTextureTile *> &textures, const GeoSceneGroup *textureLayerSettings, const QString &seaFile, const QString &landFile )
453 {
454  delete d->m_texcolorizer;
455  d->m_texcolorizer = 0;
456 
457  if ( QFileInfo( seaFile ).isReadable() || QFileInfo( landFile ).isReadable() ) {
458  d->m_texcolorizer = new TextureColorizer( seaFile, landFile, d->m_veccomposer );
459  }
460 
461  d->m_textures = textures;
462  d->m_textureLayerSettings = textureLayerSettings;
463 
464  if ( d->m_textureLayerSettings ) {
465  connect( d->m_textureLayerSettings, SIGNAL(valueChanged(QString,bool)),
466  this, SLOT(updateTextureLayers()) );
467  }
468 
469  d->updateTextureLayers();
470 }
471 
472 int TextureLayer::tileZoomLevel() const
473 {
474  return d->m_tileZoomLevel;
475 }
476 
477 QSize TextureLayer::tileSize() const
478 {
479  return d->m_layerDecorator.tileSize();
480 }
481 
482 GeoSceneTiled::Projection TextureLayer::tileProjection() const
483 {
484  return d->m_layerDecorator.tileProjection();
485 }
486 
487 int TextureLayer::tileColumnCount( int level ) const
488 {
489  return d->m_layerDecorator.tileColumnCount( level );
490 }
491 
492 int TextureLayer::tileRowCount( int level ) const
493 {
494  return d->m_layerDecorator.tileRowCount( level );
495 }
496 
497 qint64 TextureLayer::volatileCacheLimit() const
498 {
499  return d->m_tileLoader.volatileCacheLimit();
500 }
501 
502 int TextureLayer::preferredRadiusCeil( int radius ) const
503 {
504  const int tileWidth = d->m_layerDecorator.tileSize().width();
505  const int levelZeroColumns = d->m_layerDecorator.tileColumnCount( 0 );
506  const qreal linearLevel = 4.0 * (qreal)( radius ) / (qreal)( tileWidth * levelZeroColumns );
507  const qreal tileLevelF = qLn( linearLevel ) / qLn( 2.0 );
508  const int tileLevel = qCeil( tileLevelF );
509 
510  if ( tileLevel < 0 )
511  return ( tileWidth * levelZeroColumns / 4 ) >> (-tileLevel);
512 
513  return ( tileWidth * levelZeroColumns / 4 ) << tileLevel;
514 }
515 
516 int TextureLayer::preferredRadiusFloor( int radius ) const
517 {
518  const int tileWidth = d->m_layerDecorator.tileSize().width();
519  const int levelZeroColumns = d->m_layerDecorator.tileColumnCount( 0 );
520  const qreal linearLevel = 4.0 * (qreal)( radius ) / (qreal)( tileWidth * levelZeroColumns );
521  const qreal tileLevelF = qLn( linearLevel ) / qLn( 2.0 );
522  const int tileLevel = qFloor( tileLevelF );
523 
524  if ( tileLevel < 0 )
525  return ( tileWidth * levelZeroColumns / 4 ) >> (-tileLevel);
526 
527  return ( tileWidth * levelZeroColumns / 4 ) << tileLevel;
528 }
529 
530 }
531 
532 #include "TextureLayer.moc"
GeoSceneTypes.h
TileLoader.h
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::TextureLayer::render
virtual bool render(GeoPainter *painter, ViewportParams *viewport, const QString &renderPos="NONE", GeoSceneLayer *layer=0)
Renders the content provided by the layer on the viewport.
Definition: TextureLayer.cpp:293
Marble::PluginManager
The class that handles Marble's plugins.
Definition: PluginManager.h:45
Marble::GeoDataDocument
A container for Features, Styles and in the future Schemas.
Definition: GeoDataDocument.h:64
Marble::ViewportParams::size
QSize size() const
Definition: ViewportParams.cpp:260
Marble::TextureLayer::tileColumnCount
int tileColumnCount(int level) const
Definition: TextureLayer.cpp:487
GeoDataGroundOverlay.h
Marble::TextureLayer::repaintNeeded
void repaintNeeded()
GeoSceneGroup.h
Marble::TextureLayer::setNeedsUpdate
void setNeedsUpdate()
Definition: TextureLayer.cpp:415
Marble::GeoPainter
A painter that allows to draw geometric primitives on the map.
Definition: GeoPainter.h:98
Marble::GeoSceneTiled::Projection
Projection
Definition: GeoSceneTiled.h:47
Marble::TextureLayer::setShowCityLights
void setShowCityLights(bool show)
Definition: TextureLayer.cpp:372
Marble::DownloadBrowse
Browsing mode, normal operation of Marble, like a web browser.
Definition: MarbleGlobal.h:162
SunLocator.h
Marble::TextureLayer::tileLevelChanged
void tileLevelChanged(int)
QObject
Marble::TextureLayer::renderPosition
QStringList renderPosition() const
Preferred level in the layer stack for the rendering.
Definition: TextureLayer.cpp:262
MarbleDebug.h
TextureColorizer.h
Marble::StackedTileLoader
Tile loading from a quad tree.
Definition: StackedTileLoader.h:59
Marble::TextureLayer::reload
void reload()
Definition: TextureLayer.cpp:437
Marble::TextureLayer::addLandDocument
void addLandDocument(const GeoDataDocument *landDocument)
Definition: TextureLayer.cpp:275
Marble::MergedLayerDecorator
Definition: MergedLayerDecorator.h:40
Marble::TextureLayer::setShowSunShading
void setShowSunShading(bool show)
Definition: TextureLayer.cpp:357
Marble::Equirectangular
Flat projection ("plate carree")
Definition: MarbleGlobal.h:46
Marble::TextureLayer::addSeaDocument
void addSeaDocument(const GeoDataDocument *seaDocument)
Definition: TextureLayer.cpp:267
Marble::TextureLayer::volatileCacheLimit
qint64 volatileCacheLimit() const
Definition: TextureLayer.cpp:497
TextureLayer.h
Marble::SunLocator
Definition: SunLocator.h:33
VectorComposer.h
Marble::GeoSceneLayer
Layer of a GeoScene document.
Definition: GeoSceneLayer.h:43
Marble::TextureLayer::setShowRelief
void setShowRelief(bool show)
Definition: TextureLayer.cpp:350
Marble::TextureLayer::tileRowCount
int tileRowCount(int level) const
Definition: TextureLayer.cpp:492
Marble::TextureLayer::reset
void reset()
Definition: TextureLayer.cpp:429
Marble::Mercator
Mercator projection.
Definition: MarbleGlobal.h:47
Marble::TextureMapperInterface
Definition: TextureMapperInterface.h:27
SphericalScanlineTextureMapper.h
EquirectScanlineTextureMapper.h
MarbleDirs.h
Marble::GeoSceneGroup
Group inside the settings of a GeoScene document.
Definition: GeoSceneGroup.h:40
Marble::TextureLayer
Definition: TextureLayer.h:39
Marble::TextureLayer::setProjection
void setProjection(Projection projection)
Set the Projection used for the map.
Definition: TextureLayer.cpp:386
TileScalingTextureMapper.h
Marble::VectorComposer
Definition: VectorComposer.h:40
MarblePlacemarkModel.h
GeoPainter.h
MercatorScanlineTextureMapper.h
Marble::ViewportParams
A public class that controls what is visible in the viewport of a Marble map.
Definition: ViewportParams.h:44
Marble::TileScalingTextureMapper
Definition: TileScalingTextureMapper.h:27
QAbstractItemModel
Marble::TextureColorizer
Definition: TextureColorizer.h:34
Marble::TextureLayer::setVolatileCacheLimit
void setVolatileCacheLimit(quint64 kilobytes)
Definition: TextureLayer.cpp:424
Marble::GeoSceneTiled::Mercator
Definition: GeoSceneTiled.h:47
Marble::REPAINT_SCHEDULING_INTERVAL
const int REPAINT_SCHEDULING_INTERVAL
Definition: TextureLayer.cpp:43
MergedLayerDecorator.h
ViewportParams.h
This file contains the headers for ViewportParams.
Marble::MarblePlacemarkModel::PopularityIndexRole
The popularity index.
Definition: MarblePlacemarkModel.h:60
Marble::ViewportParams::centerLatitude
qreal centerLatitude() const
Definition: ViewportParams.cpp:294
Marble::TextureLayer::runtimeTrace
virtual QString runtimeTrace() const
Returns a debug line for perfo/tracing issues.
Definition: TextureLayer.cpp:345
Marble::EquirectScanlineTextureMapper
Definition: EquirectScanlineTextureMapper.h:28
Marble::SphericalScanlineTextureMapper
Definition: SphericalScanlineTextureMapper.h:39
Marble::TileId
Definition: TileId.h:27
Marble::TextureLayer::preferredRadiusFloor
int preferredRadiusFloor(int radius) const
Definition: TextureLayer.cpp:516
Marble::ViewportParams::radius
int radius() const
Definition: ViewportParams.cpp:195
Marble::ViewportParams::centerLongitude
qreal centerLongitude() const
Definition: ViewportParams.cpp:289
StackedTile.h
Marble::TextureLayer::downloadStackedTile
void downloadStackedTile(const TileId &stackedTileId)
Definition: TextureLayer.cpp:447
Marble::TextureLayer::showSunShading
bool showSunShading() const
Definition: TextureLayer.cpp:283
Marble::TextureLayer::setMapTheme
void setMapTheme(const QVector< const GeoSceneTextureTile * > &textures, const GeoSceneGroup *textureLayerSettings, const QString &seaFile, const QString &landFile)
Definition: TextureLayer.cpp:452
Marble::TextureLayer::~TextureLayer
~TextureLayer()
Definition: TextureLayer.cpp:255
Marble::TextureLayer::tileZoomLevel
int tileZoomLevel() const
Return the current tile zoom level.
Definition: TextureLayer.cpp:472
Marble::Projection
Projection
This enum is used to choose the projection shown in the view.
Definition: MarbleGlobal.h:44
Marble::GeoDataGroundOverlay
Definition: GeoDataGroundOverlay.h:24
Marble::TextureLayer::showCityLights
bool showCityLights() const
Definition: TextureLayer.cpp:288
Marble::TextureLayer::tileProjection
GeoSceneTiled::Projection tileProjection() const
Definition: TextureLayer.cpp:482
Marble::MercatorScanlineTextureMapper
Definition: MercatorScanlineTextureMapper.h:28
Marble::TextureLayer::setShowTileId
void setShowTileId(bool show)
Definition: TextureLayer.cpp:379
Marble::Spherical
Spherical projection.
Definition: MarbleGlobal.h:45
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:31
Marble::TextureLayer::tileSize
QSize tileSize() const
Definition: TextureLayer.cpp:477
Marble::TextureLayer::preferredRadiusCeil
int preferredRadiusCeil(int radius) const
Definition: TextureLayer.cpp:502
Marble::DownloadBulk
Bulk download, for example "File/Download region".
Definition: MarbleGlobal.h:161
Marble::HttpDownloadManager
This class manages scheduled downloads.
Definition: HttpDownloadManager.h:44
StackedTileLoader.h
Marble::TileLoader
Definition: TileLoader.h:44
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:53 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