From 35300c9822f9f84c8a011913235fd4e5dc2c5ac8 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Mon, 12 Jul 2010 07:51:13 +0200 Subject: - Snap while rotating an object using the selector tool - Rename the ConstraintLine class to SnapConstraint - Move some duplicated code to 2geom (bzr r9607) --- src/snap.h | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'src/snap.h') diff --git a/src/snap.h b/src/snap.h index 8a5688bea..26e599cc6 100644 --- a/src/snap.h +++ b/src/snap.h @@ -67,10 +67,11 @@ class SnapManager { public: enum Transformation { - TRANSLATION, + TRANSLATE, SCALE, STRETCH, - SKEW + SKEW, + ROTATE }; SnapManager(SPNamedView const *v); @@ -113,23 +114,23 @@ public: // point, by overwriting p, if snapping has occurred; otherwise p is untouched void constrainedSnapReturnByRef(Geom::Point &p, Inkscape::SnapSourceType const source_type, - Inkscape::Snapper::ConstraintLine const &constraint, + Inkscape::Snapper::SnapConstraint const &constraint, Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const; Inkscape::SnappedPoint constrainedSnap(Inkscape::SnapCandidatePoint const &p, - Inkscape::Snapper::ConstraintLine const &constraint, + Inkscape::Snapper::SnapConstraint const &constraint, Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const; void guideFreeSnap(Geom::Point &p, Geom::Point const &guide_normal, SPGuideDragType drag_type) const; void guideConstrainedSnap(Geom::Point &p, SPGuide const &guideline) const; - Inkscape::SnappedPoint freeSnapTranslation(std::vector const &p, + Inkscape::SnappedPoint freeSnapTranslate(std::vector const &p, Geom::Point const &pointer, Geom::Point const &tr) const; - Inkscape::SnappedPoint constrainedSnapTranslation(std::vector const &p, + Inkscape::SnappedPoint constrainedSnapTranslate(std::vector const &p, Geom::Point const &pointer, - Inkscape::Snapper::ConstraintLine const &constraint, + Inkscape::Snapper::SnapConstraint const &constraint, Geom::Point const &tr) const; Inkscape::SnappedPoint freeSnapScale(std::vector const &p, @@ -151,11 +152,16 @@ public: Inkscape::SnappedPoint constrainedSnapSkew(std::vector const &p, Geom::Point const &pointer, - Inkscape::Snapper::ConstraintLine const &constraint, + Inkscape::Snapper::SnapConstraint const &constraint, Geom::Point const &s, // s[0] = skew factor, s[1] = scale factor Geom::Point const &o, Geom::Dim2 d) const; + Inkscape::SnappedPoint constrainedSnapRotate(std::vector const &p, + Geom::Point const &pointer, + Geom::Coord const &angle, + Geom::Point const &o) const; + Inkscape::GuideSnapper guide; ///< guide snapper Inkscape::ObjectSnapper object; ///< snapper to other objects Inkscape::SnapPreferences snapprefs; @@ -181,14 +187,11 @@ private: SPDesktop const *_desktop; bool _snapindicator; ///< When true, an indicator will be drawn at the position that was being snapped to std::vector *_unselected_nodes; ///< Nodes of the path that is currently being edited and which have not been selected and which will therefore be stationary. Only these nodes will be considered for snapping to. Of each unselected node both the position (Geom::Point) and the type (Inkscape::SnapTargetType) will be stored - //TODO: Make _unselected_nodes type safe; in the line above int is used for Inkscape::SnapTargetType, but if I remember - //correctly then in other cases the int is being used for Inkscape::SnapSourceType, or for both. How to make - //this type safe? Inkscape::SnappedPoint _snapTransformed(std::vector const &points, Geom::Point const &pointer, bool constrained, - Inkscape::Snapper::ConstraintLine const &constraint, + Inkscape::Snapper::SnapConstraint const &constraint, Transformation transformation_type, Geom::Point const &transformation, Geom::Point const &origin, -- cgit v1.2.3 From a96bb3e891e103864fe501a92bad96a9ad04351e Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Sat, 24 Jul 2010 14:37:50 +0200 Subject: Avoid self-snapping when dragging a rotation center, and draw the rotation center at the snapped position (bzr r9641) --- src/snap.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/snap.h') diff --git a/src/snap.h b/src/snap.h index 26e599cc6..f740f3c62 100644 --- a/src/snap.h +++ b/src/snap.h @@ -92,11 +92,19 @@ public: std::vector &items_to_ignore, std::vector *unselected_nodes = NULL, SPGuide *guide_to_ignore = NULL); + void setupIgnoreSelection(SPDesktop const *desktop, bool snapindicator = true, std::vector *unselected_nodes = NULL, SPGuide *guide_to_ignore = NULL); + // If we're dragging a rotation center, then setRotationCenterSource() stores the parent item + // of this rotation center; this reference is used to make sure that we do not snap a rotation + // center to itself + // NOTE: Must be called after calling setup(), not before! + void setRotationCenterSource(SPItem *item) {_rotation_center_source_item = item;} + SPItem* getRotationCenterSource() {return _rotation_center_source_item;} + // freeSnapReturnByRef() is preferred over freeSnap(), because it only returns a // point if snapping has occurred (by overwriting p); otherwise p is untouched void freeSnapReturnByRef(Geom::Point &p, @@ -183,6 +191,7 @@ protected: private: std::vector _items_to_ignore; ///< Items that should not be snapped to, for example the items that are currently being dragged. Set using the setup() method + SPItem *_rotation_center_source_item; // to avoid snapping a rotation center to itself SPGuide *_guide_to_ignore; ///< A guide that should not be snapped to, e.g. the guide that is currently being dragged SPDesktop const *_desktop; bool _snapindicator; ///< When true, an indicator will be drawn at the position that was being snapped to -- cgit v1.2.3 From a83da58db0ad8e9a0b559a9fd5a55f40e247f38e Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Sat, 7 Aug 2010 10:15:18 +0200 Subject: Add a constrained snap method that takes multiple constraints. This reduces the code repetitiveness in the node tool (bzr r9692) --- src/snap.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/snap.h') diff --git a/src/snap.h b/src/snap.h index f740f3c62..c85c51963 100644 --- a/src/snap.h +++ b/src/snap.h @@ -129,6 +129,10 @@ public: Inkscape::Snapper::SnapConstraint const &constraint, Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const; + Inkscape::SnappedPoint multipleConstrainedSnaps(Inkscape::SnapCandidatePoint const &p, + std::vector const &constraints, + Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const; + void guideFreeSnap(Geom::Point &p, Geom::Point const &guide_normal, SPGuideDragType drag_type) const; void guideConstrainedSnap(Geom::Point &p, SPGuide const &guideline) const; -- cgit v1.2.3