@@ -57,16 +57,12 @@ void QgsMapToolCircularStringRadius::cadCanvasReleaseEvent( QgsMapMouseEvent* e
57
57
{
58
58
if ( !mRadiusMode )
59
59
{
60
- delete mRubberBand ;
61
- mRubberBand = nullptr ;
62
60
mTemporaryEndPointX = mapPoint.x ();
63
61
mTemporaryEndPointY = mapPoint.y ();
64
- mRadiusMode = true ;
65
62
66
63
// initial radius is distance( tempPoint - mPoints.last ) / 2.0
67
64
double minRadius = sqrt ( QgsGeometryUtils::sqrDistance2D ( mPoints .last (), QgsPointV2 ( mTemporaryEndPointX , mTemporaryEndPointY ) ) ) / 2.0 ;
68
65
mRadius = minRadius + minRadius / 10.0 ;
69
- recalculateCircularString ();
70
66
createRadiusSpinBox ();
71
67
if ( mRadiusSpinBox )
72
68
{
@@ -81,9 +77,10 @@ void QgsMapToolCircularStringRadius::cadCanvasReleaseEvent( QgsMapMouseEvent* e
81
77
mPoints .append ( result );
82
78
mPoints .append ( QgsPointV2 ( mTemporaryEndPointX , mTemporaryEndPointY ) );
83
79
}
84
- mRadiusMode = false ;
85
80
deleteRadiusSpinBox ();
86
81
}
82
+ mRadiusMode = !mRadiusMode ;
83
+ recalculateCircularString ();
87
84
}
88
85
else
89
86
{
@@ -108,10 +105,29 @@ void QgsMapToolCircularStringRadius::cadCanvasMoveEvent( QgsMapMouseEvent* e )
108
105
mLastMouseMapPos .setY ( e->mapPoint ().y () );
109
106
recalculateCircularString ();
110
107
}
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
+ }
111
120
}
112
121
113
122
void QgsMapToolCircularStringRadius::recalculateCircularString ()
114
123
{
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
+
115
131
// new midpoint on circle segment
116
132
QgsPointV2 midPoint;
117
133
if ( !QgsGeometryUtils::segmentMidPoint ( mPoints .last (), QgsPointV2 ( mTemporaryEndPointX , mTemporaryEndPointY ), midPoint, mRadius ,
@@ -125,10 +141,10 @@ void QgsMapToolCircularStringRadius::recalculateCircularString()
125
141
rubberBandPoints.append ( QgsPointV2 ( mTemporaryEndPointX , mTemporaryEndPointY ) );
126
142
QgsCircularStringV2* cString = new QgsCircularStringV2 ();
127
143
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 ();
132
148
}
133
149
134
150
void QgsMapToolCircularStringRadius::createRadiusSpinBox ()
0 commit comments