index ab46b21a6c955ee8c69fead5af637fa15cad043d..5ee1582342f6950ab89e294352e3e11f26e82d32 100644 (file)
--- a/src/vanishing-point.cpp
+++ b/src/vanishing-point.cpp
#include "xml/repr.h"
#include "perspective-line.h"
#include "shape-editor.h"
+#include "snap.h"
+#include "sp-namedview.h"
namespace Box3D {
}
static void
-vp_knot_moved_handler (SPKnot */*knot*/, Geom::Point const *ppointer, guint state, gpointer data)
+vp_knot_moved_handler (SPKnot *knot, Geom::Point const *ppointer, guint state, gpointer data)
{
VPDragger *dragger = (VPDragger *) data;
VPDrag *drag = dragger->parent;
@@ -103,7 +105,7 @@ vp_knot_moved_handler (SPKnot */*knot*/, Geom::Point const *ppointer, guint stat
sel_boxes = (*vp)->selectedBoxes(sp_desktop_selection(inkscape_active_desktop()));
// we create a new perspective ...
- Persp3D *new_persp = persp3d_create_xml_element (dragger->parent->document, old_persp);
+ Persp3D *new_persp = persp3d_create_xml_element (dragger->parent->document, old_persp->perspective_impl);
/* ... unlink the boxes from the old one and
FIXME: We need to unlink the _un_selected boxes of each VP so that
@@ -170,10 +172,20 @@ vp_knot_moved_handler (SPKnot */*knot*/, Geom::Point const *ppointer, guint stat
return;
}
}
- }
+ // We didn't snap to another dragger, so we'll try a regular snap
+ SPDesktop *desktop = inkscape_active_desktop();
+ SnapManager &m = desktop->namedview->snap_manager;
+ m.setup(desktop);
+ Inkscape::SnappedPoint s = m.freeSnap(Inkscape::SnapCandidatePoint(p, Inkscape::SNAPSOURCE_OTHER_HANDLE));
+ m.unSetup();
+ if (s.getSnapped()) {
+ p = s.getPoint();
+ sp_knot_moveto(knot, p);
+ }
+ }
- dragger->point = p; // FIXME: Brauchen wir dragger->point überhaupt?
+ dragger->point = p; // FIXME: Is dragger->point being used at all?
dragger->updateVPs(p);
dragger->updateBoxDisplays();
void
VanishingPoint::set_pos(Proj::Pt2 const &pt) {
g_return_if_fail (_persp);
- _persp->tmat.set_image_pt (_axis, pt);
+ _persp->perspective_impl->tmat.set_image_pt (_axis, pt);
}
std::list<SPBox3D *>