Suite

Afficher uniquement les entités sélectionnées d'une couche dans QgsComposerLegend ?

Afficher uniquement les entités sélectionnées d'une couche dans QgsComposerLegend ?


J'ai développé un plugin qgis personnalisé. J'ai un bouton pour exporter le canevas de la carte sous forme d'image avec la légende. J'ai trouvé le code suivant pour la légende:

legend = QgsComposerLegend(c) legend.model().setLayerSet(mapRenderer.layerSet()) c.addItem(legend)

Le problème est qu'il ajoute toutes les fonctionnalités dans la légende de la carte alors que je souhaite uniquement inclure les fonctionnalités sélectionnées dans la légende de la carte. J'ai aussi essayé :

legend.setLegendFilterByMapEnabled(True)

Mais cela ne semble pas fonctionner. Des idées sur la façon de résoudre ce problème?


Si j'ai bien compris, vous souhaitez inclure uniquement les couches qui croisent l'étendue du canevas de la carte. Ceci est un extrait pour le faire:

import qgis.utils newcomp = iface.createNewComposer() c = newcomp.composition() canvas = qgis.utils.iface.mapCanvas() couches = qgis.utils.iface.legendInterface().layers() layerGroup = QgsLayerTreeGroup() pour couche dans les couches : si canvas.extent().intersects(layer.extent()): layerGroup.insertLayer(0, layer) legend = QgsComposerLegend(c) legend.modelV2().setRootGroup(layerGroup) c.addItem(legend)

Cette solution est basée sur les informations dérivées de cette question et ceci.