From f643622c05d698103b68a0af90b96fadb021f815 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Sun, 14 Dec 2008 20:49:00 +0000 Subject: 1) snap midpoints of line segments (both as source and as target) 2) snap intersections within a single shape (as source; as target was already implemented) (bzr r7008) --- src/line-snapper.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'src/line-snapper.cpp') diff --git a/src/line-snapper.cpp b/src/line-snapper.cpp index f2d2f2ff6..bfcda3f79 100644 --- a/src/line-snapper.cpp +++ b/src/line-snapper.cpp @@ -5,7 +5,7 @@ * Authors: * Diederik van Lierop * And others... - * + * * Copyright (C) 1999-2008 Authors * * Released under GNU GPL, read the file 'COPYING' for more information @@ -19,7 +19,7 @@ #include #include "snap.h" -Inkscape::LineSnapper::LineSnapper(SnapManager const *sm, Geom::Coord const d) : Snapper(sm, d) +Inkscape::LineSnapper::LineSnapper(SnapManager *sm, Geom::Coord const d) : Snapper(sm, d) { } @@ -33,8 +33,8 @@ void Inkscape::LineSnapper::freeSnap(SnappedConstraints &sc, { if (_snap_enabled == false || _snapmanager->snapprefs.getSnapFrom(t) == false) { return; - } - + } + /* Get the lines that we will try to snap to */ const LineList lines = _getSnapLines(p); @@ -45,16 +45,16 @@ void Inkscape::LineSnapper::freeSnap(SnappedConstraints &sc, Geom::Point const p2 = p1 + Geom::rot90(i->first); // 2nd point at guide/grid line // std::cout << " line through " << i->second << " with normal " << i->first; g_assert(i->first != Geom::Point(0,0)); // we cannot project on an linesegment of zero length - + Geom::Point const p_proj = project_on_linesegment(p, p1, p2); Geom::Coord const dist = Geom::L2(p_proj - p); //Store any line that's within snapping range if (dist < getSnapperTolerance()) { _addSnappedLine(sc, p_proj, dist, i->first, i->second); - // std::cout << " -> distance = " << dist; - } + // std::cout << " -> distance = " << dist; + } // std::cout << std::endl; - } + } } void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc, @@ -69,7 +69,7 @@ void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc, if (_snap_enabled == false || _snapmanager->snapprefs.getSnapFrom(t) == false) { return; } - + /* Get the lines that we will try to snap to */ const LineList lines = _getSnapLines(p); @@ -77,19 +77,19 @@ void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc, if (Geom::L2(c.getDirection()) > 0) { // Can't do a constrained snap without a constraint /* Normal to the line we're trying to snap along */ Geom::Point const n(Geom::rot90(Geom::unit_vector(c.getDirection()))); - + Geom::Point const point_on_line = c.hasPoint() ? c.getPoint() : p; - + /* Constant term of the line we're trying to snap along */ Geom::Coord const q0 = dot(n, point_on_line); /* Constant term of the grid or guide line */ - Geom::Coord const q1 = dot(i->first, i->second); - + Geom::Coord const q1 = dot(i->first, i->second); + /* Try to intersect this line with the target line */ Geom::Point t_2geom(NR_HUGE, NR_HUGE); Geom::IntersectorKind const k = Geom::line_intersection(n, q0, i->first, q1, t_2geom); Geom::Point t(t_2geom); - + if (k == Geom::intersects) { const Geom::Coord dist = L2(t - p); if (dist < getSnapperTolerance()) { @@ -98,8 +98,8 @@ void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc, // to look for additional intersections; just return the snapped point // and forget about the line sc.points.push_back(SnappedPoint(t, Inkscape::SNAPTARGET_UNDEFINED, dist, getSnapperTolerance(), getSnapperAlwaysSnap(), true)); - // The type of the snap target is yet undefined, as we cannot tell whether - // we're snapping to grid or the guide lines; must be set by on a higher level + // The type of the snap target is yet undefined, as we cannot tell whether + // we're snapping to grid or the guide lines; must be set by on a higher level } } } -- cgit v1.2.3