diff --git a/src/server/services/wms/qgsdxfwriter.cpp b/src/server/services/wms/qgsdxfwriter.cpp index 0eeb41a7a71..1c9c6ad7f98 100644 --- a/src/server/services/wms/qgsdxfwriter.cpp +++ b/src/server/services/wms/qgsdxfwriter.cpp @@ -22,17 +22,24 @@ email : david dot marteau at 3liz dot com namespace QgsWms { void writeAsDxf( QgsServerInterface *serverIface, const QgsProject *project, - const QString &version, const QgsServerRequest &request, + const QString &, const QgsServerRequest &request, QgsServerResponse &response ) { - Q_UNUSED( version ); + // get wms parameters from query + QgsWmsParameters parameters( QUrlQuery( request.url() ) ); - QgsWmsParameters wmsParameters( QUrlQuery( request.url() ) ); - QgsRenderer renderer( serverIface, project, wmsParameters ); + // prepare render context + QgsWmsRenderContext context( project, serverIface ); + context.setFlag( QgsWmsRenderContext::UseWfsLayersOnly ); + context.setFlag( QgsWmsRenderContext::UseOpacity ); + context.setFlag( QgsWmsRenderContext::UseFilter ); + context.setFlag( QgsWmsRenderContext::SetAccessControl ); + context.setParameters( parameters ); // Write output + QgsRenderer renderer( context ); QgsDxfExport dxf = renderer.getDxf(); response.setHeader( "Content-Type", "application/dxf" ); - dxf.writeToFile( response.io(), wmsParameters.dxfCodec() ); + dxf.writeToFile( response.io(), parameters.dxfCodec() ); } } // namespace QgsWms diff --git a/src/server/services/wms/qgswmsrenderer.cpp b/src/server/services/wms/qgswmsrenderer.cpp index 0f4de975f5b..e04997a2985 100644 --- a/src/server/services/wms/qgswmsrenderer.cpp +++ b/src/server/services/wms/qgswmsrenderer.cpp @@ -801,33 +801,13 @@ namespace QgsWms QgsDxfExport QgsRenderer::getDxf() { - QgsDxfExport dxf; - - // set extent - QgsRectangle extent = mWmsParameters.bboxAsRectangle(); - dxf.setExtent( extent ); - - // get layers parameters - QList layers; - QList params = mWmsParameters.layersParameters(); - // init layer restorer before doing anything std::unique_ptr restorer; - restorer.reset( new QgsLayerRestorer( mNicknameLayers.values() ) ); + restorer.reset( new QgsLayerRestorer( mContext.layers() ) ); - // init stylized layers according to LAYERS/STYLES or SLD - QString sld = mWmsParameters.sldBody(); - if ( !sld.isEmpty() ) - { - layers = sldStylizedLayers( sld ); - } - else - { - layers = stylizedLayers( params ); - } - - // only wfs layers are allowed to be published - QStringList wfsLayerIds = QgsServerProjectUtils::wfsLayerIds( *mProject ); + // configure layers + QList layers = mContext.layersToRender(); + configureLayers( layers ); // get dxf layers const QStringList attributes = mWmsParameters.dxfLayerAttributes(); @@ -838,24 +818,6 @@ namespace QgsWms layerIdx++; if ( layer->type() != QgsMapLayerType::VectorLayer ) continue; - if ( !wfsLayerIds.contains( layer->id() ) ) - continue; - - checkLayerReadPermissions( layer ); - - for ( const QgsWmsParametersLayer ¶m : params ) - { - if ( param.mNickname == layerNickname( *layer ) ) - { - setLayerOpacity( layer, param.mOpacity ); - - setLayerFilter( layer, param.mFilter ); - - break; - } - } - - setLayerAccessControlFilter( layer ); // cast for dxf layers QgsVectorLayer *vlayer = static_cast( layer ); @@ -871,6 +833,8 @@ namespace QgsWms } // add layers to dxf + QgsDxfExport dxf; + dxf.setExtent( mWmsParameters.bboxAsRectangle() ); dxf.addLayers( dxfLayers ); dxf.setLayerTitleAsName( mWmsParameters.dxfUseLayerTitleAsName() ); dxf.setSymbologyExport( mWmsParameters.dxfMode() );