From 3b25ebdc31b234cc646116111713bd5860929380 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Tue, 19 Oct 2010 22:50:03 +0200 Subject: [PATCH] Use a better snap metric for constrained snapping (i.e. calculate the distance to the original point, not the projected point). This should more accurately predict what the user wants to snap to --- src/line-snapper.cpp | 6 +++--- src/object-snapper.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/line-snapper.cpp b/src/line-snapper.cpp index be64438ed..22a964d43 100644 --- a/src/line-snapper.cpp +++ b/src/line-snapper.cpp @@ -99,8 +99,8 @@ void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc, Geom::Coord d = Geom::L2(gridguide_line.versor()); // length of versor, needed to normalize the versor if (d > 0) { Geom::Point v = l*gridguide_line.versor()/d; - _addSnappedPoint(sc, p_proj + v, Geom::L2(pp - (p_proj + v)), p.getSourceType(), p.getSourceNum(), true); - _addSnappedPoint(sc, p_proj - v, Geom::L2(pp - (p_proj - v)), p.getSourceType(), p.getSourceNum(), true); + _addSnappedPoint(sc, p_proj + v, Geom::L2(p.getPoint() - (p_proj + v)), p.getSourceType(), p.getSourceNum(), true); + _addSnappedPoint(sc, p_proj - v, Geom::L2(p.getPoint() - (p_proj - v)), p.getSourceType(), p.getSourceNum(), true); } } } else { @@ -119,7 +119,7 @@ void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc, if (inters) { Geom::Point t = constraint_line.pointAt((*inters).ta); - const Geom::Coord dist = Geom::L2(t - pp); + const Geom::Coord dist = Geom::L2(t - p.getPoint()); if (dist < getSnapperTolerance()) { // When doing a constrained snap, we're already at an intersection. // This snappoint is therefore fully constrained, so there's no need diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp index b11e857dc..7e7e25921 100644 --- a/src/object-snapper.cpp +++ b/src/object-snapper.cpp @@ -633,7 +633,7 @@ void Inkscape::ObjectSnapper::_snapPathsConstrained(SnappedConstraints &sc, // Convert to desktop coordinates (*p_inters) = _snapmanager->getDesktop()->doc2dt(*p_inters); // Construct a snapped point - Geom::Coord dist = Geom::L2(p_proj_on_constraint - *p_inters); + Geom::Coord dist = Geom::L2(p.getPoint() - *p_inters); SnappedPoint s = SnappedPoint(*p_inters, p.getSourceType(), p.getSourceNum(), k->target_type, dist, getSnapperTolerance(), getSnapperAlwaysSnap(), true, k->target_bbox);; // Store the snapped point if (dist <= tolerance) { // If the intersection is within snapping range, then we might snap to it -- 2.30.2