diff options
author | caryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-07-15 13:29:13 +0000 |
---|---|---|
committer | caryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-07-15 13:29:13 +0000 |
commit | fa2aeee27af27f2934ee52a9732148f66481fb03 (patch) | |
tree | 55bd975ad23945da95bdbe6e4a57aa5688baee28 /src/pathops/SkPathOpsLine.h | |
parent | c2050e3a3ecfb8738b36e2add15c526e8e0f21fe (diff) |
path ops near exact
Modify line intersections to first
- match exact ends
- compute intersections
- match near ends
where the exact ends are preferred, then near matches, then
computed matches. This pulls matches towards existing end points
when possible, and keeps intersection distances consistent with
different line/line line/quad and line/cubic computations.
BUG=
Review URL: https://codereview.chromium.org/19183003
git-svn-id: http://skia.googlecode.com/svn/trunk@10073 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/pathops/SkPathOpsLine.h')
-rw-r--r-- | src/pathops/SkPathOpsLine.h | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/pathops/SkPathOpsLine.h b/src/pathops/SkPathOpsLine.h index 34bb6587d3..c5ac7fdb09 100644 --- a/src/pathops/SkPathOpsLine.h +++ b/src/pathops/SkPathOpsLine.h @@ -12,21 +12,28 @@ struct SkDLine { SkDPoint fPts[2]; + const SkDPoint& operator[](int n) const { SkASSERT(n >= 0 && n < 2); return fPts[n]; } + SkDPoint& operator[](int n) { SkASSERT(n >= 0 && n < 2); return fPts[n]; } + void set(const SkPoint pts[2]) { fPts[0] = pts[0]; fPts[1] = pts[1]; } - const SkDPoint& operator[](int n) const { SkASSERT(n >= 0 && n < 2); return fPts[n]; } - SkDPoint& operator[](int n) { SkASSERT(n >= 0 && n < 2); return fPts[n]; } - - double isLeft(const SkDPoint& pt) const; - SkDLine subDivide(double t1, double t2) const; static SkDLine SubDivide(const SkPoint a[2], double t1, double t2) { SkDLine line; line.set(a); return line.subDivide(t1, t2); } + + double exactPoint(const SkDPoint& xy) const; + static double ExactPointH(const SkDPoint& xy, double left, double right, double y); + static double ExactPointV(const SkDPoint& xy, double top, double bottom, double x); + double isLeft(const SkDPoint& pt) const; + double nearPoint(const SkDPoint& xy) const; + static double NearPointH(const SkDPoint& xy, double left, double right, double y); + static double NearPointV(const SkDPoint& xy, double top, double bottom, double x); + SkDLine subDivide(double t1, double t2) const; SkDPoint xyAtT(double t) const; private: SkDVector tangent() const { return fPts[0] - fPts[1]; } |