Skip to content

Commit

Permalink
Merge pull request #8441 from signedav/bp_copy_2_pg
Browse files Browse the repository at this point in the history
Backport: Using of QgsVectorLayerUtils::createFeature on move and copy tool
  • Loading branch information
m-kuhn committed Nov 8, 2018
2 parents a363bf4 + bd6478e commit 80de0eb
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 21 deletions.
22 changes: 10 additions & 12 deletions src/core/qgsvectorlayertools.cpp
Expand Up @@ -18,6 +18,7 @@
#include "qgsvectorlayertools.h" #include "qgsvectorlayertools.h"
#include "qgsfeaturerequest.h" #include "qgsfeaturerequest.h"
#include "qgslogger.h" #include "qgslogger.h"
#include "qgsvectorlayerutils.h"




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


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


int browsedFeatureCount = 0; int browsedFeatureCount = 0;
int couldNotWriteCount = 0; int couldNotWriteCount = 0;
Expand All @@ -45,29 +45,27 @@ bool QgsVectorLayerTools::copyMoveFeatures( QgsVectorLayer *layer, QgsFeatureReq
while ( fi.nextFeature( f ) ) while ( fi.nextFeature( f ) )
{ {
browsedFeatureCount++; browsedFeatureCount++;
// remove pkey values
Q_FOREACH ( auto idx, pkAttrList ) QgsFeature newFeature = QgsVectorLayerUtils::createFeature( layer, f.geometry(), f.attributes().toMap() );
{
f.setAttribute( idx, QVariant() );
}
// translate // translate
if ( f.hasGeometry() ) if ( newFeature.hasGeometry() )
{ {
QgsGeometry geom = f.geometry(); QgsGeometry geom = newFeature.geometry();
geom.translate( dx, dy ); geom.translate( dx, dy );
f.setGeometry( geom ); newFeature.setGeometry( geom );
#ifdef QGISDEBUG #ifdef QGISDEBUG
const QgsFeatureId fid = f.id(); const QgsFeatureId fid = newFeature.id();
#endif #endif
// paste feature // paste feature
if ( !layer->addFeature( f ) ) if ( !layer->addFeature( newFeature ) )
{ {
couldNotWriteCount++; couldNotWriteCount++;
QgsDebugMsg( QStringLiteral( "Could not add new feature. Original copied feature id: %1" ).arg( fid ) ); QgsDebugMsg( QStringLiteral( "Could not add new feature. Original copied feature id: %1" ).arg( fid ) );
} }
else else
{ {
fidList.insert( f.id() ); fidList.insert( newFeature.id() );
} }
} }
else else
Expand Down
10 changes: 1 addition & 9 deletions src/core/qgsvectorlayerutils.cpp
Expand Up @@ -464,15 +464,7 @@ QgsFeature QgsVectorLayerUtils::duplicateFeature( QgsVectorLayer *layer, const Q
QgsExpressionContext context = layer->createExpressionContext(); QgsExpressionContext context = layer->createExpressionContext();
context.setFeature( feature ); context.setFeature( feature );


//create the attribute map QgsFeature newFeature = createFeature( layer, feature.geometry(), feature.attributes().toMap(), &context );
QgsAttributes srcAttr = feature.attributes();
QgsAttributeMap dstAttr;
for ( int src = 0; src < srcAttr.count(); ++src )
{
dstAttr[ src ] = srcAttr.at( src );
}

QgsFeature newFeature = createFeature( layer, feature.geometry(), dstAttr, &context );


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


Expand Down

0 comments on commit 80de0eb

Please sign in to comment.