From e182d3546498c8c865fb155481890c5571430c6f Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Tue, 14 Feb 2012 21:56:34 +0100 Subject: 1) Add checkboxes for perpendicular and tangential snapping to the document properties dialog (on the snap tab) 2) Newly created guides (dragged off the ruler) will take on the angle of the curve that's being snapped to (either perpendicularly or tangentialy, depending of the settings in the document properties dialog) (bzr r10975) --- src/object-snapper.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/object-snapper.cpp') diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp index 1a4d79a7d..328f58e68 100644 --- a/src/object-snapper.cpp +++ b/src/object-snapper.cpp @@ -499,8 +499,8 @@ void Inkscape::ObjectSnapper::_snapPaths(IntermSnapResults &isr, // continue counting bool strict_snapping = _snapmanager->snapprefs.getStrictSnapping(); - bool snap_perp = _snapmanager->snapprefs.isTargetSnappable(SNAPTARGET_PATH_PERPENDICULAR); - bool snap_tang = _snapmanager->snapprefs.isTargetSnappable(SNAPTARGET_PATH_TANGENTIAL); + bool snap_perp = _snapmanager->snapprefs.getSnapPerp(); + bool snap_tang = _snapmanager->snapprefs.getSnapTang(); //dt->snapindicator->remove_debugging_points(); for (std::vector::const_iterator it_p = _paths_to_snap_to->begin(); it_p != _paths_to_snap_to->end(); it_p++) { @@ -549,7 +549,14 @@ void Inkscape::ObjectSnapper::_snapPaths(IntermSnapResults &isr, // std::cout << " dist -> " << dist << std::endl; if (dist < getSnapperTolerance()) { // Add the curve we have snapped to - isr.curves.push_back(SnappedCurve(sp_dt, num_path, index, dist, getSnapperTolerance(), getSnapperAlwaysSnap(), false, curve, p.getSourceType(), p.getSourceNum(), it_p->target_type, it_p->target_bbox)); + Geom::Point sp_tangent_dt = Geom::Point(0,0); + if (p.getSourceType() == Inkscape::SNAPSOURCE_GUIDE_ORIGIN) { + // We currently only use the tangent when snapping guides, so only in this case we will + // actually calculate the tangent to avoid wasting CPU cycles + Geom::Point sp_tangent_doc = curve->unitTangentAt(*np); + sp_tangent_dt = dt->doc2dt(sp_tangent_doc) - dt->doc2dt(Geom::Point(0,0)); + } + isr.curves.push_back(SnappedCurve(sp_dt, sp_tangent_dt, num_path, index, dist, getSnapperTolerance(), getSnapperAlwaysSnap(), false, curve, p.getSourceType(), p.getSourceNum(), it_p->target_type, it_p->target_bbox)); if (snap_tang || snap_perp) { // For each curve that's within snapping range, we will now also search for tangential and perpendicular snaps _snapPathsTangPerp(snap_tang, snap_perp, isr, p, curve, dt); -- cgit v1.2.3