mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-15 00:07:25 -05:00
parent
d9a47a1e46
commit
6d02a2abb0
@ -311,6 +311,20 @@ Returns the current list of predefined scales for use with the layout.
|
||||
.. seealso:: :py:func:`setPredefinedScales`
|
||||
|
||||
.. versionadded:: 3.10
|
||||
%End
|
||||
|
||||
QgsFeatureFilterProvider *featureFilterProvider() const;
|
||||
%Docstring
|
||||
Returns the possibly NULL featureFilterProvider
|
||||
|
||||
.. versionadded:: 3.18
|
||||
%End
|
||||
|
||||
void setFeatureFilterProvider( QgsFeatureFilterProvider *featureFilterProvider );
|
||||
%Docstring
|
||||
Sets ``featureFilterProvider``
|
||||
|
||||
.. versionadded:: 3.18
|
||||
%End
|
||||
|
||||
signals:
|
||||
|
||||
@ -1346,6 +1346,10 @@ void QgsLayoutItemMap::drawMap( QPainter *painter, const QgsRectangle &extent, Q
|
||||
}
|
||||
|
||||
QgsMapRendererCustomPainterJob job( ms, painter );
|
||||
#ifdef HAVE_SERVER_PYTHON_PLUGINS
|
||||
job.setFeatureFilterProvider( mLayout->renderContext().featureFilterProvider() );
|
||||
#endif
|
||||
|
||||
// Render the map in this thread. This is done because of problems
|
||||
// with printing to printer on Windows (printing to PDF is fine though).
|
||||
// Raster images were not displayed - see #10599
|
||||
|
||||
@ -133,3 +133,13 @@ void QgsLayoutRenderContext::setPredefinedScales( const QVector<qreal> &scales )
|
||||
std::sort( mPredefinedScales.begin(), mPredefinedScales.end() ); // clazy:exclude=detaching-member
|
||||
emit predefinedScalesChanged();
|
||||
}
|
||||
|
||||
QgsFeatureFilterProvider *QgsLayoutRenderContext::featureFilterProvider() const
|
||||
{
|
||||
return mFeatureFilterProvider;
|
||||
}
|
||||
|
||||
void QgsLayoutRenderContext::setFeatureFilterProvider( QgsFeatureFilterProvider *featureFilterProvider )
|
||||
{
|
||||
mFeatureFilterProvider = featureFilterProvider;
|
||||
}
|
||||
|
||||
@ -297,6 +297,18 @@ class CORE_EXPORT QgsLayoutRenderContext : public QObject
|
||||
*/
|
||||
QVector<qreal> predefinedScales() const { return mPredefinedScales; }
|
||||
|
||||
/**
|
||||
* Returns the possibly NULL featureFilterProvider
|
||||
* \since QGIS 3.18
|
||||
*/
|
||||
QgsFeatureFilterProvider *featureFilterProvider() const;
|
||||
|
||||
/**
|
||||
* Sets \a featureFilterProvider
|
||||
* \since QGIS 3.18
|
||||
*/
|
||||
void setFeatureFilterProvider( QgsFeatureFilterProvider *featureFilterProvider );
|
||||
|
||||
signals:
|
||||
|
||||
/**
|
||||
@ -342,6 +354,8 @@ class CORE_EXPORT QgsLayoutRenderContext : public QObject
|
||||
|
||||
QVector<qreal> mPredefinedScales;
|
||||
|
||||
QgsFeatureFilterProvider *mFeatureFilterProvider = nullptr;
|
||||
|
||||
friend class QgsLayoutExporter;
|
||||
friend class TestQgsLayout;
|
||||
friend class LayoutContextPreviewSettingRestorer;
|
||||
|
||||
@ -64,7 +64,7 @@ void QgsAccessControl::filterFeatures( const QgsVectorLayer *layer, QgsFeatureRe
|
||||
|
||||
QString expression;
|
||||
|
||||
if ( mResolved && mFilterFeaturesExpressions.keys().contains( layer->id() ) )
|
||||
if ( mResolved && mFilterFeaturesExpressions.contains( layer->id() ) )
|
||||
{
|
||||
expression = mFilterFeaturesExpressions[layer->id()];
|
||||
}
|
||||
|
||||
@ -64,6 +64,7 @@ namespace QgsWms
|
||||
context.setFlag( QgsWmsRenderContext::SetAccessControl );
|
||||
context.setFlag( QgsWmsRenderContext::AddHighlightLayers );
|
||||
context.setFlag( QgsWmsRenderContext::AddExternalLayers );
|
||||
context.setFlag( QgsWmsRenderContext::AddAllLayers );
|
||||
context.setParameters( parameters );
|
||||
|
||||
// rendering
|
||||
|
||||
@ -182,7 +182,7 @@ qreal QgsWmsRenderContext::dotsPerMm() const
|
||||
return dpm / 1000.0;
|
||||
}
|
||||
|
||||
QStringList QgsWmsRenderContext::flattenedQueryLayers() const
|
||||
QStringList QgsWmsRenderContext::flattenedQueryLayers( const QStringList &layerNames ) const
|
||||
{
|
||||
QStringList result;
|
||||
std::function <QStringList( const QString &name )> findLeaves = [ & ]( const QString & name ) -> QStringList
|
||||
@ -211,8 +211,8 @@ QStringList QgsWmsRenderContext::flattenedQueryLayers() const
|
||||
}
|
||||
return _result;
|
||||
};
|
||||
const auto constNicks { mParameters.queryLayersNickname() };
|
||||
for ( const auto &name : constNicks )
|
||||
|
||||
for ( const auto &name : qgis::as_const( layerNames ) )
|
||||
{
|
||||
result.append( findLeaves( name ) );
|
||||
}
|
||||
@ -429,7 +429,21 @@ void QgsWmsRenderContext::searchLayersToRender()
|
||||
|
||||
if ( mFlags & AddQueryLayers )
|
||||
{
|
||||
const QStringList queryLayerNames { flattenedQueryLayers() };
|
||||
const QStringList queryLayerNames = flattenedQueryLayers( mParameters.queryLayersNickname() );
|
||||
for ( const QString &layerName : queryLayerNames )
|
||||
{
|
||||
const QList<QgsMapLayer *> layers = mNicknameLayers.values( layerName );
|
||||
for ( QgsMapLayer *lyr : layers )
|
||||
if ( !mLayersToRender.contains( lyr ) )
|
||||
{
|
||||
mLayersToRender.append( lyr );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( mFlags & AddAllLayers )
|
||||
{
|
||||
const QStringList queryLayerNames = flattenedQueryLayers( mParameters.allLayersNickname() );
|
||||
for ( const QString &layerName : queryLayerNames )
|
||||
{
|
||||
const QList<QgsMapLayer *> layers = mNicknameLayers.values( layerName );
|
||||
|
||||
@ -48,7 +48,8 @@ namespace QgsWms
|
||||
UseWfsLayersOnly = 0x100,
|
||||
AddExternalLayers = 0x200,
|
||||
UseSrcWidthHeight = 0x400,
|
||||
UseTileBuffer = 0x800
|
||||
UseTileBuffer = 0x800,
|
||||
AddAllLayers = 0x1000 //!< For GetPrint: add layers from LAYER(S) parameter
|
||||
};
|
||||
Q_DECLARE_FLAGS( Flags, Flag )
|
||||
|
||||
@ -209,7 +210,7 @@ namespace QgsWms
|
||||
* Returns a list of query layer names where group names are replaced by the names of their layer components.
|
||||
* \since QGIS 3.8
|
||||
*/
|
||||
QStringList flattenedQueryLayers() const;
|
||||
QStringList flattenedQueryLayers( const QStringList &layerNames ) const;
|
||||
|
||||
#ifdef HAVE_SERVER_PYTHON_PLUGINS
|
||||
|
||||
|
||||
@ -427,6 +427,14 @@ namespace QgsWms
|
||||
// configure layout
|
||||
configurePrintLayout( layout.get(), mapSettings, atlas );
|
||||
|
||||
#ifdef HAVE_SERVER_PYTHON_PLUGINS
|
||||
QgsFeatureFilterProviderGroup filters;
|
||||
mContext.accessControl()->resolveFilterFeatures( mapSettings.layers() );
|
||||
filters.addProvider( mContext.accessControl() );
|
||||
QgsLayoutRenderContext &layoutRendererContext = layout->renderContext();
|
||||
layoutRendererContext.setFeatureFilterProvider( &filters );
|
||||
#endif
|
||||
|
||||
// Get the temporary output file
|
||||
const QgsWmsParameters::Format format = mWmsParameters.format();
|
||||
const QString extension = QgsWmsParameters::formatAsString( format ).toLower();
|
||||
@ -556,6 +564,7 @@ namespace QgsWms
|
||||
|
||||
bool QgsRenderer::configurePrintLayout( QgsPrintLayout *c, const QgsMapSettings &mapSettings, bool atlasPrint )
|
||||
{
|
||||
|
||||
c->renderContext().setSelectionColor( mapSettings.selectionColor() );
|
||||
// Maps are configured first
|
||||
QList<QgsLayoutItemMap *> maps;
|
||||
@ -1174,7 +1183,7 @@ namespace QgsWms
|
||||
QDomDocument QgsRenderer::featureInfoDocument( QList<QgsMapLayer *> &layers, const QgsMapSettings &mapSettings,
|
||||
const QImage *outputImage, const QString &version ) const
|
||||
{
|
||||
const QStringList queryLayers = mContext.flattenedQueryLayers( );
|
||||
const QStringList queryLayers = mContext.flattenedQueryLayers( mContext.parameters().queryLayersNickname() );
|
||||
|
||||
bool ijDefined = ( !mWmsParameters.i().isEmpty() && !mWmsParameters.j().isEmpty() );
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user