@@ -36,6 +36,7 @@ QgsMapToolCapture::QgsMapToolCapture( QgsMapCanvas* canvas, enum CaptureMode too
3636 : QgsMapToolEdit( canvas )
3737 , mCaptureMode( tool )
3838 , mRubberBand( 0 )
39+ , mTempRubberBand( 0 )
3940 , mValidator( 0 )
4041{
4142 mCaptureModeFromLayer = tool == CaptureNone;
@@ -100,7 +101,6 @@ void QgsMapToolCapture::currentLayerChanged( QgsMapLayer *layer )
100101 }
101102}
102103
103-
104104void QgsMapToolCapture::canvasMoveEvent ( QMouseEvent * e )
105105{
106106 QgsPoint mapPoint;
@@ -120,10 +120,10 @@ void QgsMapToolCapture::canvasMoveEvent( QMouseEvent * e )
120120 mSnappingMarkers << m;
121121 }
122122
123- if ( mCaptureMode != CapturePoint && mRubberBand && mCapturing )
123+ if ( mCaptureMode != CapturePoint && mTempRubberBand && mCapturing )
124124 {
125125 mapPoint = snapPointFromResults ( snapResults, e->pos () );
126- mRubberBand ->movePoint ( mapPoint );
126+ mTempRubberBand ->movePoint ( mapPoint );
127127 }
128128 }
129129} // mouseMoveEvent
@@ -180,7 +180,6 @@ int QgsMapToolCapture::nextPoint( const QPoint &p, QgsPoint &layerPoint, QgsPoin
180180 return 0 ;
181181}
182182
183-
184183int QgsMapToolCapture::addVertex ( const QPoint &p )
185184{
186185 QgsPoint layerPoint;
@@ -203,10 +202,28 @@ int QgsMapToolCapture::addVertex( const QPoint &p )
203202 {
204203 mRubberBand = createRubberBand ( mCaptureMode == CapturePolygon ? QGis::Polygon : QGis::Line );
205204 }
206-
207205 mRubberBand ->addPoint ( mapPoint );
208206 mCaptureList .append ( layerPoint );
209207
208+ if ( !mTempRubberBand )
209+ {
210+ mTempRubberBand = createRubberBand ( mCaptureMode == CapturePolygon ? QGis::Polygon : QGis::Line , true );
211+ }
212+ else {
213+ mTempRubberBand ->reset (CapturePolygon ? true : false );
214+ }
215+ if ( mCaptureMode == CaptureLine )
216+ {
217+ mTempRubberBand ->addPoint ( mapPoint );
218+ }
219+ else if ( mCaptureMode == CapturePolygon )
220+ {
221+ const QgsPoint *firstPoint = mRubberBand ->getPoint ( 0 , 0 );
222+ mTempRubberBand ->addPoint ( *firstPoint );
223+ mTempRubberBand ->movePoint ( mapPoint );
224+ mTempRubberBand ->addPoint ( mapPoint );
225+ }
226+
210227 validateGeometry ();
211228
212229 return 0 ;
@@ -231,20 +248,6 @@ void QgsMapToolCapture::undo()
231248 }
232249}
233250
234- void QgsMapToolCapture::resetLastVertex ()
235- {
236- if ( mRubberBand )
237- {
238- int rubberBandSize = mRubberBand ->numberOfVertices ();
239- if ( rubberBandSize < 2 )
240- {
241- return ;
242- }
243- const QgsPoint *lastPoint = mRubberBand ->getPoint (0 , rubberBandSize-2 );
244- mRubberBand ->movePoint ( *lastPoint );
245- }
246- }
247-
248251void QgsMapToolCapture::keyPressEvent ( QKeyEvent* e )
249252{
250253 if ( e->key () == Qt::Key_Backspace || e->key () == Qt::Key_Delete )
@@ -266,6 +269,12 @@ void QgsMapToolCapture::stopCapturing()
266269 mRubberBand = 0 ;
267270 }
268271
272+ if ( mTempRubberBand )
273+ {
274+ delete mTempRubberBand ;
275+ mTempRubberBand = 0 ;
276+ }
277+
269278 while ( !mGeomErrorMarkers .isEmpty () )
270279 {
271280 delete mGeomErrorMarkers .takeFirst ();
@@ -283,6 +292,15 @@ void QgsMapToolCapture::stopCapturing()
283292 mCanvas ->refresh ();
284293}
285294
295+ void QgsMapToolCapture::deleteTempRubberBand ()
296+ {
297+ if ( mTempRubberBand )
298+ {
299+ delete mTempRubberBand ;
300+ mTempRubberBand = 0 ;
301+ }
302+ }
303+
286304void QgsMapToolCapture::closePolygon ()
287305{
288306 mCaptureList .append ( mCaptureList [0 ] );
0 commit comments