Skip to content

Commit 80de0eb

Browse files
authoredNov 8, 2018
Merge pull request #8441 from signedav/bp_copy_2_pg
Backport: Using of QgsVectorLayerUtils::createFeature on move and copy tool
2 parents a363bf4 + bd6478e commit 80de0eb

File tree

2 files changed

+11
-21
lines changed

2 files changed

+11
-21
lines changed
 

‎src/core/qgsvectorlayertools.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "qgsvectorlayertools.h"
1919
#include "qgsfeaturerequest.h"
2020
#include "qgslogger.h"
21+
#include "qgsvectorlayerutils.h"
2122

2223

2324
QgsVectorLayerTools::QgsVectorLayerTools()
@@ -34,7 +35,6 @@ bool QgsVectorLayerTools::copyMoveFeatures( QgsVectorLayer *layer, QgsFeatureReq
3435

3536
QgsFeatureIterator fi = layer->getFeatures( request );
3637
QgsFeature f;
37-
QgsAttributeList pkAttrList = layer->primaryKeyAttributes();
3838

3939
int browsedFeatureCount = 0;
4040
int couldNotWriteCount = 0;
@@ -45,29 +45,27 @@ bool QgsVectorLayerTools::copyMoveFeatures( QgsVectorLayer *layer, QgsFeatureReq
4545
while ( fi.nextFeature( f ) )
4646
{
4747
browsedFeatureCount++;
48-
// remove pkey values
49-
Q_FOREACH ( auto idx, pkAttrList )
50-
{
51-
f.setAttribute( idx, QVariant() );
52-
}
48+
49+
QgsFeature newFeature = QgsVectorLayerUtils::createFeature( layer, f.geometry(), f.attributes().toMap() );
50+
5351
// translate
54-
if ( f.hasGeometry() )
52+
if ( newFeature.hasGeometry() )
5553
{
56-
QgsGeometry geom = f.geometry();
54+
QgsGeometry geom = newFeature.geometry();
5755
geom.translate( dx, dy );
58-
f.setGeometry( geom );
56+
newFeature.setGeometry( geom );
5957
#ifdef QGISDEBUG
60-
const QgsFeatureId fid = f.id();
58+
const QgsFeatureId fid = newFeature.id();
6159
#endif
6260
// paste feature
63-
if ( !layer->addFeature( f ) )
61+
if ( !layer->addFeature( newFeature ) )
6462
{
6563
couldNotWriteCount++;
6664
QgsDebugMsg( QStringLiteral( "Could not add new feature. Original copied feature id: %1" ).arg( fid ) );
6765
}
6866
else
6967
{
70-
fidList.insert( f.id() );
68+
fidList.insert( newFeature.id() );
7169
}
7270
}
7371
else

‎src/core/qgsvectorlayerutils.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -464,15 +464,7 @@ QgsFeature QgsVectorLayerUtils::duplicateFeature( QgsVectorLayer *layer, const Q
464464
QgsExpressionContext context = layer->createExpressionContext();
465465
context.setFeature( feature );
466466

467-
//create the attribute map
468-
QgsAttributes srcAttr = feature.attributes();
469-
QgsAttributeMap dstAttr;
470-
for ( int src = 0; src < srcAttr.count(); ++src )
471-
{
472-
dstAttr[ src ] = srcAttr.at( src );
473-
}
474-
475-
QgsFeature newFeature = createFeature( layer, feature.geometry(), dstAttr, &context );
467+
QgsFeature newFeature = createFeature( layer, feature.geometry(), feature.attributes().toMap(), &context );
476468

477469
const QList<QgsRelation> relations = project->relationManager()->referencedRelations( layer );
478470

0 commit comments

Comments
 (0)
Please sign in to comment.