void QgsMapToolAddCircularString::keyPressEvent( QKeyEvent* e ) { if ( e && e->isAutoRepeat() ) { return; } if ( e && e->key() == Qt::Key_R ) { mShowCenterPointRubberBand = true; createCenterPointRubberBand(); } if ( e && e->key() == Qt::Key_Escape ) { mPoints.clear(); delete mRubberBand; mRubberBand = nullptr; delete mTempRubberBand; mTempRubberBand = nullptr; removeCenterPointRubberBand(); if ( mParentTool ) mParentTool->keyPressEvent( e ); } }
void QgsMapToolAddCircularString::keyReleaseEvent( QKeyEvent* e ) { if ( e && e->isAutoRepeat() ) { return; } if ( e && e->key() == Qt::Key_R ) { removeCenterPointRubberBand(); mShowCenterPointRubberBand = false; } }
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::deactivate() { if ( !mParentTool || mPoints.size() < 3 ) { return; } if ( mPoints.size() % 2 == 0 ) //a valid circularstring needs to have an odd number of vertices { mPoints.removeLast(); } QgsCircularStringV2* c = new QgsCircularStringV2(); c->setPoints( mPoints ); mParentTool->addCurve( c ); mPoints.clear(); delete mRubberBand; mRubberBand = 0; removeCenterPointRubberBand(); QgsMapToolCapture::deactivate(); }
QgsMapToolAddCircularString::~QgsMapToolAddCircularString() { delete mRubberBand; delete mTempRubberBand; removeCenterPointRubberBand(); }