mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-01 00:05:25 -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() );
|
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 )
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user