From b1b7904e14f592e7f4f05d3d97bf693e132728a4 Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Tue, 10 Dec 2013 16:00:58 +0100 Subject: [PATCH] Dxf: possibility to export only the features overlapping the map extent --- src/app/qgisapp.cpp | 7 +++++++ src/app/qgsdxfexportdialog.cpp | 5 +++++ src/app/qgsdxfexportdialog.h | 1 + src/core/dxf/qgsdxfexport.cpp | 14 +++++++++++--- src/core/dxf/qgsdxfexport.h | 5 +++++ src/ui/qgsdxfexportdialogbase.ui | 7 +++++++ 6 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 98fec48a1ee8..84d4f1d0199b 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -3846,7 +3846,14 @@ void QgisApp::dxfExport() { dxfExport.setMapUnits( r->mapUnits() ); } + + //extent + if ( d.exportMapExtent() ) + { + dxfExport.setExtent( mapCanvas()->extent() ); + } } + QFile dxfFile( d.saveFile() ); if ( dxfExport.writeToFile( &dxfFile ) == 0 ) { diff --git a/src/app/qgsdxfexportdialog.cpp b/src/app/qgsdxfexportdialog.cpp index 8f8e31cd6840..fab7925042bf 100644 --- a/src/app/qgsdxfexportdialog.cpp +++ b/src/app/qgsdxfexportdialog.cpp @@ -140,6 +140,11 @@ void QgsDxfExportDialog::setOkEnabled() btn->setEnabled( fi.absoluteDir().exists() ); } +bool QgsDxfExportDialog::exportMapExtent() const +{ + return mMapExtentCheckBox->isChecked(); +} + void QgsDxfExportDialog::saveSettings() { QSettings s; diff --git a/src/app/qgsdxfexportdialog.h b/src/app/qgsdxfexportdialog.h index 0de284b66146..5db41c1a3930 100644 --- a/src/app/qgsdxfexportdialog.h +++ b/src/app/qgsdxfexportdialog.h @@ -32,6 +32,7 @@ class QgsDxfExportDialog: public QDialog, private Ui::QgsDxfExportDialogBase double symbologyScale() const; QgsDxfExport::SymbologyExport symbologyMode() const; QString saveFile() const; + bool exportMapExtent() const; public slots: /** change the selection of layers in the list */ diff --git a/src/core/dxf/qgsdxfexport.cpp b/src/core/dxf/qgsdxfexport.cpp index 249ee2371165..08c6a50871c7 100644 --- a/src/core/dxf/qgsdxfexport.cpp +++ b/src/core/dxf/qgsdxfexport.cpp @@ -565,9 +565,13 @@ void QgsDxfExport::writeEntities() renderer->stopRender( ctx ); } - - QgsFeatureIterator featureIt = vl->getFeatures( QgsFeatureRequest().setSubsetOfAttributes( - renderer->usedAttributes(), dp->fields() ) ); + QgsFeatureRequest freq = QgsFeatureRequest().setSubsetOfAttributes( + renderer->usedAttributes(), dp->fields() ); + if ( !mExtent.isEmpty() ) + { + freq.setFilterRect( mExtent ); + } + QgsFeatureIterator featureIt = vl->getFeatures( freq ); QgsFeature fet; while ( featureIt.nextFeature( fet ) ) { @@ -625,6 +629,10 @@ void QgsDxfExport::writeEntitiesSymbolLevels( QgsVectorLayer* layer ) req.setFlags( QgsFeatureRequest::NoGeometry ); } req.setSubsetOfAttributes( QStringList( renderer->usedAttributes() ), layer->pendingFields() ); + if ( !mExtent.isEmpty() ) + { + req.setFilterRect( mExtent ); + } QgsFeatureIterator fit = layer->getFeatures( req ); //fetch features diff --git a/src/core/dxf/qgsdxfexport.h b/src/core/dxf/qgsdxfexport.h index 36ad1105a29a..78da88f4e30f 100644 --- a/src/core/dxf/qgsdxfexport.h +++ b/src/core/dxf/qgsdxfexport.h @@ -56,6 +56,9 @@ class CORE_EXPORT QgsDxfExport void setSymbologyExport( SymbologyExport e ) { mSymbologyExport = e; } SymbologyExport symbologyExport() const { return mSymbologyExport; } + void setExtent( const QgsRectangle& r ) { mExtent = r; } + QgsRectangle extent() const { return mExtent; } + //get closest entry in dxf palette static int closestColorMatch( QRgb pixel ); @@ -83,6 +86,8 @@ class CORE_EXPORT QgsDxfExport private: QList< QgsMapLayer* > mLayers; + /**Extent for export, only intersecting features are exported. If the extent is an empty rectangle, all features are exported*/ + QgsRectangle mExtent; /**Scale for symbology export (used if symbols units are mm)*/ double mSymbologyScaleDenominator; SymbologyExport mSymbologyExport; diff --git a/src/ui/qgsdxfexportdialogbase.ui b/src/ui/qgsdxfexportdialogbase.ui index 121ed0e674bf..1e8edef915aa 100644 --- a/src/ui/qgsdxfexportdialogbase.ui +++ b/src/ui/qgsdxfexportdialogbase.ui @@ -115,6 +115,13 @@ + + + + Export features intersecting the current map extent + + +