Skip to content

Commit 5f11c33

Browse files
committedOct 24, 2014
dxf export: export layers only once and in drawing order
1 parent 8d26a95 commit 5f11c33

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed
 

‎src/app/qgsdxfexportdialog.cpp

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616
***************************************************************************/
1717

1818
#include "qgsdxfexportdialog.h"
19+
1920
#include "qgsmaplayer.h"
20-
#include "qgsmaplayerregistry.h"
2121
#include "qgslayertree.h"
2222
#include "qgslayertreegroup.h"
2323
#include "qgsvectorlayer.h"
2424
#include "qgsproject.h"
2525
#include "qgis.h"
2626
#include "qgsfieldcombobox.h"
27+
#include "qgisapp.h"
28+
#include "qgsmapcanvas.h"
2729

2830
#include <QFileDialog>
2931
#include <QPushButton>
@@ -181,6 +183,7 @@ bool QgsVectorLayerAndAttributeModel::setData( const QModelIndex &index, const Q
181183
QList< QPair<QgsVectorLayer *, int> > QgsVectorLayerAndAttributeModel::layers( const QModelIndexList &selectedIndexes ) const
182184
{
183185
QList< QPair<QgsVectorLayer *, int> > layers;
186+
QHash< QgsMapLayer *, int > layerIdx;
184187

185188
foreach ( const QModelIndex &idx, selectedIndexes )
186189
{
@@ -191,18 +194,40 @@ QList< QPair<QgsVectorLayer *, int> > QgsVectorLayerAndAttributeModel::layers( c
191194
{
192195
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( treeLayer->layer() );
193196
Q_ASSERT( vl );
194-
layers << qMakePair<QgsVectorLayer *, int>( vl, mAttributeIdx.value( vl, -1 ) );
197+
if ( !layerIdx.contains( vl ) )
198+
{
199+
layerIdx.insert( vl, layers.size() );
200+
layers << qMakePair<QgsVectorLayer *, int>( vl, mAttributeIdx.value( vl, -1 ) );
201+
}
195202
}
196203
}
197204
else if ( QgsLayerTree::isLayer( node ) )
198205
{
199206
QgsVectorLayer *vl = qobject_cast< QgsVectorLayer *>( QgsLayerTree::toLayer( node )->layer() );
200207
Q_ASSERT( vl );
201-
layers << qMakePair<QgsVectorLayer *, int>( vl, mAttributeIdx.value( vl, -1 ) );
208+
if ( !layerIdx.contains( vl ) )
209+
{
210+
layerIdx.insert( vl, layers.size() );
211+
layers << qMakePair<QgsVectorLayer *, int>( vl, mAttributeIdx.value( vl, -1 ) );
212+
}
202213
}
203214
}
204215

205-
return layers;
216+
QList<QgsMapLayer*> inDrawingOrder = QgisApp::instance()->mapCanvas()->layers();
217+
QList< QPair<QgsVectorLayer *, int> > layersInOrder;
218+
219+
for ( int i = 0; i < inDrawingOrder.size(); i++ )
220+
{
221+
int idx = layerIdx.value( inDrawingOrder[i], -1 );
222+
if ( idx < 0 )
223+
continue;
224+
225+
layersInOrder << layers[idx];
226+
}
227+
228+
Q_ASSERT( layersInOrder.size() == layers.size() );
229+
230+
return layersInOrder;
206231
}
207232

208233

0 commit comments

Comments
 (0)
Please sign in to comment.