Improve visibility of tangents tool on cadCanvasMoveEvent (compatible

when CADDockWidget is enabled)
This commit is contained in:
lbartoletti 2017-10-09 16:31:16 +02:00
parent 81e0c1b478
commit 34433ae194
3 changed files with 63 additions and 20 deletions

View File

@ -43,6 +43,8 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e
{ {
QgsPoint mapPoint( e->mapPoint() ); QgsPoint mapPoint( e->mapPoint() );
EdgesOnlyFilter filter;
QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter );
QgsPointXY p1, p2; QgsPointXY p1, p2;
@ -50,8 +52,6 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e
{ {
if ( mPoints.size() < 2 * 2 ) if ( mPoints.size() < 2 * 2 )
{ {
EdgesOnlyFilter filter;
QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter );
if ( match.isValid() ) if ( match.isValid() )
{ {
match.edgePoints( p1, p2 ); match.edgePoints( p1, p2 );
@ -69,7 +69,7 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e
QgsMessageBar::CRITICAL, QgisApp::instance()->messageTimeout() ); QgsMessageBar::CRITICAL, QgisApp::instance()->messageTimeout() );
deactivate(); deactivate();
} }
else
createRadiusSpinBox(); createRadiusSpinBox();
} }
} }
@ -98,14 +98,38 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e
void QgsMapToolCircle2TangentsPoint::cadCanvasMoveEvent( QgsMapMouseEvent *e ) void QgsMapToolCircle2TangentsPoint::cadCanvasMoveEvent( QgsMapMouseEvent *e )
{ {
QgsPoint mapPoint( e->mapPoint() ); QgsPoint mapPoint( e->mapPoint() );
if ( mPoints.size() == 4 ) EdgesOnlyFilter filter;
QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter );
if ( mPoints.size() < 2 * 2 )
{ {
if ( !mTempRubberBand ) if ( !mTempRubberBand )
{ {
mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true ); mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true );
mTempRubberBand->setFillColor( QColor( 0, 0, 255 ) );
mTempRubberBand->setStrokeColor( QColor( 0, 0, 255 ) );
mTempRubberBand->setStrokeWidth( 2 );
mTempRubberBand->show(); mTempRubberBand->show();
} }
else
mTempRubberBand->hide();
if ( match.isValid() )
{
QgsPointXY p1, p2;
match.edgePoints( p1, p2 );
std::unique_ptr<QgsLineString> line( new QgsLineString() );
line->addVertex( QgsPoint( p1 ) );
line->addVertex( QgsPoint( p2 ) );
mTempRubberBand->setGeometry( line.release() );
mTempRubberBand->show();
}
}
if ( mPoints.size() == 4 )
{
QgsPoint center = QgsPoint( mCenters.at( 0 ) ); QgsPoint center = QgsPoint( mCenters.at( 0 ) );
const double currentDist = mapPoint.distanceSquared( center ); const double currentDist = mapPoint.distanceSquared( center );
for ( int i = 1; i < mCenters.size(); ++i ) for ( int i = 1; i < mCenters.size(); ++i )
@ -248,7 +272,7 @@ void QgsMapToolCircle2TangentsPoint::radiusSpinBoxChanged( int radius )
qDeleteAll( mRubberBands ); qDeleteAll( mRubberBands );
mRubberBands.clear(); mRubberBands.clear();
if ( mTempRubberBand ) if ( mPoints.size() == 4 )
{ {
std::unique_ptr<QgsMultiPolygonV2> rb( new QgsMultiPolygonV2() ); std::unique_ptr<QgsMultiPolygonV2> rb( new QgsMultiPolygonV2() );
for ( int i = 0; i < mCenters.size(); ++i ) for ( int i = 0; i < mCenters.size(); ++i )

View File

@ -46,20 +46,6 @@ void QgsMapToolCircle3Tangents::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
mPoints.append( QgsPoint( p1 ) ); mPoints.append( QgsPoint( p1 ) );
mPoints.append( QgsPoint( p2 ) ); mPoints.append( QgsPoint( p2 ) );
} }
if ( !mPoints.isEmpty() )
{
if ( !mTempRubberBand )
{
mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true );
mTempRubberBand->show();
}
std::unique_ptr<QgsLineString> line( new QgsLineString() );
line->addVertex( QgsPoint( p1 ) );
line->addVertex( QgsPoint( p2 ) );
mTempRubberBand->setGeometry( line.release() );
}
} }
else if ( e->button() == Qt::RightButton ) else if ( e->button() == Qt::RightButton )
{ {
@ -84,3 +70,35 @@ void QgsMapToolCircle3Tangents::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
} }
} }
} }
void QgsMapToolCircle3Tangents::cadCanvasMoveEvent( QgsMapMouseEvent *e )
{
QgsPoint mapPoint( e->mapPoint() );
EdgesOnlyFilter filter;
QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter );
if ( !mTempRubberBand )
{
mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true );
mTempRubberBand->setFillColor( QColor( 0, 0, 255 ) );
mTempRubberBand->setStrokeColor( QColor( 0, 0, 255 ) );
mTempRubberBand->setStrokeWidth( 2 );
mTempRubberBand->show();
}
else
mTempRubberBand->hide();
if ( match.isValid() )
{
QgsPointXY p1, p2;
match.edgePoints( p1, p2 );
std::unique_ptr<QgsLineString> line( new QgsLineString() );
line->addVertex( QgsPoint( p1 ) );
line->addVertex( QgsPoint( p2 ) );
mTempRubberBand->setGeometry( line.release() );
mTempRubberBand->show();
}
}

View File

@ -28,6 +28,7 @@ class QgsMapToolCircle3Tangents: public QgsMapToolAddCircle
QgsMapToolCircle3Tangents( QgsMapToolCapture *parentTool, QgsMapCanvas *canvas, CaptureMode mode = CaptureLine ); QgsMapToolCircle3Tangents( QgsMapToolCapture *parentTool, QgsMapCanvas *canvas, CaptureMode mode = CaptureLine );
void cadCanvasReleaseEvent( QgsMapMouseEvent *e ) override; void cadCanvasReleaseEvent( QgsMapMouseEvent *e ) override;
void cadCanvasMoveEvent( QgsMapMouseEvent *e ) override;
}; };
#endif // QGSMAPTOOLCIRCLE3TANGENTS_H #endif // QGSMAPTOOLCIRCLE3TANGENTS_H