Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add virtual method QgsFeatureRenderer::usesEmbeddedSymbols()
Should return true for feature renderers which require embedded
feature symbology. The corresponding feature request flag will
be set on the iterator used for the renderer will rendering vector
layers.
  • Loading branch information
nyalldawson committed Mar 6, 2021
1 parent c371bc3 commit f32d563
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 2 deletions.
10 changes: 9 additions & 1 deletion python/core/auto_generated/symbology/qgsrenderer.sip.in
Expand Up @@ -167,6 +167,14 @@ Returns a list of attributes required by this renderer. Attributes not listed in
not have been requested from the provider at rendering time.

:return: A set of attributes
%End

virtual bool usesEmbeddedSymbols() const;
%Docstring
Returns ``True`` if the renderer uses embedded symbols for features.
The default implementation returns ``False``.

.. versionadded:: 3.20
%End

virtual bool filterNeedsGeometry() const;
Expand All @@ -192,7 +200,7 @@ Default implementation renders a symbol as determined by :py:func:`~QgsFeatureRe
Returns ``True`` if the feature has been returned (this is used for example
to determine whether the feature may be labelled).

If layer is not -1, the renderer should draw only a particula layer from symbols
If layer is not -1, the renderer should draw only a particular layer from symbols
(in order to support symbol level rendering).

.. seealso:: :py:func:`startRender`
Expand Down
5 changes: 5 additions & 0 deletions src/core/symbology/qgsrenderer.cpp
Expand Up @@ -112,6 +112,11 @@ void QgsFeatureRenderer::stopRender( QgsRenderContext & )
#endif
}

bool QgsFeatureRenderer::usesEmbeddedSymbols() const
{
return false;
}

bool QgsFeatureRenderer::filterNeedsGeometry() const
{
return false;
Expand Down
10 changes: 9 additions & 1 deletion src/core/symbology/qgsrenderer.h
Expand Up @@ -212,6 +212,14 @@ class CORE_EXPORT QgsFeatureRenderer
*/
virtual QSet<QString> usedAttributes( const QgsRenderContext &context ) const = 0;

/**
* Returns TRUE if the renderer uses embedded symbols for features.
* The default implementation returns FALSE.
*
* \since QGIS 3.20
*/
virtual bool usesEmbeddedSymbols() const;

/**
* Returns TRUE if this renderer requires the geometry to apply the filter.
*/
Expand All @@ -234,7 +242,7 @@ class CORE_EXPORT QgsFeatureRenderer
* Returns TRUE if the feature has been returned (this is used for example
* to determine whether the feature may be labelled).
*
* If layer is not -1, the renderer should draw only a particula layer from symbols
* If layer is not -1, the renderer should draw only a particular layer from symbols
* (in order to support symbol level rendering).
*
* \see startRender()
Expand Down
5 changes: 5 additions & 0 deletions src/core/vector/qgsvectorlayerrenderer.cpp
Expand Up @@ -313,6 +313,11 @@ bool QgsVectorLayerRenderer::renderInternal( QgsFeatureRenderer *renderer )
featureRequest.combineFilterExpression( mTemporalFilter );
}

if ( renderer->usesEmbeddedSymbols() )
{
featureRequest.setFlags( featureRequest.flags() | QgsFeatureRequest::EmbeddedSymbols );
}

// enable the simplification of the geometries (Using the current map2pixel context) before send it to renderer engine.
if ( mSimplifyGeometry )
{
Expand Down

0 comments on commit f32d563

Please sign in to comment.