From c73f4ff1ef18b46151ace919617e75d04862f2d6 Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Thu, 6 Jun 2024 14:14:27 +0200 Subject: [PATCH 1/5] fix(SelectiveMasking): install masks for QgsTemplatedLineSymbolLayer Fixes #57564 --- src/core/symbology/qgslinesymbollayer.cpp | 5 ++-- tests/src/python/test_selective_masking.py | 27 ++++++++++++++++++ .../layout_export_markerline_masked.png | Bin 0 -> 13717 bytes .../layout_export_markerline_masked_mask.png | Bin 0 -> 10541 bytes 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 tests/testdata/control_images/selective_masking/layout_export_markerline_masked/layout_export_markerline_masked.png create mode 100644 tests/testdata/control_images/selective_masking/layout_export_markerline_masked/layout_export_markerline_masked_mask.png diff --git a/src/core/symbology/qgslinesymbollayer.cpp b/src/core/symbology/qgslinesymbollayer.cpp index 89fe664299fa..852f297a4b72 100644 --- a/src/core/symbology/qgslinesymbollayer.cpp +++ b/src/core/symbology/qgslinesymbollayer.cpp @@ -1535,8 +1535,10 @@ bool QgsTemplatedLineSymbolLayerBase::canCauseArtifactsBetweenAdjacentTiles() co || ( mPlacements & Qgis::MarkerLinePlacement::SegmentCenter ); } -void QgsTemplatedLineSymbolLayerBase::startFeatureRender( const QgsFeature &, QgsRenderContext & ) +void QgsTemplatedLineSymbolLayerBase::startFeatureRender( const QgsFeature &, QgsRenderContext &context ) { + installMasks( context, true ); + mRenderingFeature = true; mHasRenderedFirstPart = false; } @@ -4099,4 +4101,3 @@ Qgis::RenderUnit QgsFilledLineSymbolLayer::outputUnit() const } return Qgis::RenderUnit::Unknown; } - diff --git a/tests/src/python/test_selective_masking.py b/tests/src/python/test_selective_masking.py index 44aa7cb2b621..a993b87617a1 100644 --- a/tests/src/python/test_selective_masking.py +++ b/tests/src/python/test_selective_masking.py @@ -26,13 +26,16 @@ QgsLayoutItemMap, QgsLayoutItemPage, QgsLayoutSize, + QgsLineSymbol, QgsMapRendererCache, QgsMapRendererCustomPainterJob, QgsMapRendererParallelJob, QgsMapRendererSequentialJob, QgsMapSettings, + QgsMarkerLineSymbolLayer, QgsMarkerSymbol, QgsMaskMarkerSymbolLayer, + QgsNullSymbolRenderer, QgsOuterGlowEffect, QgsPalLayerSettings, QgsPathResolver, @@ -1346,6 +1349,30 @@ def test_layout_export_svg_marker_masking(self): # no rasters self.check_layout_export("layout_export_svg_marker_masking", 0, [self.points_layer, self.lines_layer]) + def test_markerline_masked(self): + """ + Test a layout export where a QgsMarkerLineSymbolLayer is masked + """ + + sl = QgsMarkerLineSymbolLayer(True, 7) + circle_symbol = QgsMarkerSymbol.createSimple({'size': '3'}) + sl.setSubSymbol(circle_symbol) + + self.lines_layer.setRenderer(QgsSingleSymbolRenderer(QgsLineSymbol([sl]))) + self.polys_layer.setRenderer(QgsNullSymbolRenderer()) + + label_settings = self.polys_layer.labeling().settings() + fmt = label_settings.format() + # enable a mask + fmt.mask().setEnabled(True) + fmt.mask().setSize(4.0) + # and mask other symbol layers underneath + fmt.mask().setMaskedSymbolLayers([QgsSymbolLayerReference(self.lines_layer.id(), sl.id())]) + label_settings.setFormat(fmt) + self.polys_layer.labeling().setSettings(label_settings) + + self.check_layout_export("layout_export_markerline_masked", 0, [self.polys_layer, self.lines_layer]) + class TestSelectiveMaskingQPainterPathBackend(QgisTestCase, SelectiveMaskingTestBase): """ diff --git a/tests/testdata/control_images/selective_masking/layout_export_markerline_masked/layout_export_markerline_masked.png b/tests/testdata/control_images/selective_masking/layout_export_markerline_masked/layout_export_markerline_masked.png new file mode 100644 index 0000000000000000000000000000000000000000..fc57d6cac9ff9489fd28d799a5d4e695383712f1 GIT binary patch literal 13717 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 QQIFhI(oigrzw_k30Ovj?O#lD@ literal 0 HcmV?d00001 From ece791c24d69b5db69f78417702ac3e12dcdedb0 Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Tue, 11 Jun 2024 09:33:44 +0200 Subject: [PATCH 2/5] fix(SelectiveMasking): Properly remove masks --- src/core/symbology/qgslinesymbollayer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/symbology/qgslinesymbollayer.cpp b/src/core/symbology/qgslinesymbollayer.cpp index 852f297a4b72..fa41e5177416 100644 --- a/src/core/symbology/qgslinesymbollayer.cpp +++ b/src/core/symbology/qgslinesymbollayer.cpp @@ -1547,7 +1547,10 @@ void QgsTemplatedLineSymbolLayerBase::stopFeatureRender( const QgsFeature &featu { mRenderingFeature = false; if ( mPlaceOnEveryPart || !( mPlacements & Qgis::MarkerLinePlacement::LastVertex ) ) + { + removeMasks( context, true ); return; + } const double prevOpacity = subSymbol()->opacity(); subSymbol()->setOpacity( prevOpacity * mFeatureSymbolOpacity ); @@ -1556,6 +1559,8 @@ void QgsTemplatedLineSymbolLayerBase::stopFeatureRender( const QgsFeature &featu renderSymbol( mFinalVertex, &feature, context, -1, mCurrentFeatureIsSelected ); mFeatureSymbolOpacity = 1; subSymbol()->setOpacity( prevOpacity ); + + removeMasks( context, true ); } void QgsTemplatedLineSymbolLayerBase::copyTemplateSymbolProperties( QgsTemplatedLineSymbolLayerBase *destLayer ) const From 6d60df04abf479b8ed4bc5d2894fd5f2d1b689a6 Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Fri, 14 Jun 2024 15:40:55 +0200 Subject: [PATCH 3/5] fix(Rendering): Don't use cache if force vector output is enabled --- src/core/maprenderer/qgsmaprendererjob.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/maprenderer/qgsmaprendererjob.cpp b/src/core/maprenderer/qgsmaprendererjob.cpp index b3908140f5d1..fcdb0a0dfaca 100644 --- a/src/core/maprenderer/qgsmaprendererjob.cpp +++ b/src/core/maprenderer/qgsmaprendererjob.cpp @@ -600,8 +600,8 @@ std::vector QgsMapRendererJob::prepareJobs( QPainter *painter, Q const QgsElevationShadingRenderer shadingRenderer = mSettings.elevationShadingRenderer(); // if we can use the cache, let's do it and avoid rendering! - if ( !mSettings.testFlag( Qgis::MapSettingsFlag::ForceVectorOutput ) - && mCache && mCache->hasCacheImage( ml->id() ) ) + const bool canUseCache = !mSettings.testFlag( Qgis::MapSettingsFlag::ForceVectorOutput ) && mCache; + if ( canUseCache && mCache->hasCacheImage( ml->id() ) ) { job.cached = true; job.imageInitialized = true; @@ -630,7 +630,7 @@ std::vector QgsMapRendererJob::prepareJobs( QPainter *painter, Q // If we are drawing with an alternative blending mode then we need to render to a separate image // before compositing this on the map. This effectively flattens the layer and prevents // blending occurring between objects on the layer - if ( mCache || ( !painter && !deferredPainterSet ) || ( job.renderer && job.renderer->forceRasterRender() ) ) + if ( canUseCache || ( !painter && !deferredPainterSet ) || ( job.renderer && job.renderer->forceRasterRender() ) ) { // Flattened image for drawing when a blending mode is set job.context()->setPainter( allocateImageAndPainter( ml->id(), job.img, job.context() ) ); @@ -653,7 +653,7 @@ std::vector QgsMapRendererJob::prepareJobs( QPainter *painter, Q if ( ( job.renderer->flags() & Qgis::MapLayerRendererFlag::RenderPartialOutputs ) && ( mSettings.flags() & Qgis::MapSettingsFlag::RenderPartialOutput ) ) { - if ( mCache && ( job.renderer->flags() & Qgis::MapLayerRendererFlag::RenderPartialOutputOverPreviousCachedImage ) && mCache->hasAnyCacheImage( job.layerId + QStringLiteral( "_preview" ) ) ) + if ( canUseCache && ( job.renderer->flags() & Qgis::MapLayerRendererFlag::RenderPartialOutputOverPreviousCachedImage ) && mCache->hasAnyCacheImage( job.layerId + QStringLiteral( "_preview" ) ) ) { const QImage cachedImage = mCache->transformedCacheImage( job.layerId + QStringLiteral( "_preview" ), mSettings.mapToPixel() ); if ( !cachedImage.isNull() ) From 58a8b3634e79cc7b95287dc6818545b38b38e9c0 Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Tue, 18 Jun 2024 14:14:04 +0200 Subject: [PATCH 4/5] fix(SelectiveMasking): Properly create marker line symbol layer --- tests/src/python/test_selective_masking.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/src/python/test_selective_masking.py b/tests/src/python/test_selective_masking.py index a993b87617a1..e417e8fe5392 100644 --- a/tests/src/python/test_selective_masking.py +++ b/tests/src/python/test_selective_masking.py @@ -1358,7 +1358,9 @@ def test_markerline_masked(self): circle_symbol = QgsMarkerSymbol.createSimple({'size': '3'}) sl.setSubSymbol(circle_symbol) - self.lines_layer.setRenderer(QgsSingleSymbolRenderer(QgsLineSymbol([sl]))) + symbol = QgsLineSymbol.createSimple({}) + symbol.changeSymbolLayer(0, sl) + self.lines_layer.setRenderer(QgsSingleSymbolRenderer(symbol)) self.polys_layer.setRenderer(QgsNullSymbolRenderer()) label_settings = self.polys_layer.labeling().settings() From bcea99e3309676ae96720316ab5618bd6a7bb6af Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Tue, 18 Jun 2024 08:40:08 +0200 Subject: [PATCH 5/5] fix(SelectiveMasking): Update mask --- .../layout_export_markerline_masked_mask.png | Bin 10541 -> 10550 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/testdata/control_images/selective_masking/layout_export_markerline_masked/layout_export_markerline_masked_mask.png b/tests/testdata/control_images/selective_masking/layout_export_markerline_masked/layout_export_markerline_masked_mask.png index b9615fffedc1c157c2654a3b787100e08b4c18d0..6ea2f0008eeb9125037a964d0fbcc63491c86b86 100644 GIT binary patch delta 4242 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