summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2015-03-29 20:21:29 +0000
committertavmjong-free <tavmjong@free.fr>2015-03-29 20:21:29 +0000
commit953a5c690f328fc989ffc7692312937454ae3677 (patch)
treeaea0bba1d6ed380d18a945bab5a8f4984e6faaea /src
parentclean up previous commit (diff)
downloadinkscape-953a5c690f328fc989ffc7692312937454ae3677.tar.gz
inkscape-953a5c690f328fc989ffc7692312937454ae3677.zip
make_angle_bisector_line(): Return sensible line if three input points are colinear.
Add output operator, useful for debugging. (bzr r14035)
Diffstat (limited to 'src')
-rw-r--r--src/2geom/line.h17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/2geom/line.h b/src/2geom/line.h
index ade67f818..cbd68fa08 100644
--- a/src/2geom/line.h
+++ b/src/2geom/line.h
@@ -35,6 +35,7 @@
#define LIB2GEOM_SEEN_LINE_H
#include <cmath>
+#include <iostream>
#include <boost/optional.hpp>
#include <2geom/bezier-curve.h> // for LineSegment
#include <2geom/rect.h>
@@ -258,9 +259,19 @@ public:
dist = -dot(n, m_origin);
return n;
}
- /// @}
+
+ friend inline std::ostream &operator<< (std::ostream &out_file, const Geom::Line &in_line);
+/// @}
}; // end class Line
+/** @brief Output operator for lines.
+ * Prints out representation (point + versor)
+ */
+inline std::ostream &operator<< (std::ostream &out_file, const Geom::Line &in_line) {
+ out_file << "X: " << in_line.m_origin[X] << " Y: " << in_line.m_origin[Y]
+ << " dX: " << in_line.m_versor[X] << " dY: " << in_line.m_versor[Y];
+ return out_file;
+}
inline
double distance(Point const& _point, Line const& _line)
@@ -365,6 +376,10 @@ inline
Line make_angle_bisector_line(Point const& A, Point const& O, Point const& B)
{
Point M = middle_point(A,B);
+ if (are_near(O,M)) {
+ Line l(A,B);
+ M += (make_orthogonal_line(O,l)).versor();
+ }
return Line(O,M);
}