mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-09 00:08:52 -04:00
Merge pull request #58790 from elpaso/bugfix-gh57422-server-cascading-legend-size
[server] WMS GetLegendGr.. cascading size
This commit is contained in:
commit
bcaea01703
@ -661,6 +661,14 @@ Constructor for QgsWmsLegendNode.
|
|||||||
virtual void invalidateMapBasedData();
|
virtual void invalidateMapBasedData();
|
||||||
|
|
||||||
|
|
||||||
|
QImage getLegendGraphicBlocking( ) const;
|
||||||
|
%Docstring
|
||||||
|
Fetches the image from the server and returns it.
|
||||||
|
|
||||||
|
.. versionadded:: 3.40
|
||||||
|
%End
|
||||||
|
|
||||||
|
|
||||||
SIP_PYOBJECT __repr__();
|
SIP_PYOBJECT __repr__();
|
||||||
%MethodCode
|
%MethodCode
|
||||||
QString str = QStringLiteral( "<QgsWmsLegendNode: \"%1\">" ).arg( sipCpp->data( Qt::DisplayRole ).toString() );
|
QString str = QStringLiteral( "<QgsWmsLegendNode: \"%1\">" ).arg( sipCpp->data( Qt::DisplayRole ).toString() );
|
||||||
|
@ -661,6 +661,14 @@ Constructor for QgsWmsLegendNode.
|
|||||||
virtual void invalidateMapBasedData();
|
virtual void invalidateMapBasedData();
|
||||||
|
|
||||||
|
|
||||||
|
QImage getLegendGraphicBlocking( ) const;
|
||||||
|
%Docstring
|
||||||
|
Fetches the image from the server and returns it.
|
||||||
|
|
||||||
|
.. versionadded:: 3.40
|
||||||
|
%End
|
||||||
|
|
||||||
|
|
||||||
SIP_PYOBJECT __repr__();
|
SIP_PYOBJECT __repr__();
|
||||||
%MethodCode
|
%MethodCode
|
||||||
QString str = QStringLiteral( "<QgsWmsLegendNode: \"%1\">" ).arg( sipCpp->data( Qt::DisplayRole ).toString() );
|
QString str = QStringLiteral( "<QgsWmsLegendNode: \"%1\">" ).arg( sipCpp->data( Qt::DisplayRole ).toString() );
|
||||||
|
@ -1462,6 +1462,11 @@ void QgsWmsLegendNode::invalidateMapBasedData()
|
|||||||
emit dataChanged();
|
emit dataChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QImage QgsWmsLegendNode::getLegendGraphicBlocking() const
|
||||||
|
{
|
||||||
|
return getLegendGraphic( true );
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
QgsDataDefinedSizeLegendNode::QgsDataDefinedSizeLegendNode( QgsLayerTreeLayer *nodeLayer, const QgsDataDefinedSizeLegend &settings, QObject *parent )
|
QgsDataDefinedSizeLegendNode::QgsDataDefinedSizeLegendNode( QgsLayerTreeLayer *nodeLayer, const QgsDataDefinedSizeLegend &settings, QObject *parent )
|
||||||
|
@ -747,6 +747,13 @@ class CORE_EXPORT QgsWmsLegendNode : public QgsLayerTreeModelLegendNode
|
|||||||
|
|
||||||
void invalidateMapBasedData() override;
|
void invalidateMapBasedData() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches the image from the server and returns it.
|
||||||
|
* \since QGIS 3.40
|
||||||
|
*/
|
||||||
|
QImage getLegendGraphicBlocking( ) const;
|
||||||
|
|
||||||
|
|
||||||
#ifdef SIP_RUN
|
#ifdef SIP_RUN
|
||||||
SIP_PYOBJECT __repr__();
|
SIP_PYOBJECT __repr__();
|
||||||
% MethodCode
|
% MethodCode
|
||||||
@ -763,7 +770,7 @@ class CORE_EXPORT QgsWmsLegendNode : public QgsLayerTreeModelLegendNode
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Lazily initializes mImage
|
// Lazy loading of the image
|
||||||
QImage getLegendGraphic( bool synchronous = false ) const;
|
QImage getLegendGraphic( bool synchronous = false ) const;
|
||||||
|
|
||||||
QImage renderMessage( const QString &msg ) const;
|
QImage renderMessage( const QString &msg ) const;
|
||||||
|
@ -124,8 +124,36 @@ namespace QgsWms
|
|||||||
QList<QgsMapLayer *> layers = mContext.layersToRender();
|
QList<QgsMapLayer *> layers = mContext.layersToRender();
|
||||||
configureLayers( layers );
|
configureLayers( layers );
|
||||||
|
|
||||||
// init renderer
|
const qreal dpmm = mContext.dotsPerMm();
|
||||||
|
|
||||||
QgsLegendSettings settings = legendSettings();
|
QgsLegendSettings settings = legendSettings();
|
||||||
|
|
||||||
|
// adjust the size settings if there any WMS cascading layers to renderer
|
||||||
|
const auto layersToRender = mContext.layersToRender();
|
||||||
|
for ( const auto &layer : std::as_const( layersToRender ) )
|
||||||
|
{
|
||||||
|
// If it is a cascading WMS layer, get legend node image size
|
||||||
|
if ( layer->dataProvider()->name() == QStringLiteral( "wms" ) )
|
||||||
|
{
|
||||||
|
if ( QgsWmsLegendNode *layerNode = qobject_cast<QgsWmsLegendNode *>( model.findLegendNode( layer->id(), QString() ) ) )
|
||||||
|
{
|
||||||
|
const auto image { layerNode->getLegendGraphicBlocking( ) };
|
||||||
|
if ( ! image.isNull() )
|
||||||
|
{
|
||||||
|
// Check that we are not exceeding the maximum size
|
||||||
|
if ( mContext.isValidWidthHeight( image.width(), image.height() ) )
|
||||||
|
{
|
||||||
|
const double w = image.width() / dpmm;
|
||||||
|
const double h = image.height() / dpmm;
|
||||||
|
const QSizeF newWmsSize { w, h };
|
||||||
|
settings.setWmsLegendSize( newWmsSize );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// init renderer
|
||||||
QgsLegendRenderer renderer( &model, settings );
|
QgsLegendRenderer renderer( &model, settings );
|
||||||
|
|
||||||
// create context
|
// create context
|
||||||
@ -146,7 +174,6 @@ namespace QgsWms
|
|||||||
|
|
||||||
// create image according to context
|
// create image according to context
|
||||||
std::unique_ptr<QImage> image;
|
std::unique_ptr<QImage> image;
|
||||||
const qreal dpmm = mContext.dotsPerMm();
|
|
||||||
const QSizeF minSize = renderer.minimumSize( &context );
|
const QSizeF minSize = renderer.minimumSize( &context );
|
||||||
const QSize size( static_cast<int>( minSize.width() * dpmm ), static_cast<int>( minSize.height() * dpmm ) );
|
const QSize size( static_cast<int>( minSize.width() * dpmm ), static_cast<int>( minSize.height() * dpmm ) );
|
||||||
if ( !mContext.isValidWidthHeight( size.width(), size.height() ) )
|
if ( !mContext.isValidWidthHeight( size.width(), size.height() ) )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user