diff options
author | reed <reed@chromium.org> | 2015-03-18 19:32:47 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-18 19:32:47 -0700 |
commit | 562d0e1cd2286945cb73fca0233560071b052129 (patch) | |
tree | 183162eea5b6f4286472c5a391c2c28eecc91308 /src | |
parent | 7c44ca926bf42b3b2e56131f250c0fd58f87ac71 (diff) |
remove unused SkXRay functions
BUG=skia:
TBR=
Review URL: https://codereview.chromium.org/1016263002
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkGeometry.cpp | 179 | ||||
-rw-r--r-- | src/core/SkGeometry.h | 45 |
2 files changed, 0 insertions, 224 deletions
diff --git a/src/core/SkGeometry.cpp b/src/core/SkGeometry.cpp index 5331bb7e5a..b4d12dbfa4 100644 --- a/src/core/SkGeometry.cpp +++ b/src/core/SkGeometry.cpp @@ -8,61 +8,6 @@ #include "SkGeometry.h" #include "SkMatrix.h" -bool SkXRayCrossesLine(const SkXRay& pt, - const SkPoint pts[2], - bool* ambiguous) { - if (ambiguous) { - *ambiguous = false; - } - // Determine quick discards. - // Consider query line going exactly through point 0 to not - // intersect, for symmetry with SkXRayCrossesMonotonicCubic. - if (pt.fY == pts[0].fY) { - if (ambiguous) { - *ambiguous = true; - } - return false; - } - if (pt.fY < pts[0].fY && pt.fY < pts[1].fY) - return false; - if (pt.fY > pts[0].fY && pt.fY > pts[1].fY) - return false; - if (pt.fX > pts[0].fX && pt.fX > pts[1].fX) - return false; - // Determine degenerate cases - if (SkScalarNearlyZero(pts[0].fY - pts[1].fY)) - return false; - if (SkScalarNearlyZero(pts[0].fX - pts[1].fX)) { - // We've already determined the query point lies within the - // vertical range of the line segment. - if (pt.fX <= pts[0].fX) { - if (ambiguous) { - *ambiguous = (pt.fY == pts[1].fY); - } - return true; - } - return false; - } - // Ambiguity check - if (pt.fY == pts[1].fY) { - if (pt.fX <= pts[1].fX) { - if (ambiguous) { - *ambiguous = true; - } - return true; - } - return false; - } - // Full line segment evaluation - SkScalar delta_y = pts[1].fY - pts[0].fY; - SkScalar delta_x = pts[1].fX - pts[0].fX; - SkScalar slope = SkScalarDiv(delta_y, delta_x); - SkScalar b = pts[0].fY - SkScalarMul(slope, pts[0].fX); - // Solve for x coordinate at y = pt.fY - SkScalar x = SkScalarDiv(pt.fY - b, slope); - return pt.fX <= x; -} - /** If defined, this makes eval_quad and eval_cubic do more setup (sometimes involving integer multiplies by 2 or 3, but fewer calls to SkScalarMul. May also introduce overflow of fixed when we compute our setup. @@ -949,130 +894,6 @@ int SkChopCubicAtMaxCurvature(const SkPoint src[4], SkPoint dst[13], return count + 1; } -bool SkXRayCrossesMonotonicCubic(const SkXRay& pt, const SkPoint cubic[4], - bool* ambiguous) { - if (ambiguous) { - *ambiguous = false; - } - - // Find the minimum and maximum y of the extrema, which are the - // first and last points since this cubic is monotonic - SkScalar min_y = SkMinScalar(cubic[0].fY, cubic[3].fY); - SkScalar max_y = SkMaxScalar(cubic[0].fY, cubic[3].fY); - - if (pt.fY == cubic[0].fY - || pt.fY < min_y - || pt.fY > max_y) { - // The query line definitely does not cross the curve - if (ambiguous) { - *ambiguous = (pt.fY == cubic[0].fY); - } - return false; - } - - bool pt_at_extremum = (pt.fY == cubic[3].fY); - - SkScalar min_x = - SkMinScalar( - SkMinScalar( - SkMinScalar(cubic[0].fX, cubic[1].fX), - cubic[2].fX), - cubic[3].fX); - if (pt.fX < min_x) { - // The query line definitely crosses the curve - if (ambiguous) { - *ambiguous = pt_at_extremum; - } - return true; - } - - SkScalar max_x = - SkMaxScalar( - SkMaxScalar( - SkMaxScalar(cubic[0].fX, cubic[1].fX), - cubic[2].fX), - cubic[3].fX); - if (pt.fX > max_x) { - // The query line definitely does not cross the curve - return false; - } - - // Do a binary search to find the parameter value which makes y as - // close as possible to the query point. See whether the query - // line's origin is to the left of the associated x coordinate. - - // kMaxIter is chosen as the number of mantissa bits for a float, - // since there's no way we are going to get more precision by - // iterating more times than that. - const int kMaxIter = 23; - SkPoint eval; - int iter = 0; - SkScalar upper_t; - SkScalar lower_t; - // Need to invert direction of t parameter if cubic goes up - // instead of down - if (cubic[3].fY > cubic[0].fY) { - upper_t = SK_Scalar1; - lower_t = 0; - } else { - upper_t = 0; - lower_t = SK_Scalar1; - } - do { - SkScalar t = SkScalarAve(upper_t, lower_t); - SkEvalCubicAt(cubic, t, &eval, NULL, NULL); - if (pt.fY > eval.fY) { - lower_t = t; - } else { - upper_t = t; - } - } while (++iter < kMaxIter - && !SkScalarNearlyZero(eval.fY - pt.fY)); - if (pt.fX <= eval.fX) { - if (ambiguous) { - *ambiguous = pt_at_extremum; - } - return true; - } - return false; -} - -int SkNumXRayCrossingsForCubic(const SkXRay& pt, - const SkPoint cubic[4], - bool* ambiguous) { - int num_crossings = 0; - SkPoint monotonic_cubics[10]; - int num_monotonic_cubics = SkChopCubicAtYExtrema(cubic, monotonic_cubics); - if (ambiguous) { - *ambiguous = false; - } - bool locally_ambiguous; - if (SkXRayCrossesMonotonicCubic(pt, - &monotonic_cubics[0], - &locally_ambiguous)) - ++num_crossings; - if (ambiguous) { - *ambiguous |= locally_ambiguous; - } - if (num_monotonic_cubics > 0) - if (SkXRayCrossesMonotonicCubic(pt, - &monotonic_cubics[3], - &locally_ambiguous)) - ++num_crossings; - if (ambiguous) { - *ambiguous |= locally_ambiguous; - } - if (num_monotonic_cubics > 1) - if (SkXRayCrossesMonotonicCubic(pt, - &monotonic_cubics[6], - &locally_ambiguous)) - ++num_crossings; - if (ambiguous) { - *ambiguous |= locally_ambiguous; - } - return num_crossings; -} - /////////////////////////////////////////////////////////////////////////////// /* Find t value for quadratic [a, b, c] = d. diff --git a/src/core/SkGeometry.h b/src/core/SkGeometry.h index 0b236857a5..4da74f2475 100644 --- a/src/core/SkGeometry.h +++ b/src/core/SkGeometry.h @@ -10,21 +10,6 @@ #include "SkMatrix.h" -/** An XRay is a half-line that runs from the specific point/origin to - +infinity in the X direction. e.g. XRay(3,5) is the half-line - (3,5)....(infinity, 5) - */ -typedef SkPoint SkXRay; - -/** Given a line segment from pts[0] to pts[1], and an xray, return true if - they intersect. Optional outgoing "ambiguous" argument indicates - whether the answer is ambiguous because the query occurred exactly at - one of the endpoints' y coordinates, indicating that another query y - coordinate is preferred for robustness. -*/ -bool SkXRayCrossesLine(const SkXRay& pt, const SkPoint pts[2], - bool* ambiguous = NULL); - /** Given a quadratic equation Ax^2 + Bx + C = 0, return 0, 1, 2 roots for the equation. */ @@ -159,36 +144,6 @@ int SkFindCubicMaxCurvature(const SkPoint src[4], SkScalar tValues[3]); int SkChopCubicAtMaxCurvature(const SkPoint src[4], SkPoint dst[13], SkScalar tValues[3] = NULL); -/** Given a monotonic cubic bezier, determine whether an xray intersects the - cubic. - By definition the cubic is open at the starting point; in other - words, if pt.fY is equivalent to cubic[0].fY, and pt.fX is to the - left of the curve, the line is not considered to cross the curve, - but if it is equal to cubic[3].fY then it is considered to - cross. - Optional outgoing "ambiguous" argument indicates whether the answer is - ambiguous because the query occurred exactly at one of the endpoints' y - coordinates, indicating that another query y coordinate is preferred - for robustness. - */ -bool SkXRayCrossesMonotonicCubic(const SkXRay& pt, const SkPoint cubic[4], - bool* ambiguous = NULL); - -/** Given an arbitrary cubic bezier, return the number of times an xray crosses - the cubic. Valid return values are [0..3] - By definition the cubic is open at the starting point; in other - words, if pt.fY is equivalent to cubic[0].fY, and pt.fX is to the - left of the curve, the line is not considered to cross the curve, - but if it is equal to cubic[3].fY then it is considered to - cross. - Optional outgoing "ambiguous" argument indicates whether the answer is - ambiguous because the query occurred exactly at one of the endpoints' y - coordinates or at a tangent point, indicating that another query y - coordinate is preferred for robustness. - */ -int SkNumXRayCrossingsForCubic(const SkXRay& pt, const SkPoint cubic[4], - bool* ambiguous = NULL); - enum SkCubicType { kSerpentine_SkCubicType, kCusp_SkCubicType, |