25
25
#include " qgisapp.h"
26
26
27
27
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 )
29
29
{
30
30
}
31
31
@@ -36,10 +36,11 @@ QgsMapToolOffsetCurve::~QgsMapToolOffsetCurve()
36
36
delete mSnapVertexMarker ;
37
37
}
38
38
39
- void QgsMapToolOffsetCurve::canvasPressEvent ( QMouseEvent * e )
39
+ void QgsMapToolOffsetCurve::canvasPressEvent ( QMouseEvent* e )
40
40
{
41
41
deleteRubberBandAndGeometry ();
42
42
mGeometryModified = false ;
43
+ mForceCopy = false ;
43
44
44
45
// get selected features or snap to nearest feature if no selection
45
46
QgsVectorLayer* layer = currentVectorLayer ();
@@ -65,6 +66,7 @@ void QgsMapToolOffsetCurve::canvasPressEvent( QMouseEvent * e )
65
66
QgsVectorLayer* vl = dynamic_cast <QgsVectorLayer*>( QgsMapLayerRegistry::instance ()->mapLayer ( mSourceLayerId ) );
66
67
if ( vl && vl->featureAtId ( snapResult.snappedAtGeometry , fet ) )
67
68
{
69
+ mForceCopy = ( e->modifiers () & Qt::ControlModifier ); // no geometry modification if ctrl is pressed
68
70
mOriginalGeometry = createOriginGeometry ( vl, snapResult, fet );
69
71
mRubberBand = createRubberBand ();
70
72
if ( mRubberBand )
@@ -91,7 +93,7 @@ void QgsMapToolOffsetCurve::canvasReleaseEvent( QMouseEvent * e )
91
93
vlayer->beginEditCommand ( tr ( " Offset curve" ) );
92
94
93
95
bool editOk;
94
- if ( mSourceLayerId == vlayer->id () )
96
+ if ( mSourceLayerId == vlayer->id () && ! mForceCopy )
95
97
{
96
98
editOk = vlayer->changeGeometry ( mModifiedFeature , &mModifiedGeometry );
97
99
}
@@ -114,6 +116,7 @@ void QgsMapToolOffsetCurve::canvasReleaseEvent( QMouseEvent * e )
114
116
deleteRubberBandAndGeometry ();
115
117
deleteDistanceItem ();
116
118
delete mSnapVertexMarker ; mSnapVertexMarker = 0 ;
119
+ mForceCopy = false ;
117
120
mCanvas ->refresh ();
118
121
}
119
122
@@ -206,7 +209,7 @@ QgsGeometry* QgsMapToolOffsetCurve::createOriginGeometry( QgsVectorLayer* vl, co
206
209
return 0 ;
207
210
}
208
211
209
- if ( vl == currentVectorLayer () )
212
+ if ( vl == currentVectorLayer () && ! mForceCopy )
210
213
{
211
214
// don't consider selected geometries, only the snap result
212
215
return snappedFeature.geometryAndOwnership ();
0 commit comments