1 // SPDX-License-Identifier: GPL-2.0-or-later
2 #ifndef SEEN_SNAPPEDLINE_H
3 #define SEEN_SNAPPEDLINE_H
6 * \file src/snapped-line.h
7 * \brief SnappedLine class.
10 * Diederik van Lierop <mail@diedenrezi.nl>
12 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
17 #include "snapped-point.h"
22 /// Class describing the result of an attempt to snap to a line segment.
23 class SnappedLineSegment
: public SnappedPoint
27 SnappedLineSegment(Geom::Point
const &snapped_point
, Geom::Coord
const &snapped_distance
, SnapSourceType
const &source
, long source_num
, SnapTargetType
const &target
, Geom::Coord
const &snapped_tolerance
,bool const &always_snap
, Geom::Point
const &start_point_of_line
, Geom::Point
const &end_point_of_line
);
28 ~SnappedLineSegment();
29 Inkscape::SnappedPoint
intersect(SnappedLineSegment
const &line
) const; //intersect with another SnappedLineSegment
30 Geom::LineSegment
getLineSegment() const {return Geom::LineSegment(_start_point_of_line
, _end_point_of_line
);}
33 Geom::Point _start_point_of_line
;
34 Geom::Point _end_point_of_line
;
38 /// Class describing the result of an attempt to snap to a line.
39 class SnappedLine
: public SnappedPoint
43 SnappedLine(Geom::Point
const &snapped_point
, Geom::Coord
const &snapped_distance
, SnapSourceType
const &source
, long source_num
, SnapTargetType
const &target
, Geom::Coord
const &snapped_tolerance
, bool const &always_snap
, Geom::Point
const &normal_to_line
, Geom::Point
const &point_on_line
);
45 Inkscape::SnappedPoint
intersect(SnappedLine
const &line
) const; //intersect with another SnappedLine
46 // This line is described by this equation:
47 // a*x + b*y = c <-> nx*px + ny+py = c <-> n.p = c
48 Geom::Point
getNormal() const {return _normal_to_line
;} // n = (nx, ny)
49 Geom::Point
getPointOnLine() const {return _point_on_line
;} // p = (px, py)
50 Geom::Coord
getConstTerm() const {return dot(_normal_to_line
, _point_on_line
);} // c = n.p = nx*px + ny*py;
51 Geom::Line
getLine() const {return Geom::Line(_point_on_line
, _point_on_line
+ Geom::rot90(_normal_to_line
));}
54 Geom::Point _normal_to_line
;
55 Geom::Point _point_on_line
;
60 bool getClosestSLS(std::list
<Inkscape::SnappedLineSegment
> const &list
, Inkscape::SnappedLineSegment
&result
);
61 bool getClosestIntersectionSLS(std::list
<Inkscape::SnappedLineSegment
> const &list
, Inkscape::SnappedPoint
&result
);
62 bool getClosestSL(std::list
<Inkscape::SnappedLine
> const &list
, Inkscape::SnappedLine
&result
);
63 bool getClosestIntersectionSL(std::list
<Inkscape::SnappedLine
> const &list
, Inkscape::SnappedPoint
&result
);
64 bool getClosestIntersectionSL(std::list
<Inkscape::SnappedLine
> const &list1
, std::list
<Inkscape::SnappedLine
> const &list2
, Inkscape::SnappedPoint
&result
);
67 #endif /* !SEEN_SNAPPEDLINE_H */
72 c-file-style:"stroustrup"
73 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
78 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :