Skip to content

Commit 6b07241

Browse files
committed
fix #5017 and fix #5024
1 parent 474ca93 commit 6b07241

File tree

4 files changed

+53
-29
lines changed

4 files changed

+53
-29
lines changed

src/app/nodetool/qgsmaptoolnodetool.cpp

+36-14
Original file line numberDiff line numberDiff line change
@@ -397,17 +397,39 @@ void QgsMapToolNodeTool::canvasPressEvent( QMouseEvent * e )
397397
break;
398398
}
399399
}
400+
400401
if ( !mSelectAnother )
401402
{
402403
mMoving = true;
403404
QgsPoint point = mCanvas->getCoordinateTransform()->toMapPoint( e->pos().x(), e->pos().y() );
404405
mClosestVertex = closestVertex( toLayerCoordinates( vlayer, point ) );
405-
if ( !mSelectedFeature->isSelected( snapResult.beforeVertexNr ) ||
406-
!mSelectedFeature->isSelected( snapResult.afterVertexNr ) )
406+
407+
if ( mIsPoint )
407408
{
408-
mSelectedFeature->deselectAllVertexes();
409-
mSelectedFeature->selectVertex( snapResult.afterVertexNr );
410-
mSelectedFeature->selectVertex( snapResult.beforeVertexNr );
409+
if ( !mCtrl )
410+
{
411+
mSelectedFeature->deselectAllVertexes();
412+
mSelectedFeature->selectVertex( snapResult.snappedVertexNr );
413+
}
414+
else
415+
{
416+
mSelectedFeature->invertVertexSelection( snapResult.snappedVertexNr );
417+
}
418+
}
419+
else if ( !mSelectedFeature->isSelected( snapResult.beforeVertexNr ) ||
420+
!mSelectedFeature->isSelected( snapResult.afterVertexNr ) )
421+
{
422+
if ( !mCtrl )
423+
{
424+
mSelectedFeature->deselectAllVertexes();
425+
mSelectedFeature->selectVertex( snapResult.afterVertexNr );
426+
mSelectedFeature->selectVertex( snapResult.beforeVertexNr );
427+
}
428+
else
429+
{
430+
mSelectedFeature->invertVertexSelection( snapResult.afterVertexNr );
431+
mSelectedFeature->invertVertexSelection( snapResult.beforeVertexNr );
432+
}
411433
}
412434
}
413435
}
@@ -428,7 +450,7 @@ void QgsMapToolNodeTool::canvasPressEvent( QMouseEvent * e )
428450
{
429451
mSelectedFeature->invertVertexSelection( atVertex );
430452
}
431-
else if ( !mSelectedFeature->isSelected( atVertex ) )
453+
else
432454
{
433455
mSelectedFeature->deselectAllVertexes();
434456
mSelectedFeature->selectVertex( atVertex );
@@ -466,15 +488,15 @@ void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )
466488
mClicked = false;
467489
mSelectionRectangle = false;
468490
QgsPoint coords = toMapCoordinates( e->pos() );
469-
// QgsPoint coords = mCanvas->getCoordinateTransform()->toMapPoint( e->pos().x(), e->pos().y() );
470-
// QgsPoint firstCoords = toMapCoordinates( *mLastCoordinates );
491+
471492
QgsPoint firstCoords = mCanvas->getCoordinateTransform()->toMapPoint( mLastCoordinates->x(), mLastCoordinates->y() );
472493
if ( mRubberBand )
473494
{
474495
mRubberBand->close();
475496
delete mRubberBand;
476497
mRubberBand = 0;
477498
}
499+
478500
if ( mLastCoordinates->x() == e->pos().x() && mLastCoordinates->y() == e->pos().y() )
479501
{
480502
if ( mSelectAnother )
@@ -492,8 +514,7 @@ void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )
492514
QgsPoint layerFirstCoords = toLayerCoordinates( vlayer, firstCoords );
493515

