@@ -57,16 +57,12 @@ void QgsMapToolCircularStringRadius::cadCanvasReleaseEvent( QgsMapMouseEvent* e
5757 {
5858 if ( !mRadiusMode )
5959 {
60- delete mRubberBand ;
61- mRubberBand = nullptr ;
6260 mTemporaryEndPointX = mapPoint.x ();
6361 mTemporaryEndPointY = mapPoint.y ();
64- mRadiusMode = true ;
6562
6663 // initial radius is distance( tempPoint - mPoints.last ) / 2.0
6764 double minRadius = sqrt ( QgsGeometryUtils::sqrDistance2D ( mPoints .last (), QgsPointV2 ( mTemporaryEndPointX , mTemporaryEndPointY ) ) ) / 2.0 ;
6865 mRadius = minRadius + minRadius / 10.0 ;
69- recalculateCircularString ();
7066 createRadiusSpinBox ();
7167 if ( mRadiusSpinBox )
7268 {
@@ -81,9 +77,10 @@ void QgsMapToolCircularStringRadius::cadCanvasReleaseEvent( QgsMapMouseEvent* e
8177 mPoints .append ( result );
8278 mPoints .append ( QgsPointV2 ( mTemporaryEndPointX , mTemporaryEndPointY ) );
8379 }
84- mRadiusMode = false ;
8580 deleteRadiusSpinBox ();
8681 }
82+ mRadiusMode = !mRadiusMode ;
83+ recalculateCircularString ();
8784 }
8885 else
8986 {
@@ -108,10 +105,29 @@ void QgsMapToolCircularStringRadius::cadCanvasMoveEvent( QgsMapMouseEvent* e )
108105 mLastMouseMapPos .setY ( e->mapPoint ().y () );
109106 recalculateCircularString ();
110107 }
108+ if ( !mPoints .isEmpty () && !mRadiusMode )
109+ {
110+ delete mTempRubberBand ;
111+ mTempRubberBand = createGeometryRubberBand (( mode () == CapturePolygon ) ? QGis::Polygon : QGis::Line, true );
112+ QgsCircularStringV2* cString = new QgsCircularStringV2 ();
113+ QList<QgsPointV2> rubberBandPoints;
114+ rubberBandPoints.append ( mPoints .last () );
115+ rubberBandPoints.append ( QgsPointV2 ( e->mapPoint () ) );
116+ cString->setPoints ( rubberBandPoints );
117+ mTempRubberBand ->setGeometry ( cString );
118+ mTempRubberBand ->show ();
119+ }
111120}
112121
113122void QgsMapToolCircularStringRadius::recalculateCircularString ()
114123{
124+ QgsCircularStringV2* cString2 = new QgsCircularStringV2 ();
125+ cString2->setPoints ( mPoints );
126+ delete mRubberBand ;
127+ mRubberBand = createGeometryRubberBand (( mode () == CapturePolygon ) ? QGis::Polygon : QGis::Line );
128+ mRubberBand ->setGeometry ( cString2 );
129+ mRubberBand ->show ();
130+
115131 // new midpoint on circle segment
116132 QgsPointV2 midPoint;
117133 if ( !QgsGeometryUtils::segmentMidPoint ( mPoints .last (), QgsPointV2 ( mTemporaryEndPointX , mTemporaryEndPointY ), midPoint, mRadius ,
@@ -125,10 +141,10 @@ void QgsMapToolCircularStringRadius::recalculateCircularString()
125141 rubberBandPoints.append ( QgsPointV2 ( mTemporaryEndPointX , mTemporaryEndPointY ) );
126142 QgsCircularStringV2* cString = new QgsCircularStringV2 ();
127143 cString->setPoints ( rubberBandPoints );
128- delete mRubberBand ;
129- mRubberBand = createGeometryRubberBand (( mode () == CapturePolygon ) ? QGis::Polygon : QGis::Line );
130- mRubberBand ->setGeometry ( cString );
131- mRubberBand ->show ();
144+ delete mTempRubberBand ;
145+ mTempRubberBand = createGeometryRubberBand (( mode () == CapturePolygon ) ? QGis::Polygon : QGis::Line, true );
146+ mTempRubberBand ->setGeometry ( cString );
147+ mTempRubberBand ->show ();
132148}
133149
134150void QgsMapToolCircularStringRadius::createRadiusSpinBox ()
0 commit comments