#ifndef SEEN_OBJECT_SNAPPER_H #define SEEN_OBJECT_SNAPPER_H /** * \file object-snapper.h * \brief Snapping things to objects. * * Authors: * Carl Hetherington * Diederik van Lierop * * Copyright (C) 2005 - 2008 Authors * * Released under GNU GPL, read the file 'COPYING' for more information */ #include "snapper.h" #include "sp-path.h" #include "splivarot.h" #include "snap-candidate.h" struct SPNamedView; struct SPItem; struct SPObject; namespace Inkscape { class ObjectSnapper : public Snapper { public: ObjectSnapper(SnapManager *sm, Geom::Coord const d); ~ObjectSnapper(); void guideFreeSnap(SnappedConstraints &sc, Geom::Point const &p, Geom::Point const &guide_normal) const; void guideConstrainedSnap(SnappedConstraints &sc, Geom::Point const &p, Geom::Point const &guide_normal, SnapConstraint const &c) const; bool ThisSnapperMightSnap() const; Geom::Coord getSnapperTolerance() const; //returns the tolerance of the snapper in screen pixels (i.e. independent of zoom) bool getSnapperAlwaysSnap() const; //if true, then the snapper will always snap, regardless of its tolerance void freeSnap(SnappedConstraints &sc, Inkscape::SnapCandidatePoint const &p, Geom::OptRect const &bbox_to_snap, std::vector const *it, std::vector *unselected_nodes) const; void constrainedSnap(SnappedConstraints &sc, Inkscape::SnapCandidatePoint const &p, Geom::OptRect const &bbox_to_snap, SnapConstraint const &c, std::vector const *it, std::vector *unselected_nodes) const; private: //store some lists of candidates, points and paths, so we don't have to rebuild them for each point we want to snap std::vector *_candidates; std::vector *_points_to_snap_to; std::vector *_paths_to_snap_to; void _findCandidates(SPObject* parent, std::vector const *it, bool const &first_point, Geom::Rect const &bbox_to_snap, bool const _clip_or_mask, Geom::Affine const additional_affine) const; void _snapNodes(SnappedConstraints &sc, Inkscape::SnapCandidatePoint const &p, // in desktop coordinates std::vector *unselected_nodes, SnapConstraint const &c = SnapConstraint(), Geom::Point const &p_proj_on_constraint = Geom::Point()) const; void _snapTranslatingGuide(SnappedConstraints &sc, Geom::Point const &p, Geom::Point const &guide_normal) const; void _collectNodes(Inkscape::SnapSourceType const &t, bool const &first_point) const; void _snapPaths(SnappedConstraints &sc, Inkscape::SnapCandidatePoint const &p, // in desktop coordinates std::vector *unselected_nodes, // in desktop coordinates SPPath const *selected_path) const; void _snapPathsConstrained(SnappedConstraints &sc, Inkscape::SnapCandidatePoint const &p, // in desktop coordinates SnapConstraint const &c, Geom::Point const &p_proj_on_constraint) const; bool isUnselectedNode(Geom::Point const &point, std::vector const *unselected_nodes) const; void _collectPaths(Geom::Point p, Inkscape::SnapSourceType const source_type, bool const &first_point) const; void _clear_paths() const; Geom::PathVector* _getBorderPathv() const; Geom::PathVector* _getPathvFromRect(Geom::Rect const rect) const; void _getBorderNodes(std::vector *points) const; }; // end of ObjectSnapper class void getBBoxPoints(Geom::OptRect const bbox, std::vector *points, bool const isTarget, bool const includeCorners, bool const includeLineMidpoints, bool const includeObjectMidpoints); } // end of namespace Inkscape #endif