@@ -28,6 +28,9 @@ QgsSnapToGridCanvasItem::QgsSnapToGridCanvasItem( QgsMapCanvas *mapCanvas )
28
28
29
29
void QgsSnapToGridCanvasItem::paint ( QPainter *painter )
30
30
{
31
+ if ( !mEnabled || !mAvailableByZoomFactor )
32
+ return ;
33
+
31
34
painter->save ();
32
35
QgsRectangle mapRect = mMapCanvas ->extent ();
33
36
if ( rect () != mapRect )
@@ -36,44 +39,41 @@ void QgsSnapToGridCanvasItem::paint( QPainter *painter )
36
39
painter->setRenderHints ( QPainter::Antialiasing );
37
40
painter->setCompositionMode ( QPainter::CompositionMode_Difference );
38
41
39
- if ( mEnabled && mAvailableByZoomFactor )
42
+ try
40
43
{
41
- try
42
- {
43
- const QgsRectangle layerExtent = mTransform .transformBoundingBox ( mapRect, QgsCoordinateTransform::ReverseTransform );
44
- const QgsPointXY layerPt = mTransform .transform ( mPoint , QgsCoordinateTransform::ReverseTransform );
44
+ const QgsRectangle layerExtent = mTransform .transformBoundingBox ( mapRect, QgsCoordinateTransform::ReverseTransform );
45
+ const QgsPointXY layerPt = mTransform .transform ( mPoint , QgsCoordinateTransform::ReverseTransform );
45
46
46
- const double gridXMin = std::ceil ( layerExtent.xMinimum () / mPrecision ) * mPrecision ;
47
- const double gridXMax = std::ceil ( layerExtent.xMaximum () / mPrecision ) * mPrecision ;
48
- const double gridYMin = std::ceil ( layerExtent.yMinimum () / mPrecision ) * mPrecision ;
49
- const double gridYMax = std::ceil ( layerExtent.yMaximum () / mPrecision ) * mPrecision ;
47
+ const double gridXMin = std::ceil ( layerExtent.xMinimum () / mPrecision ) * mPrecision ;
48
+ const double gridXMax = std::ceil ( layerExtent.xMaximum () / mPrecision ) * mPrecision ;
49
+ const double gridYMin = std::ceil ( layerExtent.yMinimum () / mPrecision ) * mPrecision ;
50
+ const double gridYMax = std::ceil ( layerExtent.yMaximum () / mPrecision ) * mPrecision ;
50
51
51
- for ( int x = gridXMin ; x < gridXMax; x += mPrecision )
52
+ for ( int x = gridXMin ; x < gridXMax; x += mPrecision )
53
+ {
54
+ for ( int y = gridYMin ; y < gridYMax; y += mPrecision )
52
55
{
53
- for ( int y = gridYMin ; y < gridYMax; y += mPrecision )
54
- {
55
- const QgsPointXY pt = mTransform .transform ( x, y );
56
- const QPointF canvasPt = toCanvasCoordinates ( pt );
57
-
58
- if ( qgsDoubleNear ( layerPt.x (), x, mPrecision / 3 ) && qgsDoubleNear ( layerPt.y (), y, mPrecision / 3 ) )
59
- {
60
- painter->setPen ( mCurrentPointPen );
61
- }
62
- else
63
- {
64
- painter->setPen ( mGridPen );
65
- }
66
- painter->drawLine ( canvasPt.x () - 3 , canvasPt.y (), canvasPt.x () + 3 , canvasPt.y () );
67
- painter->drawLine ( canvasPt.x (), canvasPt.y () - 3 , canvasPt.x (), canvasPt.y () + 3 );
56
+ const QgsPointXY pt = mTransform .transform ( x, y );
57
+ const QPointF canvasPt = toCanvasCoordinates ( pt );
68
58
59
+ if ( qgsDoubleNear ( layerPt.x (), x, mPrecision / 3 ) && qgsDoubleNear ( layerPt.y (), y, mPrecision / 3 ) )
60
+ {
61
+ painter->setPen ( mCurrentPointPen );
62
+ }
63
+ else
64
+ {
65
+ painter->setPen ( mGridPen );
69
66
}
67
+ painter->drawLine ( canvasPt.x () - 3 , canvasPt.y (), canvasPt.x () + 3 , canvasPt.y () );
68
+ painter->drawLine ( canvasPt.x (), canvasPt.y () - 3 , canvasPt.x (), canvasPt.y () + 3 );
69
+
70
70
}
71
71
}
72
- catch ( QgsCsException &e )
73
- {
74
- Q_UNUSED ( e )
75
- mAvailableByZoomFactor = false ;
76
- }
72
+ }
73
+ catch ( QgsCsException &e )
74
+ {
75
+ Q_UNUSED ( e )
76
+ mAvailableByZoomFactor = false ;
77
77
}
78
78
79
79
painter->restore ();
0 commit comments