void QgsMapToolDeletePart::canvasReleaseEvent( QgsMapMouseEvent* e ) { Q_UNUSED( e ); delete mRubberBand; mRubberBand = 0; if ( !vlayer || !vlayer->isEditable() ) { return; } if ( mPressedFid == -1 ) return; QgsFeature f; vlayer->getFeatures( QgsFeatureRequest().setFilterFid( mPressedFid ) ).nextFeature( f ); QgsGeometry* g = f.geometry(); if ( g->deletePart( mPressedPartNum ) ) { vlayer->beginEditCommand( tr( "Part of multipart feature deleted" ) ); vlayer->changeGeometry( f.id(), g ); vlayer->endEditCommand(); mCanvas->refresh(); } else { emit messageEmitted( tr( "Couldn't remove the selected part." ) ); } return; }
void QgsMapToolDeletePart::deletePart( QgsFeatureId fId, int beforeVertexNr, QgsVectorLayer* vlayer ) { QgsFeature f; vlayer->getFeatures( QgsFeatureRequest().setFilterFid( fId ) ).nextFeature( f ); // find out the part number QgsGeometry* g = f.geometry(); if ( !g->isMultipart() ) { QMessageBox::information( mCanvas, tr( "Delete part" ), tr( "This isn't a multipart geometry." ) ); return; } int partNum = partNumberOfVertex( g, beforeVertexNr ); if ( g->deletePart( partNum ) ) { vlayer->beginEditCommand( tr( "Part of multipart feature deleted" ) ); vlayer->changeGeometry( fId, g ); vlayer->endEditCommand(); mCanvas->refresh(); } else { QMessageBox::information( mCanvas, tr( "Delete part" ), tr( "Couldn't remove the selected part." ) ); } }