Skip to content

Commit 931b3d1

Browse files
committedDec 21, 2015
maptool circular string by radius uses temporary rubberband
1 parent b4892c1 commit 931b3d1

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed
 

‎src/app/qgsmaptoolcircularstringradius.cpp

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

113122
void 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

134150
void QgsMapToolCircularStringRadius::createRadiusSpinBox()

0 commit comments

Comments
 (0)
Please sign in to comment.