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