24 mTolerance = s.
value( QStringLiteral(
"/Processing/Modeler/snapTolerancePixels" ), 40 ).toInt();
34 mSnapToGrid = enabled;
41 bool snappedXToGrid =
false;
42 bool snappedYToGrid =
false;
43 const QPointF res =
snapPointToGrid( point, scaleFactor, snappedXToGrid, snappedYToGrid );
44 if ( snappedXToGrid && snapVertical )
47 point.setX( res.x() );
49 if ( snappedYToGrid && snapHorizontal )
52 point.setY( res.y() );
58QRectF
QgsModelSnapper::snapRect(
const QRectF &rect,
double scaleFactor,
bool &snapped,
bool snapHorizontal,
bool snapVertical )
const
61 QRectF snappedRect = rect;
63 bool snappedXToGrid =
false;
64 bool snappedYToGrid =
false;
65 QList< QPointF > points;
66 points << rect.topLeft() << rect.topRight() << rect.bottomLeft() << rect.bottomRight();
67 const QPointF res =
snapPointsToGrid( points, scaleFactor, snappedXToGrid, snappedYToGrid );
68 if ( snappedXToGrid && snapVertical )
71 snappedRect.translate( res.x(), 0 );
73 if ( snappedYToGrid && snapHorizontal )
76 snappedRect.translate( 0, res.y() );
85 QRectF snappedRect = rect;
87 bool snappedXToGrid =
false;
88 bool snappedYToGrid =
false;
89 QPointF res =
snapPointsToGrid( QList< QPointF >() << rect.topLeft(), scaleFactor, snappedXToGrid, snappedYToGrid );
90 if ( snappedXToGrid && snapVertical )
93 snappedRect.setLeft( snappedRect.left() + res.x() );
95 if ( snappedYToGrid && snapHorizontal )
98 snappedRect.setTop( snappedRect.top() + res.y() );
100 res =
snapPointsToGrid( QList< QPointF >() << rect.bottomRight(), scaleFactor, snappedXToGrid, snappedYToGrid );
101 if ( snappedXToGrid && snapVertical )
104 snappedRect.setRight( snappedRect.right() + res.x() );
106 if ( snappedYToGrid && snapHorizontal )
109 snappedRect.setBottom( snappedRect.bottom() + res.y() );
117 const QPointF delta =
snapPointsToGrid( QList< QPointF >() << point, scaleFactor, snappedX, snappedY );
118 return point + delta;
127 return QPointF( 0, 0 );
132 return QPointF( 0, 0 );
137 double smallestDiffX = std::numeric_limits<double>::max();
138 double smallestDiffY = std::numeric_limits<double>::max();
139 for (
const QPointF point : points )
142 const double gridRes = 30;
143 int xRatio =
static_cast< int >( ( point.x() ) / gridRes + 0.5 );
144 int yRatio =
static_cast< int >( ( point.y() ) / gridRes + 0.5 );
146 const double xSnapped = xRatio * gridRes;
147 const double ySnapped = yRatio * gridRes;
149 const double currentDiffX = std::fabs( xSnapped - point.x() );
150 if ( currentDiffX < smallestDiffX )
152 smallestDiffX = currentDiffX;
153 deltaX = xSnapped - point.x();
156 const double currentDiffY = std::fabs( ySnapped - point.y() );
157 if ( currentDiffY < smallestDiffY )
159 smallestDiffY = currentDiffY;
160 deltaY = ySnapped - point.y();
165 const double alignThreshold = mTolerance / scaleFactor;
167 QPointF delta( 0, 0 );
168 if ( smallestDiffX <= alignThreshold )
172 delta.setX( deltaX );
174 if ( smallestDiffY <= alignThreshold )
178 delta.setY( deltaY );
Contains settings relating to the appearance, spacing and offset for layout grids.
QgsLayoutMeasurement resolution() const
Returns the page/snap grid resolution.
double length() const
Returns the length of the measurement.
int snapTolerance() const
Returns the snap tolerance (in pixels) to use when snapping.
void setSnapTolerance(int snapTolerance)
Sets the snap tolerance (in pixels) to use when snapping.
QPointF snapPointsToGrid(const QList< QPointF > &points, double scaleFactor, bool &snappedX, bool &snappedY) const
Snaps a set of points to the grid.
QRectF snapRect(const QRectF &rect, double scaleFactor, bool &snapped, bool snapHorizontal=true, bool snapVertical=true) const
Snaps a layout coordinate rect.
QgsModelSnapper()
Constructor for QgsModelSnapper, attached to the specified layout.
QPointF snapPoint(QPointF point, double scaleFactor, bool &snapped, bool snapHorizontal=true, bool snapVertical=true) const
Snaps a layout coordinate point.
QRectF snapRectWithResize(const QRectF &rect, double scaleFactor, bool &snapped, bool snapHorizontal=true, bool snapVertical=true) const
Snaps a layout coordinate rect.
QPointF snapPointToGrid(QPointF point, double scaleFactor, bool &snappedX, bool &snappedY) const
Snaps a layout coordinate point to the grid.
void setSnapToGrid(bool enabled)
Sets whether snapping to grid is enabled.
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.