494516
// got correct coordinates
495-
double topX;
496-
double bottomX;
517+
double topX, bottomX;
497518
if ( layerCoords.x() > layerFirstCoords.x() )
498519
{
499520
topX = layerFirstCoords.x();
@@ -504,8 +525,8 @@ void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )
504525
topX = layerCoords.x();
505526
bottomX = layerFirstCoords.x();
506527
}
507-
double leftY;
508-
double rightY;
528+
529+
double leftY, rightY;
509530
if ( layerCoords.y() > layerFirstCoords.y() )
510531
{
511532
leftY = layerFirstCoords.y();
@@ -516,6 +537,7 @@ void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )
516537
leftY = layerCoords.y();
517538
rightY = layerFirstCoords.y();
518539
}
540+
519541
if ( mMoving )
520542
{
521543
mMoving = false;
@@ -537,6 +559,7 @@ void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )
537559
}
538560
QgsPoint layerCoords = toLayerCoordinates( vlayer, coords );
539561
QgsPoint layerFirstCoords = toLayerCoordinates( vlayer, firstCoords );
562+
540563
double changeX = layerCoords.x() - layerFirstCoords.x();
541564
double changeY = layerCoords.y() - layerFirstCoords.y();
542565
mSelectedFeature->beginGeometryChange();
@@ -563,6 +586,7 @@ void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )
563586
}
564587
}
565588
}
589+
566590
mMoving = false;
567591

568592
removeRubberBands();
@@ -689,10 +713,8 @@ void QgsMapToolNodeTool::keyReleaseEvent( QKeyEvent* e )
689713

690714
if ( mSelectedFeature && e->key() == Qt::Key_Delete )
691715
{
692-
mSelectedFeature->beginGeometryChange();
693716
mSelectedFeature->deleteSelectedVertexes();
694717
mCanvas->refresh();
695-
mSelectedFeature->endGeometryChange();
696718
}
697719
}
698720

src/app/nodetool/qgsselectedfeature.cpp

+14-13
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,14 @@ QgsSelectedFeature::~QgsSelectedFeature()
6161

6262
void QgsSelectedFeature::currentLayerChanged( QgsMapLayer *layer )
6363
{
64-
QgsDebugMsg( "Entering. " );
64+
QgsDebugMsg( "Entering." );
6565
if ( layer == mVlayer )
6666
deleteLater();
6767
}
6868

6969
void QgsSelectedFeature::updateGeometry( QgsGeometry *geom )
7070
{
71-
QgsDebugMsg( "Entering. " );
71+
QgsDebugMsg( "Entering." );
7272

7373
delete mGeometry;
7474

@@ -100,6 +100,7 @@ void QgsSelectedFeature::setSelectedFeature( QgsFeatureId featureId, QgsVectorLa
100100

101101
delete mRubberBand;
102102
mRubberBand = 0;
103+
103104
delete mGeometry;
104105
mGeometry = 0;
105106

@@ -109,13 +110,13 @@ void QgsSelectedFeature::setSelectedFeature( QgsFeatureId featureId, QgsVectorLa
109110
// feature was deleted
110111
connect( mVlayer, SIGNAL( featureDeleted( QgsFeatureId ) ), this, SLOT( featureDeleted( QgsFeatureId ) ) );
111112

112-
// geometry was changed
113-
connect( mVlayer, SIGNAL( geometryChanged( QgsFeatureId, QgsGeometry & ) ), this, SLOT( geometryChanged( QgsFeatureId, QgsGeometry & ) ) );
114-
115113
// projection or extents changed
116114
connect( canvas->mapRenderer(), SIGNAL( destinationSrsChanged() ), this, SLOT( updateVertexMarkersPosition() ) );
117115
connect( canvas, SIGNAL( extentsChanged() ), this, SLOT( updateVertexMarkersPosition() ) );
118116

117+
// geometry was changed
118+
connect( mVlayer, SIGNAL( geometryChanged( QgsFeatureId, QgsGeometry & ) ), this, SLOT( geometryChanged( QgsFeatureId, QgsGeometry & ) ) );
119+
119120
replaceVertexMap();
120121
}
121122

@@ -124,7 +125,6 @@ void QgsSelectedFeature::beginGeometryChange()
124125
Q_ASSERT( !mChangingGeometry );
125126
mChangingGeometry = true;
126127

127-
// geometry was changed
128128
disconnect( mVlayer, SIGNAL( geometryChanged( QgsFeatureId, QgsGeometry & ) ), this, SLOT( geometryChanged( QgsFeatureId, QgsGeometry & ) ) );
129129
}
130130

@@ -133,7 +133,6 @@ void QgsSelectedFeature::endGeometryChange()
133133
Q_ASSERT( mChangingGeometry );
134134
mChangingGeometry = false;
135135

136-
// geometry was changed
137136
connect( mVlayer, SIGNAL( geometryChanged( QgsFeatureId, QgsGeometry & ) ), this, SLOT( geometryChanged( QgsFeatureId, QgsGeometry & ) ) );
138137
}
139138

