Skip to content

Commit

Permalink
Apply suggestions from code review
Browse files Browse the repository at this point in the history
  • Loading branch information
YoannQDQ committed Jan 13, 2023
1 parent 093f878 commit bf396b5
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 59 deletions.
66 changes: 29 additions & 37 deletions src/app/qgsmaptoolmovefeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ QgsMapToolMoveFeature::QgsMapToolMoveFeature( QgsMapCanvas *canvas, MoveMode mod

QgsMapToolMoveFeature::~QgsMapToolMoveFeature()
{
delete mRubberBand;
deleteRubberband();
}

void QgsMapToolMoveFeature::cadCanvasMoveEvent( QgsMapMouseEvent *e )
Expand All @@ -69,26 +69,17 @@ void QgsMapToolMoveFeature::cadCanvasMoveEvent( QgsMapMouseEvent *e )
const double dx = stopPointLayerCoords.x() - startPointLayerCoords.x();
const double dy = stopPointLayerCoords.y() - startPointLayerCoords.y();

QgsFeatureRequest request;
request.setFilterFids( mMovedFeatures ).setNoAttributes();
QgsFeatureIterator fi = vlayer->getFeatures( request );
QgsFeature f;
mRubberBand->reset( vlayer->geometryType() );
while ( fi.nextFeature( f ) )
{
if ( !f.hasGeometry() )
continue;

QgsGeometry geom = f.geometry();
if ( geom.translate( dx, dy ) != Qgis::GeometryOperationResult::Success )
continue;
QgsGeometry geom = mGeom;

mRubberBand->addGeometry( geom, vlayer, false );
if ( geom.translate( dx, dy ) == Qgis::GeometryOperationResult::Success )
{
mRubberBand->setToGeometry( geom, vlayer );
}
else
{
mRubberBand->reset( vlayer->geometryType() );
}
}

mRubberBand->updatePosition();
mRubberBand->update();
}

mSnapIndicator->setMatch( e->mapPointMatch() );
Expand All @@ -99,8 +90,7 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
QgsVectorLayer *vlayer = currentVectorLayer();
if ( !vlayer || !vlayer->isEditable() )
{
delete mRubberBand;
mRubberBand = nullptr;
deleteRubberband();
mSnapIndicator->setMatch( QgsPointLocator::Match() );
cadDockWidget()->clear();
notifyNotEditableLayer();
Expand Down Expand Up @@ -154,7 +144,8 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
mMovedFeatures << cf.id(); //todo: take the closest feature, not the first one...

mRubberBand = createRubberBand( vlayer->geometryType() );
mRubberBand->setToGeometry( cf.geometry(), vlayer );
mGeom = cf.geometry();
mRubberBand->setToGeometry( mGeom, vlayer );
}
else
{
Expand All @@ -167,15 +158,16 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
bool allFeaturesInView = true;
const QgsRectangle viewRect = mCanvas->mapSettings().mapToLayerCoordinates( vlayer, mCanvas->extent() );

QVector <QgsGeometry> selectedGeometries;
while ( it.nextFeature( feat ) )
{
mRubberBand->addGeometry( feat.geometry(), vlayer, false );
selectedGeometries << feat.geometry();

if ( allFeaturesInView && !viewRect.intersects( feat.geometry().boundingBox() ) )
allFeaturesInView = false;
}
mRubberBand->updatePosition();
mRubberBand->update();
mGeom = QgsGeometry::collectGeometry( selectedGeometries );
mRubberBand->setToGeometry( mGeom, vlayer );

if ( !allFeaturesInView )
{
Expand All @@ -187,8 +179,7 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
if ( res != QMessageBox::Yes )
{
mMovedFeatures.clear();
delete mRubberBand;
mRubberBand = nullptr;
deleteRubberband();
mSnapIndicator->setMatch( QgsPointLocator::Match() );
return;
}
Expand All @@ -204,8 +195,7 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
if ( e->button() != Qt::LeftButton )
{
cadDockWidget()->clear();
delete mRubberBand;
mRubberBand = nullptr;
deleteRubberband();
mSnapIndicator->setMatch( QgsPointLocator::Match() );
return;
}
Expand Down Expand Up @@ -247,8 +237,7 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
vlayer->addTopologicalPoints( vlayer->getGeometry( id ) );
}
}
delete mRubberBand;
mRubberBand = nullptr;
deleteRubberband();
mSnapIndicator->setMatch( QgsPointLocator::Match() );
cadDockWidget()->clear();
break;
Expand All @@ -260,8 +249,7 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
if ( !QgisApp::instance()->vectorLayerTools()->copyMoveFeatures( vlayer, request, dx, dy, errorMsg, QgsProject::instance()->topologicalEditing(), mSnapIndicator->match().layer() ) )
{
emit messageEmitted( *errorMsg, Qgis::MessageLevel::Critical );
delete mRubberBand;
mRubberBand = nullptr;
deleteRubberband();
mSnapIndicator->setMatch( QgsPointLocator::Match() );
}
break;
Expand All @@ -274,9 +262,7 @@ void QgsMapToolMoveFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )

void QgsMapToolMoveFeature::deactivate()
{
//delete rubber band
delete mRubberBand;
mRubberBand = nullptr;
deleteRubberband();
mSnapIndicator->setMatch( QgsPointLocator::Match() );

QgsMapToolAdvancedDigitizing::deactivate();
Expand All @@ -287,8 +273,14 @@ void QgsMapToolMoveFeature::keyReleaseEvent( QKeyEvent *e )
if ( mRubberBand && e->key() == Qt::Key_Escape )
{
cadDockWidget()->clear();
delete mRubberBand;
mRubberBand = nullptr;
deleteRubberband();
mSnapIndicator->setMatch( QgsPointLocator::Match() );
}
}

void QgsMapToolMoveFeature::deleteRubberband()
{
delete mRubberBand;
mRubberBand = nullptr;
mGeom = QgsGeometry();
}
8 changes: 7 additions & 1 deletion src/app/qgsmaptoolmovefeature.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ class APP_EXPORT QgsMapToolMoveFeature: public QgsMapToolAdvancedDigitizing
void keyReleaseEvent( QKeyEvent *e ) override;

private:

void deleteRubberband();

//! Start point of the move in map coordinates
QgsPointXY mStartPointMapCoords;

Expand All @@ -57,13 +60,16 @@ class APP_EXPORT QgsMapToolMoveFeature: public QgsMapToolAdvancedDigitizing
//! Snapping indicators
std::unique_ptr<QgsSnapIndicator> mSnapIndicator;

//! Id of moved feature
//! Id of moved features
QgsFeatureIds mMovedFeatures;

QPoint mPressPos;

MoveMode mMode;

// MultiGeometry of the moved features
QgsGeometry mGeom;

};

#endif
31 changes: 10 additions & 21 deletions src/app/qgsmaptoolrotatefeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,8 @@ void QgsMapToolRotateFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
mRotatedFeatures << cf.id(); //todo: take the closest feature, not the first one...

mRubberBand = createRubberBand( vlayer->geometryType() );
mRubberBand->setToGeometry( cf.geometry(), vlayer );
mGeom = cf.geometry();
mRubberBand->setToGeometry( mGeom, vlayer );
}
else
{
Expand All @@ -313,12 +314,13 @@ void QgsMapToolRotateFeature::cadCanvasReleaseEvent( QgsMapMouseEvent *e )

QgsFeature feat;
QgsFeatureIterator it = vlayer->getSelectedFeatures();
QVector <QgsGeometry> selectedGeometries;
while ( it.nextFeature( feat ) )
{
mRubberBand->addGeometry( feat.geometry(), vlayer, false );
selectedGeometries << feat.geometry();
}
mRubberBand->updatePosition();
mRubberBand->update();
mGeom = QgsGeometry::collectGeometry( selectedGeometries );
mRubberBand->setToGeometry( mGeom, vlayer );
}

mRubberBand->show();
Expand Down Expand Up @@ -363,7 +365,6 @@ void QgsMapToolRotateFeature::updateRubberband( double rotation )
if ( mRotationActive )
{
mRotation = rotation;

mStPoint = toCanvasCoordinates( mStartPointMapCoords );

if ( mRubberBand )
Expand All @@ -378,28 +379,15 @@ void QgsMapToolRotateFeature::updateRubberband( double rotation )
mRubberBand->setTransform( QTransform().translate( offsetX, offsetY ).rotate( mRotation ).translate( -1 * offsetX, -1 * offsetY ) );
mRubberBand->update();
}

// Else, recreate the rubber band from the rotated geometries
else
{
mRubberBand->reset( vlayer->geometryType() );
const QgsPointXY anchorPoint = toLayerCoordinates( vlayer, mStartPointMapCoords );
QgsFeatureRequest request;
request.setFilterFids( mRotatedFeatures ).setNoAttributes();
QgsFeatureIterator fi = vlayer->getFeatures( request );
QgsFeature f;
while ( fi.nextFeature( f ) )
{
QgsGeometry geom = f.geometry();
geom.rotate( mRotation, anchorPoint );
mRubberBand->addGeometry( geom, vlayer, false );
}
mRubberBand->updatePosition();
QgsGeometry geom = mGeom;
geom.rotate( mRotation, anchorPoint );
mRubberBand->setToGeometry( geom, vlayer );
}

mRubberBand->update();
}

}
}

Expand Down Expand Up @@ -487,6 +475,7 @@ void QgsMapToolRotateFeature::deleteRubberband()
{
delete mRubberBand;
mRubberBand = nullptr;
mGeom = QgsGeometry();
}

void QgsMapToolRotateFeature::deactivate()
Expand Down
3 changes: 3 additions & 0 deletions src/app/qgsmaptoolrotatefeature.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ class APP_EXPORT QgsMapToolRotateFeature: public QgsMapToolAdvancedDigitizing

//! Shows current angle value and allows numerical editing
QgsAngleMagnetWidget *mRotationWidget = nullptr;

// MultiGeometry of the features being rotated
QgsGeometry mGeom;
};

#endif

0 comments on commit bf396b5

Please sign in to comment.