X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fbezier.h;h=77429cf9033ba06cb199d7ebb0d4fdaef042caa9;hp=0fcf16734eae32fd9c536ce7cf40610ba8017760;hb=HEAD;hpb=f28146cf72fc68c8d3690814b1f89d47b8c4e7b9 diff --git a/src/bezier.h b/src/bezier.h index 0fcf167..77429cf 100644 --- a/src/bezier.h +++ b/src/bezier.h @@ -20,7 +20,7 @@ namespace IPDF extern std::vector SolveQuadratic(const BReal & a, const BReal & b, const BReal & c, const BReal & min = 0, const BReal & max = 1); - extern std::vector SolveCubic(const BReal & a, const BReal & b, const BReal & c, const BReal & d, const BReal & min = 0, const BReal & max = 1, const BReal & delta = 1e-5); + extern std::vector SolveCubic(const BReal & a, const BReal & b, const BReal & c, const BReal & d, const BReal & min = 0, const BReal & max = 1, const BReal & delta = 1e-9); /** A _cubic_ bezier. **/ struct Bezier @@ -151,7 +151,7 @@ namespace IPDF // (So can't just use the Copy constructor on the inverse of bounds) // BRect inverse = {-bounds.x/bounds.w, -bounds.y/bounds.h, BReal(1)/bounds.w, BReal(1)/bounds.h}; Bezier result; - if (bounds.w == 0) + if (bounds.w == BReal(0)) { result.x0 = 0; result.x1 = 0; @@ -166,7 +166,7 @@ namespace IPDF result.x3 = (x3 - bounds.x)/bounds.w; } - if (bounds.h == 0) + if (bounds.h == BReal(0)) { result.y0 = 0; result.y1 = 0; @@ -258,8 +258,8 @@ namespace IPDF // Find points of intersection with the rectangle. Debug("Clipping Bezier to BRect %s", r.Str().c_str()); - bool isVerticalLine = (x0 == x1 && x1 == x2 && x2 == x3); - bool isHorizontalLine = (y0 == y1 && y1 == y2 && y2 == y3); + bool isVerticalLine = false;//(x0 == x1 && x1 == x2 && x2 == x3); + bool isHorizontalLine = false;//(y0 == y1 && y1 == y2 && y2 == y3); // Find its roots. @@ -269,11 +269,13 @@ namespace IPDF { std::vector x_intersection = SolveXParam(r.x); intersection.insert(intersection.end(), x_intersection.begin(), x_intersection.end()); + Debug("Number of top intersections: %d", x_intersection.size()); // And for the other side. std::vector x_intersection_pt2 = SolveXParam(r.x + r.w); intersection.insert(intersection.end(), x_intersection_pt2.begin(), x_intersection_pt2.end()); + Debug("Number of bottom intersections: %d", x_intersection_pt2.size()); } // Find its roots. @@ -281,15 +283,18 @@ namespace IPDF { std::vector y_intersection = SolveYParam(r.y); intersection.insert(intersection.end(), y_intersection.begin(), y_intersection.end()); + Debug("Number of left intersections: %d", y_intersection.size()); std::vector y_intersection_pt2 = SolveYParam(r.y+r.h); intersection.insert(intersection.end(), y_intersection_pt2.begin(), y_intersection_pt2.end()); + Debug("Number of right intersections: %d", y_intersection_pt2.size()); } // Merge and sort. intersection.push_back(BReal(0)); intersection.push_back(BReal(1)); std::sort(intersection.begin(), intersection.end()); + Debug("Number of intersections: %d", intersection.size()); std::vector all_beziers; if (intersection.size() <= 2)