@@ -151,10 +150,12 @@ void QgsSelectedFeature::featureDeleted( QgsFeatureId fid )
151150
void QgsSelectedFeature::geometryChanged( QgsFeatureId fid, QgsGeometry &geom )
152151
{
153152
QgsDebugMsg( "Entering." );
153+
154154
if ( !mVlayer || fid != mFeatureId )
155155
return;
156156

157157
updateGeometry( &geom );
158+
158159
replaceVertexMap();
159160
}
160161

@@ -228,7 +229,9 @@ void QgsSelectedFeature::deleteSelectedVertexes()
228229
{
229230
int topologicalEditing = QgsProject::instance()->readNumEntry( "Digitizing", "/TopologicalEditing", 0 );
230231
QMultiMap<double, QgsSnappingResult> currentResultList;
232+
231233
mVlayer->beginEditCommand( QObject::tr( "Deleted vertices" ) );
234+
232235
int count = 0;
233236
for ( int i = mVertexMap.size() - 1; i > -1; i-- )
234237
{
@@ -246,12 +249,14 @@ void QgsSelectedFeature::deleteSelectedVertexes()
246249
currentResultList.clear();
247250
mVlayer->snapWithContext( mVertexMap[i]->point(), ZERO_TOLERANCE, currentResultList, QgsSnapper::SnapToVertex );
248251
}
252+
249253
if ( !mVlayer->deleteVertex( mFeatureId, i ) )
250254
{
251255
count = 0;
252-
qDebug( "Setting count 0 and calling break;" );
256+
QgsDebugMsg( QString( "Deleting vertex %1 failed - resetting" ).arg( i ) );
253257
break;
254-
};
258+
}
259+
255260
count++;
256261

257262
if ( topologicalEditing )
@@ -309,7 +314,6 @@ void QgsSelectedFeature::moveSelectedVertexes( double changeX, double changeY )
309314
mVlayer->moveVertex( mVertexMap[i]->point().x(), mVertexMap[i]->point().y(),
310315
resultIt.value().snappedAtGeometry, resultIt.value().snappedVertexNr );
311316
}
312-
313317
}
314318

315319
QgsVertexEntry *entry = mVertexMap[i];
@@ -333,9 +337,6 @@ void QgsSelectedFeature::replaceVertexMap()
333337
// delete old map
334338
deleteVertexMap();
335339

336-
delete mGeometry;
337-
mGeometry = 0;
338-
339340
// create new map
340341
createVertexMap();
341342

src/app/nodetool/qgsvertexentry.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
***************************************************************************/
1515

1616
#include "nodetool/qgsvertexentry.h"
17-
18-
#include <qgsmaprenderer.h>
17+
#include "qgsmaprenderer.h"
1918

2019
QgsVertexEntry::QgsVertexEntry( QgsMapCanvas *canvas, QgsMapLayer *layer, QgsPoint p, int originalIndex, QString tooltip, QgsVertexMarker::IconType type, int penWidth )
2120
: mSelected( false )

src/app/nodetool/qgsvertexentry.h

+2
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,11 @@ class QgsVertexEntry
5454

5555
void setCenter( QgsPoint p );
5656
void moveCenter( double x, double y );
57+
5758
void setEqual( int index ) { mEquals = index; }
5859
void setSelected( bool selected = true );
5960
void setInRubberBand( bool inRubberBand = true ) { mInRubberBand = inRubberBand; }
61+
6062
int rubberBandNr() const { return mRubberBandNr; }
6163
int rubberBandIndex() { return mRubberBandIndex; }
6264

0 commit comments

Comments
 (0)