Navigation Menu

Skip to content

Commit

Permalink
Update getDxf with render context
Browse files Browse the repository at this point in the history
  • Loading branch information
pblottiere committed Mar 27, 2019
1 parent 24f3f97 commit 66d4de6
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 47 deletions.
17 changes: 12 additions & 5 deletions src/server/services/wms/qgsdxfwriter.cpp
Expand Up @@ -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
48 changes: 6 additions & 42 deletions src/server/services/wms/qgswmsrenderer.cpp
Expand Up @@ -801,33 +801,13 @@ namespace QgsWms

QgsDxfExport QgsRenderer::getDxf()
{
QgsDxfExport dxf;

// set extent
QgsRectangle extent = mWmsParameters.bboxAsRectangle();
dxf.setExtent( extent );

// get layers parameters
QList<QgsMapLayer *> layers;
QList<QgsWmsParametersLayer> params = mWmsParameters.layersParameters();

// init layer restorer before doing anything
std::unique_ptr<QgsLayerRestorer> restorer;
restorer.reset( new QgsLayerRestorer( mNicknameLayers.values() ) );

// init stylized layers according to LAYERS/STYLES or SLD
QString sld = mWmsParameters.sldBody();
if ( !sld.isEmpty() )
{
layers = sldStylizedLayers( sld );
}
else
{
layers = stylizedLayers( params );
}
restorer.reset( new QgsLayerRestorer( mContext.layers() ) );

// only wfs layers are allowed to be published
QStringList wfsLayerIds = QgsServerProjectUtils::wfsLayerIds( *mProject );
// configure layers
QList<QgsMapLayer *> layers = mContext.layersToRender();
configureLayers( layers );

// get dxf layers
const QStringList attributes = mWmsParameters.dxfLayerAttributes();
Expand All @@ -838,24 +818,6 @@ namespace QgsWms
layerIdx++;
if ( layer->type() != QgsMapLayerType::VectorLayer )
continue;
if ( !wfsLayerIds.contains( layer->id() ) )
continue;

checkLayerReadPermissions( layer );

for ( const QgsWmsParametersLayer &param : 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<QgsVectorLayer *>( layer );
Expand All @@ -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() );
Expand Down

0 comments on commit 66d4de6

Please sign in to comment.