Logo Search packages:      
Sourcecode: inkscape version File versions  Download package

SnapManager Class Reference

#include <snap.h>

List of all members.


Detailed Description

Class to coordinate snapping operations.

The SnapManager class handles most (if not all) of the interfacing of the snapping mechanisms with the other parts of the code base. It stores the references to the various types of snappers for grid, guides and objects, and it stores most of the snapping preferences. Besides that it provides methods to setup the snapping environment (e.g. keeps a list of the items to ignore when looking for snap target candidates, and toggling of the snap indicator), and it provides many different methods for snapping queries (free snapping vs. constrained snapping, returning the result by reference or through a return statement, etc.)

Each SPNamedView has one of these. It offers methods to snap points to whatever snappers are defined (e.g. grid, guides etc.). It also allows callers to snap points which have undergone some transformation (e.g. translation, scaling etc.)

How snapping is implemented in Inkscape
The snapping system consists of two key elements. The first one is the snap manager (this class), which keeps some data about objects in the document and answers queries of the type "given this point and type of transformation, what is the best place to snap to?".
The second is in event-context.cpp and implements the snapping timeout. Whenever a motion events happens over the canvas, it stores it for later use and initiates a timeout. This timeout is discarded whenever a new motion event occurs. When the timeout expires, a global flag in SnapManager, accessed via getSnapPostponedGlobally(), is set to true and the stored event is replayed, but this time with snapping enabled. This way you can write snapping code directly in your control point's dragged handler as if there was no timeout.

Definition at line 66 of file snap.h.


Public Types

typedef std::list< const
Inkscape::Snapper * > 
SnapperList
enum  Transformation { TRANSLATION, SCALE, STRETCH, SKEW }

Public Member Functions

Inkscape::SnappedPoint constrainedSnap (Inkscape::SnapCandidatePoint const &p, Inkscape::Snapper::ConstraintLine const &constraint, Geom::OptRect const &bbox_to_snap=Geom::OptRect()) const
 Try to snap a point along a constraint line to grids, guides or objects.
void constrainedSnapReturnByRef (Geom::Point &p, Inkscape::SnapSourceType const source_type, Inkscape::Snapper::ConstraintLine const &constraint, Geom::OptRect const &bbox_to_snap=Geom::OptRect()) const
 Try to snap a point along a constraint line to grids, guides or objects.
Inkscape::SnappedPoint constrainedSnapScale (std::vector< Inkscape::SnapCandidatePoint > const &p, Geom::Point const &pointer, Geom::Scale const &s, Geom::Point const &o) const
 Apply a scaling to a set of points and snap such that the aspect ratio of the selection is preserved.
Inkscape::SnappedPoint constrainedSnapSkew (std::vector< Inkscape::SnapCandidatePoint > const &p, Geom::Point const &pointer, Inkscape::Snapper::ConstraintLine const &constraint, Geom::Point const &s, Geom::Point const &o, Geom::Dim2 d) const
 Apply a skew to a set of points and snap such that the direction of the skew is preserved.
Inkscape::SnappedPoint constrainedSnapStretch (std::vector< Inkscape::SnapCandidatePoint > const &p, Geom::Point const &pointer, Geom::Coord const &s, Geom::Point const &o, Geom::Dim2 d, bool uniform) const
 Apply a stretch to a set of points and snap such that the direction of the stretch is preserved.
Inkscape::SnappedPoint constrainedSnapTranslation (std::vector< Inkscape::SnapCandidatePoint > const &p, Geom::Point const &pointer, Inkscape::Snapper::ConstraintLine const &constraint, Geom::Point const &tr) const
 Apply a translation to a set of points and try to snap along a constraint.
Inkscape::SnappedPoint findBestSnap (Inkscape::SnapCandidatePoint const &p, SnappedConstraints const &sc, bool constrained, bool noCurves=false, bool allowOffScreen=false) const
 Given a set of possible snap targets, find the best target (which is not necessarily also the nearest target), and show the snap indicator if requested.
Inkscape::SnappedPoint freeSnap (Inkscape::SnapCandidatePoint const &p, Geom::OptRect const &bbox_to_snap=Geom::OptRect()) const
 Try to snap a point to grids, guides or objects.
void freeSnapReturnByRef (Geom::Point &p, Inkscape::SnapSourceType const source_type, Geom::OptRect const &bbox_to_snap=Geom::OptRect()) const
 Try to snap a point to grids, guides or objects.
