From 176e8ce89cd15a6bb3469ebac57736b3a0688e35 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Tue, 19 Oct 2010 22:50:03 +0200 Subject: 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 (bzr r9837) --- src/line-snapper.cpp | 6 +++--- src/object-snapper.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') 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 -- cgit v1.2.3