void QgsMapToolDeleteRing::deleteRing( QgsFeatureId fId, int beforeVertexNr, QgsVectorLayer *vlayer ) { QgsFeature f; vlayer->getFeatures( QgsFeatureRequest().setFilterFid( fId ) ).nextFeature( f ); const QgsGeometry g = f.geometry(); QgsWkbTypes::Type wkbtype = g.wkbType(); int ringNum, partNum = 0; if ( wkbtype == QgsWkbTypes::Polygon || wkbtype == QgsWkbTypes::Polygon25D ) { ringNum = ringNumInPolygon( g, beforeVertexNr ); } else if ( wkbtype == QgsWkbTypes::MultiPolygon || wkbtype == QgsWkbTypes::MultiPolygon25D ) { ringNum = ringNumInMultiPolygon( g, beforeVertexNr, partNum ); } else return; QgsGeometry editableGeom = f.geometry(); if ( editableGeom.deleteRing( ringNum, partNum ) ) { vlayer->beginEditCommand( tr( "Ring deleted" ) ); vlayer->changeGeometry( fId, editableGeom ); vlayer->endEditCommand(); vlayer->triggerRepaint(); } }
void QgsMapToolDeleteRing::deleteRing( QgsFeatureId fId, int beforeVertexNr, QgsVectorLayer* vlayer ) { QgsFeature f; vlayer->getFeatures( QgsFeatureRequest().setFilterFid( fId ) ).nextFeature( f ); QgsGeometry* g = f.geometry(); QGis::WkbType wkbtype = g->wkbType(); int ringNum, partNum = 0; if ( wkbtype == QGis::WKBPolygon || wkbtype == QGis::WKBPolygon25D ) { ringNum = ringNumInPolygon( g, beforeVertexNr ); } else if ( wkbtype == QGis::WKBMultiPolygon || wkbtype == QGis::WKBMultiPolygon25D ) { ringNum = ringNumInMultiPolygon( g, beforeVertexNr, partNum ); } else return; if ( g->deleteRing( ringNum, partNum ) ) { vlayer->beginEditCommand( tr( "Ring deleted" ) ); vlayer->changeGeometry( fId, g ); vlayer->endEditCommand(); mCanvas->refresh(); } }
void QgsMapToolDeleteRing::canvasReleaseEvent( QgsMapMouseEvent *e ) { Q_UNUSED( e ); delete mRubberBand; mRubberBand = nullptr; if ( mPressedFid == -1 ) return; QgsFeature f; vlayer->getFeatures( QgsFeatureRequest().setFilterFid( mPressedFid ) ).nextFeature( f ); QgsGeometry g = f.geometry(); if ( g.deleteRing( mPressedRingNum, mPressedPartNum ) ) { vlayer->beginEditCommand( tr( "Ring deleted" ) ); vlayer->changeGeometry( mPressedFid, g ); vlayer->endEditCommand(); vlayer->triggerRepaint(); } }