From 0a78ad638f3bbcd46631cb2c741fca031356b725 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Sat, 8 Mar 2008 11:32:18 +0000 Subject: Node tool: snap to paths and their nodes, incl. to the path currently being edited (bzr r4989) --- src/snap.cpp | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'src/snap.cpp') diff --git a/src/snap.cpp b/src/snap.cpp index cb4ea3f58..093ae10e3 100644 --- a/src/snap.cpp +++ b/src/snap.cpp @@ -187,9 +187,34 @@ Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::Snapper::PointType t, std::vector points_to_snap; points_to_snap.push_back(p); - return freeSnap(t, p, true, points_to_snap, lit); + return freeSnap(t, p, true, points_to_snap, lit, NULL); } +/** + * Try to snap a point to any interested snappers. + * + * \param t Type of point. + * \param p Point. + * \param it Item to ignore when snapping. + * \return Snapped point. + */ + +Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::Snapper::PointType t, + NR::Point const &p, + SPItem const *it, + std::vector *unselected_nodes) const + +{ + std::list lit; + lit.push_back(it); + + std::vector points_to_snap; + points_to_snap.push_back(p); + + return freeSnap(t, p, true, points_to_snap, lit, unselected_nodes); +} + + /** * Try to snap a point to any of the specified snappers. * @@ -206,7 +231,8 @@ Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::Snapper::PointType t, NR::Point const &p, bool const &first_point, std::vector &points_to_snap, - std::list const &it) const + std::list const &it, + std::vector *unselected_nodes) const { if (!SomeSnapperMightSnap()) { return Inkscape::SnappedPoint(p, NR_HUGE, 0, false); @@ -217,7 +243,7 @@ Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::Snapper::PointType t, SnapperList const snappers = getSnappers(); for (SnapperList::const_iterator i = snappers.begin(); i != snappers.end(); i++) { - (*i)->freeSnap(sc, t, p, first_point, points_to_snap, it); + (*i)->freeSnap(sc, t, p, first_point, points_to_snap, it, unselected_nodes); } return findBestSnap(p, sc, false); @@ -414,7 +440,7 @@ std::pair SnapManager::_snapTransformed( } snapped = constrainedSnap(type, *j, i == points.begin(), transformed_points, dedicated_constraint, ignore); } else { - snapped = freeSnap(type, *j, i == points.begin(), transformed_points, ignore); + snapped = freeSnap(type, *j, i == points.begin(), transformed_points, ignore, NULL); } NR::Point result; @@ -704,6 +730,14 @@ std::pair SnapManager::freeSnapSkew(Inkscape::Snapper::PointTyp Inkscape::SnappedPoint SnapManager::findBestSnap(NR::Point const &p, SnappedConstraints &sc, bool constrained) const { + /* + std::cout << "Type and number of snapped constraints: " << std::endl; + std::cout << " Points : " << sc.points.size() << std::endl; + std::cout << " Lines : " << sc.lines.size() << std::endl; + std::cout << " Grid lines : " << sc.grid_lines.size()<< std::endl; + std::cout << " Guide lines : " << sc.guide_lines.size()<< std::endl; + */ + // Store all snappoints std::list sp_list; -- cgit v1.2.3