29 if ( !mEnabled || !mAvailableByZoomFactor )
35 painter->setRenderHints( QPainter::Antialiasing );
36 painter->setCompositionMode( QPainter::CompositionMode_Difference );
38 double scaleFactor = painter->fontMetrics().xHeight() * .2;
40 mGridPen.setWidth( scaleFactor );
41 mCurrentPointPen.setWidth( scaleFactor * 3 );
42 const int gridMarkerLength = scaleFactor * 3;
49 const double gridXMin = std::ceil( layerExtent.
xMinimum() / mPrecision ) * mPrecision;
50 const double gridXMax = std::ceil( layerExtent.
xMaximum() / mPrecision ) * mPrecision;
51 const double gridYMin = std::ceil( layerExtent.
yMinimum() / mPrecision ) * mPrecision;
52 const double gridYMax = std::ceil( layerExtent.
yMaximum() / mPrecision ) * mPrecision;
54 for (
double x = gridXMin ; x < gridXMax; x += mPrecision )
56 for (
double y = gridYMin ; y < gridYMax; y += mPrecision )
63 painter->setPen( mCurrentPointPen );
67 painter->setPen( mGridPen );
69 painter->drawLine( canvasPt.x() - gridMarkerLength, canvasPt.y(), canvasPt.x() + gridMarkerLength, canvasPt.y() );
70 painter->drawLine( canvasPt.x(), canvasPt.y() - gridMarkerLength, canvasPt.x(), canvasPt.y() + gridMarkerLength );
78 mAvailableByZoomFactor =
false;
128 void QgsSnapToGridCanvasItem::updateMapCanvasCrs()
137 void QgsSnapToGridCanvasItem::updateZoomFactor()
144 const int threshold = 5;
147 if ( extent !=
rect() )
154 static_cast<int>( canvasCenter.y() - threshold ) );
156 static_cast<int>( canvasCenter.y() + threshold ) );
161 const double dist = layerPt1.
distance( layerPt2 );
163 if ( dist < mPrecision )
164 mAvailableByZoomFactor =
true;
166 mAvailableByZoomFactor =
false;
172 mAvailableByZoomFactor =
false;
A rectangle specified with double values.
QgsPointXY point() const
A point that will be highlighted on the map canvas.
double distance(double x, double y) const
Returns the distance between this point and a specified x, y coordinate.
void setCrs(const QgsCoordinateReferenceSystem &crs)
The CRS in which the grid should be calculated.
double yMaximum() const
Returns the y maximum value (top side of rectangle).
QgsSnapToGridCanvasItem(QgsMapCanvas *mapCanvas)
Will automatically be added to the mapCanvas.
A class to represent a 2D point.
double precision() const
The resolution of the grid in map units.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
An abstract class for items that can be placed on the map canvas.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
const QgsMapToPixel & mapToPixel() const
QgsRectangle rect() const
returns canvas item rectangle in map units
Map canvas is a class for displaying all GIS data types on a canvas.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
QgsCoordinateReferenceSystem destinationCrs() const
returns CRS of destination coordinate reference system
void setPrecision(double precision)
The resolution of the grid in map units.
QgsCoordinateReferenceSystem crs() const
The CRS in which the grid should be calculated.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
double xMaximum() const
Returns the x maximum value (right side of rectangle).
void setRect(const QgsRectangle &r, bool resetRotation=true)
sets canvas item rectangle in map units
QgsPointXY center() const
Returns the center point of the rectangle.
void setEnabled(bool enabled)
Enable this item.
void destinationCrsChanged()
Emitted when map CRS has changed.
QgsPointXY toMapCoordinates(int x, int y) const
Transform device coordinates to map (world) coordinates.
void paint(QPainter *painter) override
function to be implemented by derived classes
void setPoint(const QgsPointXY &point)
A point that will be highlighted on the map canvas.
QgsMapCanvas * mMapCanvas
pointer to map canvas
This class represents a coordinate reference system (CRS).
bool enabled() const
Enable this item.
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
Custom exception class for Coordinate Reference System related exceptions.
QPointF toCanvasCoordinates(const QgsPointXY &point) const
transformation from map coordinates to screen coordinates
double xMinimum() const
Returns the x minimum value (left side of rectangle).
void extentsChanged()
Emitted when the extents of the map change.