Inkscape::SnappedPoint freeSnapScale (std::vector< Inkscape::SnapCandidatePoint > const &p, Geom::Point const &pointer, Geom::Scale const &s, Geom::Point const &o) const
 Apply a scaling to a set of points and try to snap freely in 2 degrees-of-freedom.
Inkscape::SnappedPoint freeSnapTranslation (std::vector< Inkscape::SnapCandidatePoint > const &p, Geom::Point const &pointer, Geom::Point const &tr) const
 Apply a translation to a set of points and try to snap freely in 2 degrees-of-freedom.
SPDesktop const * getDesktop () const
SPDocumentgetDocument () const
SnapperList getGridSnappers () const
 Return a list of gridsnappers.
SPGuide const * getGuideToIgnore () const
SPNamedView const * getNamedView () const
bool getSnapIndicator () const
SnapperList getSnappers () const
 Return a list of snappers.
bool gridSnapperMightSnap () const
void guideConstrainedSnap (Geom::Point &p, SPGuide const &guideline) const
 Try to snap a point on a guide to the intersection with another guide or a path.
void guideFreeSnap (Geom::Point &p, Geom::Point const &guide_normal, SPGuideDragType drag_type) const
 Try to snap a point of a guide to another guide or to a node.
Geom::Point multipleOfGridPitch (Geom::Point const &t, Geom::Point const &origin)
 Snap to the closest multiple of a grid pitch.
void preSnap (Inkscape::SnapCandidatePoint const &p)
void setup (SPDesktop const *desktop, bool snapindicator, std::vector< SPItem const * > &items_to_ignore, std::vector< Inkscape::SnapCandidatePoint > *unselected_nodes=NULL, SPGuide *guide_to_ignore=NULL)
 Prepare the snap manager for the actual snapping, which includes building a list of snap targets to ignore and toggling the snap indicator.
void setup (SPDesktop const *desktop, bool snapindicator=true, SPItem const *item_to_ignore=NULL, std::vector< Inkscape::SnapCandidatePoint > *unselected_nodes=NULL, SPGuide *guide_to_ignore=NULL)
 Convenience shortcut when there is only one item to ignore.
void setupIgnoreSelection (SPDesktop const *desktop, bool snapindicator=true, std::vector< Inkscape::SnapCandidatePoint > *unselected_nodes=NULL, SPGuide *guide_to_ignore=NULL)
 Setup, taking the list of items to ignore from the desktop's selection.
 SnapManager (SPNamedView const *v)
bool someSnapperMightSnap () const
 Return true if any snapping might occur, whether its to grids, guides or objects.

Public Attributes

Inkscape::GuideSnapper guide
 guide snapper
Inkscape::ObjectSnapper object
 snapper to other objects
Inkscape::SnapPreferences snapprefs

Protected Attributes

SPNamedView const * _named_view

Private Member Functions

void _displaySnapsource (Inkscape::SnapCandidatePoint const &p) const
 Mark the location of the snap source (not the snap target!) on the canvas by drawing a symbol.
Inkscape::SnappedPoint _snapTransformed (std::vector< Inkscape::SnapCandidatePoint > const &points, Geom::Point const &pointer, bool constrained, Inkscape::Snapper::ConstraintLine const &constraint, Transformation transformation_type, Geom::Point const &transformation, Geom::Point const &origin, Geom::Dim2 dim, bool uniform) const
 Method for snapping sets of points while they are being transformed.
Geom::Point _transformPoint (Inkscape::SnapCandidatePoint const &p, Transformation const transformation_type, Geom::Point const &transformation, Geom::Point const &origin, Geom::Dim2 const dim, bool const uniform) const
 Takes an untransformed point, applies the given transformation, and returns the transformed point. Eliminates lots of duplicated code.

Private Attributes

SPDesktop const * _desktop
SPGuide * _guide_to_ignore
 A guide that should not be snapped to, e.g. the guide that is currently being dragged.
std::vector< SPItem const * > _items_to_ignore
 Items that should not be snapped to, for example the items that are currently being dragged. Set using the setup() method.
bool _snapindicator
 When true, an indicator will be drawn at the position that was being snapped to.
std::vector
< Inkscape::SnapCandidatePoint > * 
_unselected_nodes
 Nodes of the path that is currently being edited and which have not been selected and which will therefore be stationary. Only these nodes will be considered for snapping to. Of each unselected node both the position (Geom::Point) and the type (Inkscape::SnapTargetType) will be stored.

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

Generated by  Doxygen 1.6.0   Back to index