void QgsComposerLegendWidget::updateLegend() { if ( mLegend ) { mLegend->beginCommand( tr( "Legend updated" ) ); QgisApp* app = QgisApp::instance(); if ( !app ) { return; } //get layer id list QStringList layerIdList; QgsMapCanvas* canvas = app->mapCanvas(); if ( canvas ) { QgsMapRenderer* renderer = canvas->mapRenderer(); if ( renderer ) { layerIdList = renderer->layerSet(); } } //and also group info QgsAppLegendInterface legendIface( app->legend() ); QList< GroupLayerInfo > groupInfo = legendIface.groupLayerRelationship(); mLegend->model()->setLayerSetAndGroups( layerIdList, groupInfo ); mLegend->endCommand(); } }
osg::Image* QgsOsgEarthTileSource::createImage( const TileKey& key, ProgressCallback* progress ) { Q_UNUSED( key ); Q_UNUSED( progress ); osg::ref_ptr<osg::Image> image; if ( intersects( &key ) ) { //Get the extents of the tile double xmin, ymin, xmax, ymax; key.getExtent().getBounds( xmin, ymin, xmax, ymax ); int tileSize = getPixelsPerTile(); int target_width = tileSize; int target_height = tileSize; QgsDebugMsg( "QGIS: xmin:" + QString::number( xmin ) + " ymin:" + QString::number( ymin ) + " ymax:" + QString::number( ymax ) + " ymax " + QString::number( ymax ) ); //Return if parameters are out of range. if ( target_width <= 0 || target_height <= 0 ) { return 0; } QImage* qImage = createImage( target_width, target_height ); if ( !qImage ) { return 0; } QgsMapRenderer* mainRenderer = mQGisIface->mapCanvas()->mapRenderer(); mMapRenderer->setLayerSet( mainRenderer->layerSet() ); mMapRenderer->setOutputSize( QSize( qImage->width(), qImage->height() ), qImage->logicalDpiX() ); QgsRectangle mapExtent( xmin, ymin, xmax, ymax ); mMapRenderer->setExtent( mapExtent ); QPainter thePainter( qImage ); //thePainter.setRenderHint(QPainter::Antialiasing); //make it look nicer mMapRenderer->render( &thePainter ); unsigned char* data = qImage->bits(); image = new osg::Image; //The pixel format is always RGBA to support transparency image->setImage( qImage->width(), qImage->height(), 1, 4, GL_BGRA, GL_UNSIGNED_BYTE, //Why not GL_RGBA - QGIS bug? data, osg::Image::NO_DELETE, 1 ); image->flipVertical(); } //Create a transparent image if we don't have an image if ( !image.valid() ) { return ImageUtils::createEmptyImage(); } return image.release(); }
QStringList QgsComposerLegend::layerIdList() const { //take layer list from map renderer (to have legend order) if ( mComposition ) { QgsMapRenderer* r = mComposition->mapRenderer(); if ( r ) { return r->layerSet(); } } return QStringList(); }