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() );
EdgesOnlyFilter filter;
QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter );
QgsPointXY p1, p2;
@ -50,8 +52,6 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e
{
if ( mPoints.size() < 2 * 2 )
{
EdgesOnlyFilter filter;
QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter );
if ( match.isValid() )
{
match.edgePoints( p1, p2 );
@ -69,8 +69,8 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e
QgsMessageBar::CRITICAL, QgisApp::instance()->messageTimeout() );
deactivate();
}
createRadiusSpinBox();
else
createRadiusSpinBox();
}
}
else if ( e->button() == Qt::RightButton )
@ -98,14 +98,38 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e
void QgsMapToolCircle2TangentsPoint::cadCanvasMoveEvent( QgsMapMouseEvent *e )
{
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 )
{
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();
}
}
if ( mPoints.size() == 4 )
{
QgsPoint center = QgsPoint( mCenters.at( 0 ) );
const double currentDist = mapPoint.distanceSquared( center );
for ( int i = 1; i < mCenters.size(); ++i )
@ -248,7 +272,7 @@ void QgsMapToolCircle2TangentsPoint::radiusSpinBoxChanged( int radius )
qDeleteAll( mRubberBands );
mRubberBands.clear();
if ( mTempRubberBand )
if ( mPoints.size() == 4 )
{
std::unique_ptr<QgsMultiPolygonV2> rb( new QgsMultiPolygonV2() );
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( 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 )
{
@ -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 );
void cadCanvasReleaseEvent( QgsMapMouseEvent *e ) override;
void cadCanvasMoveEvent( QgsMapMouseEvent *e ) override;
};
#endif // QGSMAPTOOLCIRCLE3TANGENTS_H