Skip to content

Commit efbfe3b

Browse files
committed
Also highlight vertices when highlighting a feature on mouse hover
1 parent 2d17ded commit efbfe3b

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/app/nodetool/qgsnodetool2.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "qgslogger.h"
2424
#include "qgsmapcanvas.h"
2525
#include "qgsmulticurve.h"
26+
#include "qgsmultipoint.h"
2627
#include "qgspointlocator.h"
2728
#include "qgsproject.h"
2829
#include "qgsrubberband.h"
@@ -116,6 +117,21 @@ static bool isCircularVertex( const QgsGeometry &geom, int vertexIndex )
116117
return geom.vertexIdFromVertexNr( vertexIndex, vid ) && vid.type == QgsVertexId::CurveVertex;
117118
}
118119

120+
121+
//! Create a multi-point geometry that can be used to highlight vertices of a feature
122+
static QgsGeometry geometryToMultiPoint( const QgsGeometry &geom )
123+
{
124+
QgsMultiPointV2 *multiPoint = new QgsMultiPointV2();
125+
QgsGeometry outputGeom( multiPoint );
126+
QgsAbstractGeometry *g = geom.geometry();
127+
for ( int i = 0; i < g->partCount(); ++i )
128+
for ( int j = 0; j < g->ringCount( i ); ++j )
129+
for ( int k = 0; k < g->vertexCount( i, j ); ++k )
130+
multiPoint->addGeometry( new QgsPointV2( g->vertexAt( QgsVertexId( i, j, k ) ) ) );
131+
return outputGeom;
132+
}
133+
134+
119135
//
120136
// snapping match filters
121137
//
@@ -200,6 +216,12 @@ QgsNodeTool2::QgsNodeTool2( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidge
200216
mFeatureBand->setVisible( false );
201217

202218
QColor color = digitizingStrokeColor();
219+
mFeatureBandMarkers = new QgsRubberBand( canvas );
220+
mFeatureBandMarkers->setIcon( QgsRubberBand::ICON_CIRCLE );
221+
mFeatureBandMarkers->setColor( color );
222+
mFeatureBandMarkers->setIconSize( 8 );
223+
mFeatureBandMarkers->setVisible( false );
224+
203225
mVertexBand = new QgsRubberBand( canvas );
204226
mVertexBand->setIcon( QgsRubberBand::ICON_CIRCLE );
205227
mVertexBand->setColor( color );
@@ -225,6 +247,7 @@ QgsNodeTool2::~QgsNodeTool2()
225247
delete mSnapMarker;
226248
delete mEdgeCenterMarker;
227249
delete mFeatureBand;
250+
delete mFeatureBandMarkers;
228251
delete mVertexBand;
229252
delete mEdgeBand;
230253
delete mEndpointMarker;
@@ -556,6 +579,7 @@ void QgsNodeTool2::canvasDoubleClickEvent( QgsMapMouseEvent *e )
556579
void QgsNodeTool2::removeTemporaryRubberBands()
557580
{
558581
mFeatureBand->setVisible( false );
582+
mFeatureBandMarkers->setVisible( false );
559583
mFeatureBandLayer = nullptr;
560584
mFeatureBandFid = QgsFeatureId();
561585
mVertexBand->setVisible( false );
@@ -773,6 +797,8 @@ void QgsNodeTool2::mouseMoveNotDragging( QgsMapMouseEvent *e )
773797
if ( mFeatureBandLayer == m.layer() && mFeatureBandFid == m.featureId() )
774798
return; // skip regeneration of rubber band if not needed
775799
QgsGeometry geom = cachedGeometry( m.layer(), m.featureId() );
800+
mFeatureBandMarkers->setToGeometry( geometryToMultiPoint( geom ), m.layer() );
801+
mFeatureBandMarkers->setVisible( true );
776802
if ( QgsWkbTypes::isCurvedType( geom.geometry()->wkbType() ) )
777803
geom = QgsGeometry( geom.geometry()->segmentize() );
778804
mFeatureBand->setToGeometry( geom, m.layer() );
@@ -783,6 +809,7 @@ void QgsNodeTool2::mouseMoveNotDragging( QgsMapMouseEvent *e )
783809
else
784810
{
785811
mFeatureBand->setVisible( false );
812+
mFeatureBandMarkers->setVisible( false );
786813
mFeatureBandLayer = nullptr;
787814
mFeatureBandFid = QgsFeatureId();
788815
}

src/app/nodetool/qgsnodetool2.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ class APP_EXPORT QgsNodeTool2 : public QgsMapToolAdvancedDigitizing
198198
QgsVertexMarker *mEdgeCenterMarker = nullptr;
199199
//! rubber band for highlight of a whole feature on mouse over and not dragging anything
200200
QgsRubberBand *mFeatureBand = nullptr;
201+
//! rubber band for highlight of all vertices of a feature on mouse over and not dragging anything
202+
QgsRubberBand *mFeatureBandMarkers = nullptr;
201203
//! source layer for mFeatureBand (null if mFeatureBand is null)
202204
const QgsVectorLayer *mFeatureBandLayer = nullptr;
203205
//! source feature id for mFeatureBand (zero if mFeatureBand is null)

0 commit comments

Comments
 (0)