[Marble-commits] KDE/kdeedu/marble/src/lib
Jens-Michael Hoffmann
jensmh at gmx.de
Sun Feb 21 19:02:48 CET 2010
SVN commit 1093909 by jmhoffmann:
StackedTileLoader: introduce helper method findRelevantTextureLayers.
M +35 -27 StackedTileLoader.cpp
M +2 -0 StackedTileLoader.h
--- trunk/KDE/kdeedu/marble/src/lib/StackedTileLoader.cpp #1093908:1093909
@@ -186,34 +186,23 @@
tile->setForMergedLayerDecorator();
d->m_tilesOnDisplay[ stackedTileId ] = tile;
- GeoSceneLayer const * const sceneLayer = findSceneLayer( stackedTileId );
- mDebug() << "scene layer:" << sceneLayer->name();
-
- QVector<GeoSceneAbstractDataset*> textureLayers = sceneLayer->datasets();
- mDebug() << "StackedTileLoader::loadTile: loading base tiles:"
- << textureLayers.size() << "texture layers found";
-
- QVector<GeoSceneAbstractDataset*>::const_iterator pos = textureLayers.constBegin();
- QVector<GeoSceneAbstractDataset*>::const_iterator const end = textureLayers.constEnd();
+ QVector<GeoSceneTexture const *> const textureLayers = findRelevantTextureLayers( stackedTileId );
+ QVector<GeoSceneTexture const *>::const_iterator pos = textureLayers.constBegin();
+ QVector<GeoSceneTexture const *>::const_iterator const end = textureLayers.constEnd();
for (; pos != end; ++pos ) {
- GeoSceneTexture const * const textureLayer = dynamic_cast<GeoSceneTexture const *>( *pos );
- if ( !textureLayer )
- mDebug() << "not a texture layer" << (*pos)->name();
- if ( textureLayer && ( !textureLayer->hasMaximumTileLevel()
- || stackedTileId.zoomLevel() <= textureLayer->maximumTileLevel() )) {
- TileId const simpleTileId( textureLayer->sourceDir(), stackedTileId.zoomLevel(),
- stackedTileId.x(), stackedTileId.y() );
- mDebug() << "StackedTileLoader::loadTile: base tile" << textureLayer->sourceDir()
- << simpleTileId.toString();
- TextureTile * const simpleTile = d->m_simpleTileLoader->loadTile( stackedTileId,
- simpleTileId );
- // hack to try clouds, first tile is not handled here, MergeCopy is the default,
- // the merge rule for following tiles is set to MergeMultiply here
- if ( simpleTile && tile->hasBaseTiles() )
- simpleTile->setMergeRule( TextureTile::MergeMultiply );
- if ( simpleTile )
- tile->addBaseTile( simpleTile );
- }
+ GeoSceneTexture const * const textureLayer = *pos;
+ TileId const simpleTileId( textureLayer->sourceDir(), stackedTileId.zoomLevel(),
+ stackedTileId.x(), stackedTileId.y() );
+ mDebug() << "StackedTileLoader::loadTile: base tile" << textureLayer->sourceDir()
+ << simpleTileId.toString();
+ TextureTile * const simpleTile = d->m_simpleTileLoader->loadTile( stackedTileId,
+ simpleTileId );
+ // hack to try clouds, first tile is not handled here, MergeCopy is the default,
+ // the merge rule for following tiles is set to MergeMultiply here
+ if ( simpleTile && tile->hasBaseTiles() )
+ simpleTile->setMergeRule( TextureTile::MergeMultiply );
+ if ( simpleTile )
+ tile->addBaseTile( simpleTile );
}
Q_ASSERT( tile->hasBaseTiles() );
@@ -347,6 +336,25 @@
return textureLayer;
}
+//
+QVector<GeoSceneTexture const *>
+StackedTileLoader::findRelevantTextureLayers( TileId const & stackedTileId ) const
+{
+ GeoSceneLayer const * const sceneLayer = findSceneLayer( stackedTileId );
+ QVector<GeoSceneAbstractDataset*> textureLayers = sceneLayer->datasets();
+ QVector<GeoSceneTexture const *> result;
+ QVector<GeoSceneAbstractDataset*>::const_iterator pos = textureLayers.constBegin();
+ QVector<GeoSceneAbstractDataset*>::const_iterator const end = textureLayers.constEnd();
+ for (; pos != end; ++pos ) {
+ GeoSceneTexture const * const candidate = dynamic_cast<GeoSceneTexture const *>( *pos );
+ if ( candidate && ( !candidate->hasMaximumTileLevel()
+ || stackedTileId.zoomLevel() <= candidate->maximumTileLevel() )) {
+ result.append( candidate );
+ }
+ }
+ return result;
+}
+
void StackedTileLoader::initTextureLayers()
{
QList<GeoSceneDocument const *> const & mapThemes = d->m_mapThemeManager->mapThemes();
--- trunk/KDE/kdeedu/marble/src/lib/StackedTileLoader.h #1093908:1093909
@@ -158,6 +158,8 @@
GeoSceneLayer const * findSceneLayer( TileId const & ) const;
GeoSceneTexture const * findTextureLayer( TileId const & ) const;
GeoSceneTexture * findTextureLayer( TileId const & );
+ QVector<GeoSceneTexture const *>
+ findRelevantTextureLayers( TileId const & stackedTileId ) const;
void initTextureLayers();
void mergeDecorations( StackedTile * const, GeoSceneTexture * const ) const;
More information about the Marble-commits
mailing list