From d156fbabfcdd5bf632f2643d933a507d6885f96b Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Thu, 21 Sep 2023 17:32:42 +0200 Subject: [PATCH] ATLAS: LEGEND support clipping Fix #8155 --- src/core/layout/qgslayoutitemlegend.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/core/layout/qgslayoutitemlegend.cpp b/src/core/layout/qgslayoutitemlegend.cpp index d1a10b441a7..f972dc6397a 100644 --- a/src/core/layout/qgslayoutitemlegend.cpp +++ b/src/core/layout/qgslayoutitemlegend.cpp @@ -1133,14 +1133,29 @@ void QgsLayoutItemLegend::doUpdateFilterByMap() mapSettings.setExpressionContext( createExpressionContext() ); - const QgsGeometry atlasGeometry = mInAtlas ? mLayout->reportContext().currentGeometry( mapSettings.destinationCrs() ) : QgsGeometry(); + const QgsGeometry atlasGeometry { mLayout->reportContext().currentGeometry( mapSettings.destinationCrs() ) }; QgsLayerTreeFilterSettings filterSettings( mapSettings ); + QList layersToClip; + if ( !atlasGeometry.isNull() && mMap->atlasClippingSettings()->enabled() ) + { + layersToClip = mMap->atlasClippingSettings()->layersToClip(); + for ( QgsMapLayer *layer : std::as_const( layersToClip ) ) + { + QList mapLayers { filterSettings.mapSettings().layers( true ) }; + mapLayers.removeAll( layer ); + filterSettings.mapSettings().setLayers( mapLayers ); + filterSettings.addVisibleExtentForLayer( layer, QgsReferencedGeometry( atlasGeometry, mapSettings.destinationCrs() ) ); + } + } + + if ( !linkedFilterMaps.empty() ) { for ( QgsLayoutItemMap *map : std::as_const( linkedFilterMaps ) ) { + if ( map == mMap ) continue; @@ -1160,7 +1175,7 @@ void QgsLayoutItemLegend::doUpdateFilterByMap() const QList< QgsMapLayer * > layersForMap = map->layersToRender(); for ( QgsMapLayer *layer : layersForMap ) { - if ( !atlasGeometry.isNull() ) + if ( mInAtlas && !atlasGeometry.isNull() ) { mapExtent = mapExtent.intersection( atlasGeometry ); }