summaryrefslogtreecommitdiffstats
path: root/src/object-snapper.cpp
diff options
context:
space:
mode:
authorDiederik van Lierop <mail@diedenrezi.nl>2012-02-14 20:56:34 +0000
committerDiederik van Lierop <mail@diedenrezi.nl>2012-02-14 20:56:34 +0000
commite182d3546498c8c865fb155481890c5571430c6f (patch)
tree3ea9d416ab9610220a3e11fbdae0f62c1ba91741 /src/object-snapper.cpp
parentUpdate Authors & Translators lists in About dialog (diff)
downloadinkscape-e182d3546498c8c865fb155481890c5571430c6f.tar.gz
inkscape-e182d3546498c8c865fb155481890c5571430c6f.zip
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)
Diffstat (limited to 'src/object-snapper.cpp')
-rw-r--r--src/object-snapper.cpp13
1 files changed, 10 insertions, 3 deletions
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<SnapCandidatePath >::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);