mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-24 00:06:24 -04:00
Improve visibility of tangents tool on cadCanvasMoveEvent (compatible
when CADDockWidget is enabled)
This commit is contained in:
parent
81e0c1b478
commit
34433ae194
@ -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 )
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user