Add maximumExtentBuffer() function to QgsFeatureRenderer

This commit is contained in:
JuhoErvasti 2024-12-04 09:30:43 +02:00 committed by Nyall Dawson
parent ccc7df5966
commit 5c49205bd2
4 changed files with 66 additions and 0 deletions

View File

@ -628,6 +628,18 @@ Currently clones
:param destRenderer: destination renderer for copied effect
.. versionadded:: 3.22
%End
double maximumExtentBuffer( QgsRenderContext &context ) const;
%Docstring
Returns the maximum extent buffer found in this renderer's
symbols' symbol layers.
.. note::
Returns 0 if the renderer doesn't have any symbols.
.. versionadded:: 3.42
%End
protected:

View File

@ -628,6 +628,18 @@ Currently clones
:param destRenderer: destination renderer for copied effect
.. versionadded:: 3.22
%End
double maximumExtentBuffer( QgsRenderContext &context ) const;
%Docstring
Returns the maximum extent buffer found in this renderer's
symbols' symbol layers.
.. note::
Returns 0 if the renderer doesn't have any symbols.
.. versionadded:: 3.42
%End
protected:

View File

@ -38,6 +38,7 @@
#include <QDomDocument>
#include <QPolygonF>
#include <QThread>
#include <algorithm>
QgsPropertiesDefinition QgsFeatureRenderer::sPropertyDefinitions;
@ -417,6 +418,38 @@ QgsLegendSymbolList QgsFeatureRenderer::legendSymbolItems() const
return QgsLegendSymbolList();
}
double QgsFeatureRenderer::maximumExtentBuffer( QgsRenderContext &context ) const
{
const QgsSymbolList symbolList = symbols( context );
if ( symbolList.empty() )
return 0;
const QgsExpressionContext &expContext = context.expressionContext();
auto getValueFromSymbol = [ &expContext ]( const QgsSymbol * sym ) -> double
{
const QgsProperty property = sym->dataDefinedProperties().property( QgsSymbol::Property::ExtentBuffer );
if ( property.isActive() && ! property.expressionString().isEmpty() )
{
return sym->dataDefinedProperties().valueAsDouble( QgsSymbol::Property::ExtentBuffer, expContext );
}
return sym->extentBuffer();
};
if ( symbolList.size() == 1 )
return getValueFromSymbol( symbolList[0] );
auto it = std::max_element( symbolList.constBegin(), symbolList.constEnd(), [ &getValueFromSymbol ]( const QgsSymbol * a, const QgsSymbol * b ) -> bool
{
return getValueFromSymbol( a ) < getValueFromSymbol( b );
} );
return getValueFromSymbol( *it );
}
QList<QgsLayerTreeModelLegendNode *> QgsFeatureRenderer::createLegendNodes( QgsLayerTreeLayer *nodeLayer ) const
{
QList<QgsLayerTreeModelLegendNode *> nodes;

View File

@ -653,6 +653,15 @@ class CORE_EXPORT QgsFeatureRenderer
*/
void copyRendererData( QgsFeatureRenderer *destRenderer ) const;
/**
* Returns the maximum extent buffer found in this renderer's
* symbols' symbol layers.
*
* \note Returns 0 if the renderer doesn't have any symbols.
* \since QGIS 3.42
*/
double maximumExtentBuffer( QgsRenderContext &context ) const;
protected:
QgsFeatureRenderer( const QString &type );