void QgsMapToolCircularStringCurvePoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) { QgsPointV2 mapPoint( e->mapPoint() ); if ( e->button() == Qt::LeftButton ) { mPoints.append( mapPoint ); if ( !mCenterPointRubberBand && mShowCenterPointRubberBand ) { createCenterPointRubberBand(); } if ( !mPoints.isEmpty() ) { if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true ); mTempRubberBand->show(); } QgsCircularString *c = new QgsCircularString(); QgsPointSequence rubberBandPoints = mPoints.mid( mPoints.size() - 1 - ( mPoints.size() + 1 ) % 2 ); rubberBandPoints.append( mapPoint ); c->setPoints( rubberBandPoints ); mTempRubberBand->setGeometry( c ); } if ( mPoints.size() > 1 && mPoints.size() % 2 ) { if ( !mRubberBand ) { mRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry ); mRubberBand->show(); } QgsCircularString *c = new QgsCircularString(); QgsPointSequence rubberBandPoints = mPoints; rubberBandPoints.append( mapPoint ); c->setPoints( rubberBandPoints ); mRubberBand->setGeometry( c ); removeCenterPointRubberBand(); } } else if ( e->button() == Qt::RightButton ) { deactivate(); if ( mParentTool ) { mParentTool->canvasReleaseEvent( e ); } } }
void QgsMapToolAddCircularString::activate() { if ( mParentTool ) { mParentTool->deleteTempRubberBand(); if ( mPoints.isEmpty() ) { // if the parent tool has a curve, use its last point as the first point in this curve const QgsCompoundCurveV2* compoundCurve = mParentTool->captureCurve(); if ( compoundCurve && compoundCurve->nCurves() > 0 ) { const QgsCurveV2* curve = compoundCurve->curveAt( compoundCurve->nCurves() - 1 ); if ( curve ) { //mParentTool->captureCurve() is in layer coordinates, but we need map coordinates QgsPointV2 endPointLayerCoord = curve->endPoint(); QgsPoint mapPoint = toMapCoordinates( mCanvas->currentLayer(), QgsPoint( endPointLayerCoord.x(), endPointLayerCoord.y() ) ); mPoints.append( QgsPointV2( mapPoint ) ); if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand(( mode() == CapturePolygon ) ? Qgis::Polygon : Qgis::Line, true ); mTempRubberBand->show(); } QgsCircularStringV2* c = new QgsCircularStringV2(); QgsPointSequenceV2 rubberBandPoints = mPoints; rubberBandPoints.append( QgsPointV2( mapPoint ) ); c->setPoints( rubberBandPoints ); mTempRubberBand->setGeometry( c ); } } } } QgsMapToolCapture::activate(); }
void QgsMapToolCircularStringRadius::recalculateTempRubberBand( const QgsPoint& mousePosition ) { QList<QgsPointV2> rubberBandPoints; if ( !( mPoints.size() % 2 ) ) { //recalculate midpoint on circle segment QgsPointV2 midPoint; if ( !QgsGeometryUtils::segmentMidPoint( mPoints.at( mPoints.size() - 2 ), mTemporaryEndPoint, midPoint, mRadius, QgsPointV2( mousePosition ) ) ) { return; } mPoints.replace( mPoints.size() - 1, midPoint ); rubberBandPoints.append( mPoints.at( mPoints.size() - 2 ) ); rubberBandPoints.append( mPoints.last() ); rubberBandPoints.append( mTemporaryEndPoint ); } else { rubberBandPoints.append( mPoints.last() ); rubberBandPoints.append( QgsPointV2( mousePosition ) ); } QgsCircularStringV2* cString = new QgsCircularStringV2(); cString->setPoints( rubberBandPoints ); delete mTempRubberBand; mTempRubberBand = createGeometryRubberBand(( mode() == CapturePolygon ) ? QGis::Polygon : QGis::Line, true ); mTempRubberBand->setGeometry( cString ); mTempRubberBand->show(); }
void QgsMapToolRegularPolygonCenterCorner::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) { QgsPoint point = mapPoint( *e ); if ( e->button() == Qt::LeftButton ) { mPoints.append( point ); if ( !mPoints.isEmpty() ) { if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->show(); createNumberSidesSpinBox(); } } } else if ( e->button() == Qt::RightButton ) { mPoints.append( point ); deactivate(); if ( mParentTool ) { mParentTool->canvasReleaseEvent( e ); } } }
void QgsMapToolCircleCenterPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) { QgsPoint point = mapPoint( *e ); if ( e->button() == Qt::LeftButton ) { mPoints.append( point ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->show(); } } else if ( e->button() == Qt::RightButton ) { mPoints.append( point ); deactivate(); if ( mParentTool ) { mParentTool->canvasReleaseEvent( e ); } } }
void QgsMapToolCircularStringRadius::recalculateTempRubberBand( const QgsPointXY &mousePosition ) { QgsPointSequence rubberBandPoints; if ( !( mPoints.size() % 2 ) ) { //recalculate midpoint on circle segment QgsPoint midPoint; if ( !QgsGeometryUtils::segmentMidPoint( mPoints.at( mPoints.size() - 2 ), mTemporaryEndPoint, midPoint, mRadius, QgsPoint( mousePosition ) ) ) { return; } mPoints.replace( mPoints.size() - 1, midPoint ); rubberBandPoints.append( mPoints.at( mPoints.size() - 2 ) ); rubberBandPoints.append( mPoints.last() ); rubberBandPoints.append( mTemporaryEndPoint ); } else { rubberBandPoints.append( mPoints.last() ); rubberBandPoints.append( mapPoint( mousePosition ) ); } QgsCircularString *cString = new QgsCircularString(); cString->setPoints( rubberBandPoints ); delete mTempRubberBand; mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->setGeometry( cString ); mTempRubberBand->show(); }
void QgsMapToolCircularStringRadius::recalculateRubberBand() { if ( mPoints.size() >= 3 ) { QgsCircularStringV2* cString = new QgsCircularStringV2(); int rubberBandSize = mPoints.size() - ( mPoints.size() + 1 ) % 2; cString->setPoints( mPoints.mid( 0, rubberBandSize ) ); delete mRubberBand; mRubberBand = createGeometryRubberBand(( mode() == CapturePolygon ) ? QGis::Polygon : QGis::Line ); mRubberBand->setGeometry( cString ); mRubberBand->show(); } }
void QgsMapToolCircularStringRadius::recalculateRubberBand() { if ( mPoints.size() >= 3 ) { QgsCircularString *cString = new QgsCircularString(); int rubberBandSize = mPoints.size() - ( mPoints.size() + 1 ) % 2; cString->setPoints( mPoints.mid( 0, rubberBandSize ) ); delete mRubberBand; mRubberBand = createGeometryRubberBand( mLayerType ); mRubberBand->setGeometry( cString ); mRubberBand->show(); } }
void QgsMapToolCircularStringRadius::recalculateCircularString() { //new midpoint on circle segment QgsPointV2 midPoint; if ( !QgsGeometryUtils::segmentMidPoint( mPoints.last(), QgsPointV2( mTemporaryEndPointX, mTemporaryEndPointY ), midPoint, mRadius, mLastMouseMapPos ) ) { return; } QList<QgsPointV2> rubberBandPoints = mPoints; rubberBandPoints.append( midPoint ); rubberBandPoints.append( QgsPointV2( mTemporaryEndPointX, mTemporaryEndPointY ) ); QgsCircularStringV2* cString = new QgsCircularStringV2(); cString->setPoints( rubberBandPoints ); delete mRubberBand; mRubberBand = createGeometryRubberBand(( mode() == CapturePolygon ) ? QGis::Polygon : QGis::Line ); mRubberBand->setGeometry( cString ); mRubberBand->show(); }
void QgsMapToolAddCircularString::createCenterPointRubberBand() { if ( !mShowCenterPointRubberBand || mPoints.size() < 2 || mPoints.size() % 2 != 0 ) { return; } mCenterPointRubberBand = createGeometryRubberBand( Qgis::Polygon ); mCenterPointRubberBand->show(); if ( mTempRubberBand ) { const QgsAbstractGeometryV2* rubberBandGeom = mTempRubberBand->geometry(); if ( rubberBandGeom ) { QgsVertexId idx( 0, 0, 2 ); QgsPointV2 pt = rubberBandGeom->vertexAt( idx ); updateCenterPointRubberBand( pt ); } } }
void QgsMapToolCircle3Points::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) { QgsPoint mapPoint( e->mapPoint() ); if ( e->button() == Qt::LeftButton ) { if ( mPoints.size() < 2 ) mPoints.append( mapPoint ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true ); mTempRubberBand->show(); } } else if ( e->button() == Qt::RightButton ) { deactivate(); if ( mParentTool ) { mParentTool->canvasReleaseEvent( e ); } } }