From a631350f9318ccf1aacaf594a4d5abd1ccf349e7 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 9 Dec 2013 21:03:16 -0500 Subject: [PATCH] implement Curve::covers() in a very primitive way (also note: fails for actual spline curves) --- libs/canvas/curve.cc | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/libs/canvas/curve.cc b/libs/canvas/curve.cc index df65cf491c..09fb5669a1 100644 --- a/libs/canvas/curve.cc +++ b/libs/canvas/curve.cc @@ -103,8 +103,6 @@ Curve::render (Rect const & area, Cairo::RefPtr context) const void Curve::render_path (Rect const & area, Cairo::RefPtr context) const { - std::cerr << whatami() << '/' << name << " render curve w/" << _points.size() << " points, " << first_control_points.size() << " first and " - << second_control_points.size() << " second\n"; PolyItem::render_curve (area, context, first_control_points, second_control_points); } @@ -213,7 +211,24 @@ Curve::solve (std::vector const & rhs) } bool -Curve::covers (Duple const & point) const +Curve::covers (Duple const & pc) const { + Duple point = canvas_to_item (pc); + + /* XXX Hellaciously expensive ... */ + + for (Points::const_iterator p = _points.begin(); p != _points.end(); ++p) { + + const Coord dx = point.x - (*p).x; + const Coord dy = point.y - (*p).y; + const Coord dx2 = dx * dx; + const Coord dy2 = dy * dy; + + if ((dx2 < 2.0 && dy2 < 2.0) || (dx2 + dy2 < 4.0)) { + std::cerr << whatami() << '/' << name << " COVERS " << point << '\n'; + return true; + } + } + return false; }