aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar reed <reed@chromium.org>2015-03-18 19:32:47 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-03-18 19:32:47 -0700
commit562d0e1cd2286945cb73fca0233560071b052129 (patch)
tree183162eea5b6f4286472c5a391c2c28eecc91308
parent7c44ca926bf42b3b2e56131f250c0fd58f87ac71 (diff)
remove unused SkXRay functions
BUG=skia: TBR= Review URL: https://codereview.chromium.org/1016263002
-rw-r--r--src/core/SkGeometry.cpp179
-rw-r--r--src/core/SkGeometry.h45
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,