summaryrefslogtreecommitdiffstats
path: root/src/object-snapper.cpp
diff options
context:
space:
mode:
authorDiederik van Lierop <mail@diedenrezi.nl>2007-06-26 21:07:31 +0000
committerdvlierop2 <dvlierop2@users.sourceforge.net>2007-06-26 21:07:31 +0000
commita05ff8fca661b5681e43221f29a157fd7a26c106 (patch)
tree29fbf8b08f69ee5bf07f5a7225d37d6feaeca424 /src/object-snapper.cpp
parentAdd gtkrc to build.xml. Fix native path on <makefile> (diff)
downloadinkscape-a05ff8fca661b5681e43221f29a157fd7a26c106.tar.gz
inkscape-a05ff8fca661b5681e43221f29a157fd7a26c106.zip
implementing snapping to images
(bzr r3110)
Diffstat (limited to 'src/object-snapper.cpp')
-rw-r--r--src/object-snapper.cpp44
1 files changed, 26 insertions, 18 deletions
diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp
index 8d5b30dff..a904bd93b 100644
--- a/src/object-snapper.cpp
+++ b/src/object-snapper.cpp
@@ -15,7 +15,9 @@
#include "document.h"
#include "sp-namedview.h"
#include "sp-path.h"
+#include "sp-image.h"
#include "sp-item-group.h"
+#include "sp-item.h"
#include "sp-use.h"
#include "display/curve.h"
#include "desktop.h"
@@ -89,27 +91,33 @@ void Inkscape::ObjectSnapper::_snapNodes(Inkscape::SnappedPoint &s,
root_item = *i;
}
+ SPCurve *curve = NULL;
+
if (SP_IS_SHAPE(root_item)) {
-
SPShape const *sh = SP_SHAPE(root_item);
- if (sh->curve) {
-
- int j = 0;
-
- while (SP_CURVE_BPATH(sh->curve)[j].code != NR_END) {
-
- /* Get this node in desktop coordinates */
- NArtBpath const &bp = SP_CURVE_BPATH(sh->curve)[j];
- NR::Point const n = desktop->doc2dt(bp.c(3) * i2doc);
+ curve = sh->curve;
+ } else if (SP_IS_IMAGE(root_item)) {
+ SPImage const *im = SP_IMAGE(root_item);
+ curve = im->curve;
+ }
- /* Try to snap to this node of the path */
- NR::Coord const dist = NR::L2(n - p);
- if (dist < getDistance() && dist < s.getDistance()) {
- s = SnappedPoint(n, dist);
- }
+ if (curve) {
- j++;
+ int j = 0;
+
+ while (SP_CURVE_BPATH(curve)[j].code != NR_END) {
+
+ /* Get this node in desktop coordinates */
+ NArtBpath const &bp = SP_CURVE_BPATH(curve)[j];
+ NR::Point const n = desktop->doc2dt(bp.c(3) * i2doc);
+
+ /* Try to snap to this node of the path */
+ NR::Coord const dist = NR::L2(n - p);
+ if (dist < getDistance() && dist < s.getDistance()) {
+ s = SnappedPoint(n, dist);
}
+
+ j++;
}
}
}
@@ -126,13 +134,13 @@ void Inkscape::ObjectSnapper::_snapPaths(Inkscape::SnappedPoint &s,
SPDesktop const *desktop = SP_ACTIVE_DESKTOP;
NR::Point const p_doc = desktop->dt2doc(p);
-
+
for (std::list<SPItem*>::const_iterator i = cand.begin(); i != cand.end(); i++) {
/* Transform the requested snap point to this item's coordinates */
NR::Matrix i2doc(NR::identity());
SPItem *root_item = NULL;
- /* We might have a clone at hand, so make sure we get the root item */
+ /* We might have a clone at hand, so make sure we get the root item */
if (SP_IS_USE(*i)) {
i2doc = sp_use_get_root_transform(SP_USE(*i));
root_item = sp_use_root(SP_USE(*i));