Skip to content

Commit

Permalink
Dxf: possibility to export only the features overlapping the map extent
Browse files Browse the repository at this point in the history
  • Loading branch information
mhugent committed Dec 10, 2013
1 parent b6f7a99 commit b1b7904
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 3 deletions.
7 changes: 7 additions & 0 deletions src/app/qgisapp.cpp
Expand Up @@ -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 )
{
Expand Down
5 changes: 5 additions & 0 deletions src/app/qgsdxfexportdialog.cpp
Expand Up @@ -140,6 +140,11 @@ void QgsDxfExportDialog::setOkEnabled()
btn->setEnabled( fi.absoluteDir().exists() );
}

bool QgsDxfExportDialog::exportMapExtent() const
{
return mMapExtentCheckBox->isChecked();
}

void QgsDxfExportDialog::saveSettings()
{
QSettings s;
Expand Down
1 change: 1 addition & 0 deletions src/app/qgsdxfexportdialog.h
Expand Up @@ -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 */
Expand Down
14 changes: 11 additions & 3 deletions src/core/dxf/qgsdxfexport.cpp
Expand Up @@ -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 ) )
{
Expand Down Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions src/core/dxf/qgsdxfexport.h
Expand Up @@ -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 );

Expand Down Expand Up @@ -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;
Expand Down
7 changes: 7 additions & 0 deletions src/ui/qgsdxfexportdialogbase.ui
Expand Up @@ -115,6 +115,13 @@
</item>
</layout>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="mMapExtentCheckBox">
<property name="text">
<string>Export features intersecting the current map extent</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
Expand Down

0 comments on commit b1b7904

Please sign in to comment.