18
18
#include " qgsvectorlayertools.h"
19
19
#include " qgsfeaturerequest.h"
20
20
#include " qgslogger.h"
21
+ #include " qgsvectorlayerutils.h"
21
22
22
23
23
24
QgsVectorLayerTools::QgsVectorLayerTools ()
@@ -34,7 +35,6 @@ bool QgsVectorLayerTools::copyMoveFeatures( QgsVectorLayer *layer, QgsFeatureReq
34
35
35
36
QgsFeatureIterator fi = layer->getFeatures ( request );
36
37
QgsFeature f;
37
- QgsAttributeList pkAttrList = layer->primaryKeyAttributes ();
38
38
39
39
int browsedFeatureCount = 0 ;
40
40
int couldNotWriteCount = 0 ;
@@ -45,29 +45,27 @@ bool QgsVectorLayerTools::copyMoveFeatures( QgsVectorLayer *layer, QgsFeatureReq
45
45
while ( fi.nextFeature ( f ) )
46
46
{
47
47
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
+
53
51
// translate
54
- if ( f .hasGeometry () )
52
+ if ( newFeature .hasGeometry () )
55
53
{
56
- QgsGeometry geom = f .geometry ();
54
+ QgsGeometry geom = newFeature .geometry ();
57
55
geom.translate ( dx, dy );
58
- f .setGeometry ( geom );
56
+ newFeature .setGeometry ( geom );
59
57
#ifdef QGISDEBUG
60
- const QgsFeatureId fid = f .id ();
58
+ const QgsFeatureId fid = newFeature .id ();
61
59
#endif
62
60
// paste feature
63
- if ( !layer->addFeature ( f ) )
61
+ if ( !layer->addFeature ( newFeature ) )
64
62
{
65
63
couldNotWriteCount++;
66
64
QgsDebugMsg ( QStringLiteral ( " Could not add new feature. Original copied feature id: %1" ).arg ( fid ) );
67
65
}
68
66
else
69
67
{
70
- fidList.insert ( f .id () );
68
+ fidList.insert ( newFeature .id () );
71
69
}
72
70
}
73
71
else
0 commit comments