snap.cpp revision b28c4e3da388087b108e7a5749d75668afcd2d58
0N/A * \brief SnapManager class. 0N/A * Lauris Kaplinski <lauris@kaplinski.com> 0N/A * Frank Felfe <innerspace@iname.com> 0N/A * Carl Hetherington <inkscape@carlh.net> 0N/A * Copyright (C) 2006-2007 Johan Engelen <johan@shouraizou.nl> 0N/A * Copyright (C) 1999-2002 Authors 0N/A * Released under GNU GPL, read the file 'COPYING' for more information * Construct a SnapManager for a SPNamedView. * \param v `Owning' SPNamedView. * \return List of snappers that we use. * \return List of gridsnappers that we use. //FIXME: this code should actually do this: add new grid snappers that are active for this desktop. now it just adds all gridsnappers * \return true if one of the snappers will try to snap something. * Try to snap a point to any interested snappers. * \param t Type of point. * \param it Item to ignore when snapping. * Try to snap a point to any interested snappers. * \param t Type of point. * \param it List of items to ignore when snapping. * Try to snap a point to any of the specified snappers. * \param t Type of point. * \param it List of items to ignore when snapping. * \param snappers List of snappers to try to snap to * Try to snap a point to any of the specified snappers. Snap always, ignoring the snap-distance * \param t Type of point. * \param it Item to ignore when snapping. * \param snappers List of snappers to try to snap to * Try to snap a point to any of the specified snappers. Snap always, ignoring the snap-distance * \param t Type of point. * \param it List of items to ignore when snapping. * \param snappers List of snappers to try to snap to * Try to snap a point to any interested snappers. A snap will only occur along * a line described by a Inkscape::Snapper::ConstraintLine. * \param t Type of point. * \param c Constraint line. * \param it Item to ignore when snapping. * Try to snap a point to any interested snappers. A snap will only occur along * a line described by a Inkscape::Snapper::ConstraintLine. * \param t Type of point. * \param c Constraint line. * \param it List of items to ignore when snapping. * Main internal snapping method, which is called by the other, friendlier, public * methods. It's a bit hairy as it has lots of parameters, but it saves on a lot * \param type Type of points being snapped. * \param points List of points to snap. * \param ignore List of items to ignore while snapping. * \param constrained true if the snap is constrained. * \param constraint Constraint line to use, if `constrained' is true, otherwise undefined. * \param transformation_type Type of transformation to apply to points before trying to snap them. * \param transformation Description of the transformation; details depend on the type. * \param origin Origin of the transformation, if applicable. * \param dim Dimension of the transformation, if applicable. * \param uniform true if the transformation should be uniform, if applicable. /* We have a list of points, which we are proposing to transform in some way. We need to see ** if any of these points, when transformed, snap to anything. If they do, we return the ** appropriate transformation with `true'; otherwise we return the original scale with `false'. /* Quick check to see if we have any snappers that are enabled */ /* The current best transformation */ /* The current best metric for the best transformation; lower is better, NR_HUGE ** means that we haven't snapped anything. /* Work out the transformed version of this point */ /* We snapped. Find the transformation that describes where the snapped point has ** ended up, and also the metric for this transformation. for (
int j = 0; j <
2; j++) {
/* Note it if it's the best so far */ // Using " < 1e6" instead of " < NR::HUGE" for catching some rounding errors // These rounding errors might be caused by NRRects, see bug #1584301 * Try to snap a list of points to any interested snappers after they have undergone * \param t Type of points. * \param it List of items to ignore when snapping. * \param tr Proposed translation. * \return Snapped translation, if a snap occurred, and a flag indicating whether a snap occurred. * Try to snap a list of points to any interested snappers after they have undergone a * translation. A snap will only occur along a line described by a * Inkscape::Snapper::ConstraintLine. * \param t Type of points. * \param it List of items to ignore when snapping. * \param c Constraint line. * \param tr Proposed translation. * \return Snapped translation, if a snap occurred, and a flag indicating whether a snap occurred. * Try to snap a list of points to any interested snappers after they have undergone * \param t Type of points. * \param it List of items to ignore when snapping. * \param s Proposed scale. * \param o Origin of proposed scale. * \return Snapped scale, if a snap occurred, and a flag indicating whether a snap occurred. t, p,
it,
false,
NR::
Point(),
SCALE,
NR::
Point(s[
NR::X], s[
NR::Y]), o,
NR::X,
false * Try to snap a list of points to any interested snappers after they have undergone * a scale. A snap will only occur along a line described by a * Inkscape::Snapper::ConstraintLine. * \param t Type of points. * \param it List of items to ignore when snapping. * \param s Proposed scale. * \param o Origin of proposed scale. * \return Snapped scale, if a snap occurred, and a flag indicating whether a snap occurred. t, p,
it,
true, c,
SCALE,
NR::
Point(s[
NR::X], s[
NR::Y]), o,
NR::X,
false * Try to snap a list of points to any interested snappers after they have undergone * \param t Type of points. * \param it List of items to ignore when snapping. * \param s Proposed stretch. * \param o Origin of proposed stretch. * \param d Dimension in which to apply proposed stretch. * \param u true if the stretch should be uniform (ie to be applied equally in both dimensions) * \return Snapped stretch, if a snap occurred, and a flag indicating whether a snap occurred. t, p,
it,
false,
NR::
Point(),
STRETCH,
NR::
Point(s, s), o, d, u
* Try to snap a list of points to any interested snappers after they have undergone * \param t Type of points. * \param it List of items to ignore when snapping. * \param s Proposed skew. * \param o Origin of proposed skew. * \param d Dimension in which to apply proposed skew. * \return Snapped skew, if a snap occurred, and a flag indicating whether a snap occurred. t, p,
it,
false,
NR::
Point(),
SKEW,
NR::
Point(s, s), o, d,
false c-file-style:"stroustrup" c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :