Krita Source Code Documentation
Loading...
Searching...
No Matches
IntersectionSnapStrategy Class Reference

snaps to intersections of shapes More...

#include <KoSnapStrategy.h>

+ Inheritance diagram for IntersectionSnapStrategy:

Public Member Functions

QPainterPath decoration (const KoViewConverter &converter) const override
 returns the current snap strategy decoration
 
 IntersectionSnapStrategy ()
 
bool snap (const QPointF &mousePosition, KoSnapProxy *proxy, qreal maxSnapDistance) override
 
- Public Member Functions inherited from KoSnapStrategy
 KoSnapStrategy (KoSnapGuide::Strategy type)
 
QPointF snappedPosition () const
 returns the snapped position form the last call to snapToPoints
 
SnapType snappedType () const
 
KoSnapGuide::Strategy type () const
 returns the strategies type
 
virtual ~KoSnapStrategy ()
 

Additional Inherited Members

- Public Types inherited from KoSnapStrategy
enum  SnapType { ToPoint = 0 , ToLine }
 
- Static Public Member Functions inherited from KoSnapStrategy
static qreal scalarProduct (const QPointF &p1, const QPointF &p2)
 
static qreal squareDistance (const QPointF &p1, const QPointF &p2)
 
- Protected Member Functions inherited from KoSnapStrategy
void setSnappedPosition (const QPointF &position, SnapType snapType)
 sets the current snapped position
 

Detailed Description

snaps to intersections of shapes

Definition at line 101 of file KoSnapStrategy.h.

Constructor & Destructor Documentation

◆ IntersectionSnapStrategy()

IntersectionSnapStrategy::IntersectionSnapStrategy ( )

Definition at line 374 of file KoSnapStrategy.cpp.

376{
377}
@ IntersectionSnapping
Definition KoSnapGuide.h:53
KoSnapStrategy(KoSnapGuide::Strategy type)

Member Function Documentation

◆ decoration()

QPainterPath IntersectionSnapStrategy::decoration ( const KoViewConverter & converter) const
overridevirtual

returns the current snap strategy decoration

Implements KoSnapStrategy.

Definition at line 412 of file KoSnapStrategy.cpp.

413{
414 QRectF unzoomedRect = converter.viewToDocument(QRectF(0, 0, 11, 11));
415 unzoomedRect.moveCenter(snappedPosition());
416 QPainterPath decoration;
417 decoration.addRect(unzoomedRect);
418 return decoration;
419}
QPainterPath decoration(const KoViewConverter &converter) const override
returns the current snap strategy decoration
QPointF snappedPosition() const
returns the snapped position form the last call to snapToPoints
virtual QPointF viewToDocument(const QPointF &viewPoint) const

References decoration(), KoSnapStrategy::snappedPosition(), and KoViewConverter::viewToDocument().

◆ snap()

bool IntersectionSnapStrategy::snap ( const QPointF & mousePosition,
KoSnapProxy * proxy,
qreal maxSnapDistance )
overridevirtual

Implements KoSnapStrategy.

Definition at line 379 of file KoSnapStrategy.cpp.

380{
381 Q_ASSERT(std::isfinite(maxSnapDistance));
382 const qreal maxDistance = maxSnapDistance * maxSnapDistance;
383 qreal minDistance = HUGE_VAL;
384
385 QRectF rect(-maxSnapDistance, -maxSnapDistance, maxSnapDistance, maxSnapDistance);
386 rect.moveCenter(mousePosition);
387 QPointF snappedPoint = mousePosition;
388
389 QList<KoPathSegment> segments = proxy->segmentsInRect(rect, false);
390 int segmentCount = segments.count();
391 for (int i = 0; i < segmentCount; ++i) {
392 const KoPathSegment &s1 = segments[i];
393 for (int j = i + 1; j < segmentCount; ++j) {
394 QList<QPointF> isects = s1.intersections(segments[j]);
395 Q_FOREACH (const QPointF &point, isects) {
396 if (! rect.contains(point))
397 continue;
398 qreal distance = squareDistance(mousePosition, point);
399 if (distance < maxDistance && distance < minDistance) {
400 snappedPoint = point;
401 minDistance = distance;
402 }
403 }
404 }
405 }
406
407 setSnappedPosition(snappedPoint, ToPoint);
408
409 return (minDistance < HUGE_VAL);
410}
QPointF s1
qreal distance(const QPointF &p1, const QPointF &p2)
A KoPathSegment consist of two neighboring KoPathPoints.
QList< KoPathSegment > segmentsInRect(const QRectF &rect, bool omitEditedShape)
returns list of points in given rectangle in document coordinates
void setSnappedPosition(const QPointF &position, SnapType snapType)
sets the current snapped position
static qreal squareDistance(const QPointF &p1, const QPointF &p2)

References distance(), s1, KoSnapProxy::segmentsInRect(), KoSnapStrategy::setSnappedPosition(), KoSnapStrategy::squareDistance(), and KoSnapStrategy::ToPoint.


The documentation for this class was generated from the following files: