Skip to content

Commit c7c840f

Browse files
committed
Force geometry copy in offset curve tool if control key pressed
1 parent 802dda1 commit c7c840f

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/app/qgsmaptooloffsetcurve.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#include "qgisapp.h"
2626

2727
QgsMapToolOffsetCurve::QgsMapToolOffsetCurve( QgsMapCanvas* canvas ): QgsMapToolEdit( canvas ), mRubberBand( 0 ),
28-
mOriginalGeometry( 0 ), mGeometryModified( false ), mDistanceItem( 0 ), mDistanceSpinBox( 0 ), mSnapVertexMarker( 0 )
28+
mOriginalGeometry( 0 ), mGeometryModified( false ), mDistanceItem( 0 ), mDistanceSpinBox( 0 ), mSnapVertexMarker( 0 ), mForceCopy( false )
2929
{
3030
}
3131

@@ -36,10 +36,11 @@ QgsMapToolOffsetCurve::~QgsMapToolOffsetCurve()
3636
delete mSnapVertexMarker;
3737
}
3838

39-
void QgsMapToolOffsetCurve::canvasPressEvent( QMouseEvent * e )
39+
void QgsMapToolOffsetCurve::canvasPressEvent( QMouseEvent* e )
4040
{
4141
deleteRubberBandAndGeometry();
4242
mGeometryModified = false;
43+
mForceCopy = false;
4344

4445
//get selected features or snap to nearest feature if no selection
4546
QgsVectorLayer* layer = currentVectorLayer();
@@ -65,6 +66,7 @@ void QgsMapToolOffsetCurve::canvasPressEvent( QMouseEvent * e )
6566
QgsVectorLayer* vl = dynamic_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( mSourceLayerId ) );
6667
if ( vl && vl->featureAtId( snapResult.snappedAtGeometry, fet ) )
6768
{
69+
mForceCopy = ( e->modifiers() & Qt::ControlModifier ); //no geometry modification if ctrl is pressed
6870
mOriginalGeometry = createOriginGeometry( vl, snapResult, fet );
6971
mRubberBand = createRubberBand();
7072
if ( mRubberBand )
@@ -91,7 +93,7 @@ void QgsMapToolOffsetCurve::canvasReleaseEvent( QMouseEvent * e )
9193
vlayer->beginEditCommand( tr( "Offset curve" ) );
9294

9395
bool editOk;
94-
if ( mSourceLayerId == vlayer->id() )
96+
if ( mSourceLayerId == vlayer->id() && !mForceCopy )
9597
{
9698
editOk = vlayer->changeGeometry( mModifiedFeature, &mModifiedGeometry );
9799
}
@@ -114,6 +116,7 @@ void QgsMapToolOffsetCurve::canvasReleaseEvent( QMouseEvent * e )
114116
deleteRubberBandAndGeometry();
115117
deleteDistanceItem();
116118
delete mSnapVertexMarker; mSnapVertexMarker = 0;
119+
mForceCopy = false;
117120
mCanvas->refresh();
118121
}
119122

@@ -206,7 +209,7 @@ QgsGeometry* QgsMapToolOffsetCurve::createOriginGeometry( QgsVectorLayer* vl, co
206209
return 0;
207210
}
208211

209-
if ( vl == currentVectorLayer() )
212+
if ( vl == currentVectorLayer() && !mForceCopy )
210213
{
211214
//don't consider selected geometries, only the snap result
212215
return snappedFeature.geometryAndOwnership();

src/app/qgsmaptooloffsetcurve.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ class QgsMapToolOffsetCurve: public QgsMapToolEdit
5959
QDoubleSpinBox* mDistanceSpinBox;
6060
/**Marker to show the cursor was snapped to another location*/
6161
QgsVertexMarker* mSnapVertexMarker;
62+
/**Forces geometry copy (no modification of geometry in current layer)*/
63+
bool mForceCopy;
6264

6365

6466
void deleteRubberBandAndGeometry();

0 commit comments

Comments
 (0)