Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Side by Side Diff: src/pathops/SkIntersections.h

Issue 19183003: path ops near exact (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: remove unused static function Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/pathops/SkDQuadLineIntersection.cpp ('k') | src/pathops/SkIntersections.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 #ifndef SkIntersections_DEFINE 7 #ifndef SkIntersections_DEFINE
8 #define SkIntersections_DEFINE 8 #define SkIntersections_DEFINE
9 9
10 #include "SkPathOpsCubic.h" 10 #include "SkPathOpsCubic.h"
(...skipping 27 matching lines...) Expand all
38 38
39 void set(const SkIntersections& i) { 39 void set(const SkIntersections& i) {
40 memcpy(fPt, i.fPt, sizeof(fPt)); 40 memcpy(fPt, i.fPt, sizeof(fPt));
41 memcpy(fT, i.fT, sizeof(fT)); 41 memcpy(fT, i.fT, sizeof(fT));
42 memcpy(fIsCoincident, i.fIsCoincident, sizeof(fIsCoincident)); 42 memcpy(fIsCoincident, i.fIsCoincident, sizeof(fIsCoincident));
43 fUsed = i.fUsed; 43 fUsed = i.fUsed;
44 fSwap = i.fSwap; 44 fSwap = i.fSwap;
45 SkDEBUGCODE(fDepth = i.fDepth); 45 SkDEBUGCODE(fDepth = i.fDepth);
46 } 46 }
47 47
48 void allowNear(bool nearAllowed) {
49 fAllowNear = nearAllowed;
50 }
51
48 int cubic(const SkPoint a[4]) { 52 int cubic(const SkPoint a[4]) {
49 SkDCubic cubic; 53 SkDCubic cubic;
50 cubic.set(a); 54 cubic.set(a);
51 return intersect(cubic); 55 return intersect(cubic);
52 } 56 }
53 57
54 int cubicCubic(const SkPoint a[4], const SkPoint b[4]) { 58 int cubicCubic(const SkPoint a[4], const SkPoint b[4]) {
55 SkDCubic aCubic; 59 SkDCubic aCubic;
56 aCubic.set(a); 60 aCubic.set(a);
57 SkDCubic bCubic; 61 SkDCubic bCubic;
(...skipping 23 matching lines...) Expand all
81 } 85 }
82 86
83 int cubicQuad(const SkPoint a[4], const SkPoint b[3]) { 87 int cubicQuad(const SkPoint a[4], const SkPoint b[3]) {
84 SkDCubic cubic; 88 SkDCubic cubic;
85 cubic.set(a); 89 cubic.set(a);
86 SkDQuad quad; 90 SkDQuad quad;
87 quad.set(b); 91 quad.set(b);
88 return intersect(cubic, quad); 92 return intersect(cubic, quad);
89 } 93 }
90 94
95 bool hasT(double t) const {
96 SkASSERT(t == 0 || t == 1);
97 return fUsed > 0 && (t == 0 ? fT[0][0] == 0 : fT[0][fUsed - 1] == 1);
98 }
99
91 int insertSwap(double one, double two, const SkDPoint& pt) { 100 int insertSwap(double one, double two, const SkDPoint& pt) {
92 if (fSwap) { 101 if (fSwap) {
93 return insert(two, one, pt); 102 return insert(two, one, pt);
94 } else { 103 } else {
95 return insert(one, two, pt); 104 return insert(one, two, pt);
96 } 105 }
97 } 106 }
98 107
99 int insertSwap(double one, double two, double x, double y) {
100 if (fSwap) {
101 return insert(two, one, x, y);
102 } else {
103 return insert(one, two, x, y);
104 }
105 }
106
107 bool isCoincident(int index) { 108 bool isCoincident(int index) {
108 return (fIsCoincident[0] & 1 << index) != 0; 109 return (fIsCoincident[0] & 1 << index) != 0;
109 } 110 }
110 111
111 int lineHorizontal(const SkPoint a[2], SkScalar left, SkScalar right, SkScal ar y, 112 int lineHorizontal(const SkPoint a[2], SkScalar left, SkScalar right, SkScal ar y,
112 bool flipped) { 113 bool flipped) {
113 SkDLine line; 114 SkDLine line;
114 line.set(a); 115 line.set(a);
115 return horizontal(line, left, right, y, flipped); 116 return horizontal(line, left, right, y, flipped);
116 } 117 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 SkDQuad bQuad; 160 SkDQuad bQuad;
160 bQuad.set(b); 161 bQuad.set(b);
161 return intersect(aQuad, bQuad); 162 return intersect(aQuad, bQuad);
162 } 163 }
163 164
164 int quadRay(const SkPoint pts[3], const SkDLine& line); 165 int quadRay(const SkPoint pts[3], const SkDLine& line);
165 void removeOne(int index); 166 void removeOne(int index);
166 167
167 // leaves flip, swap alone 168 // leaves flip, swap alone
168 void reset() { 169 void reset() {
170 fAllowNear = true;
169 fUsed = 0; 171 fUsed = 0;
170 } 172 }
171 173
172 void swap() { 174 void swap() {
173 fSwap ^= true; 175 fSwap ^= true;
174 } 176 }
175 177
176 void swapPts(); 178 void swapPts();
177 179
178 bool swapped() const { 180 bool swapped() const {
(...skipping 18 matching lines...) Expand all
197 void flip(); 199 void flip();
198 int horizontal(const SkDLine&, double y); 200 int horizontal(const SkDLine&, double y);
199 int horizontal(const SkDLine&, double left, double right, double y, bool fli pped); 201 int horizontal(const SkDLine&, double left, double right, double y, bool fli pped);
200 int horizontal(const SkDQuad&, double left, double right, double y, bool fli pped); 202 int horizontal(const SkDQuad&, double left, double right, double y, bool fli pped);
201 int horizontal(const SkDQuad&, double left, double right, double y, double t Range[2]); 203 int horizontal(const SkDQuad&, double left, double right, double y, double t Range[2]);
202 int horizontal(const SkDCubic&, double y, double tRange[3]); 204 int horizontal(const SkDCubic&, double y, double tRange[3]);
203 int horizontal(const SkDCubic&, double left, double right, double y, bool fl ipped); 205 int horizontal(const SkDCubic&, double left, double right, double y, bool fl ipped);
204 int horizontal(const SkDCubic&, double left, double right, double y, double tRange[3]); 206 int horizontal(const SkDCubic&, double left, double right, double y, double tRange[3]);
205 // FIXME : does not respect swap 207 // FIXME : does not respect swap
206 int insert(double one, double two, const SkDPoint& pt); 208 int insert(double one, double two, const SkDPoint& pt);
207 int insert(double one, double two, double x, double y);
208 // start if index == 0 : end if index == 1 209 // start if index == 0 : end if index == 1
209 void insertCoincident(double one, double two, const SkDPoint& pt); 210 void insertCoincident(double one, double two, const SkDPoint& pt);
210 void insertCoincidentPair(double s1, double e1, double s2, double e2, 211 void insertCoincidentPair(double s1, double e1, double s2, double e2,
211 const SkDPoint& startPt, const SkDPoint& endPt); 212 const SkDPoint& startPt, const SkDPoint& endPt);
212 int intersect(const SkDLine&, const SkDLine&); 213 int intersect(const SkDLine&, const SkDLine&);
213 int intersect(const SkDQuad&, const SkDLine&); 214 int intersect(const SkDQuad&, const SkDLine&);
214 int intersect(const SkDQuad&, const SkDQuad&); 215 int intersect(const SkDQuad&, const SkDQuad&);
215 int intersect(const SkDCubic&); // return true if cubic self-intersects 216 int intersect(const SkDCubic&); // return true if cubic self-intersects
216 int intersect(const SkDCubic&, const SkDLine&); 217 int intersect(const SkDCubic&, const SkDLine&);
217 int intersect(const SkDCubic&, const SkDQuad&); 218 int intersect(const SkDCubic&, const SkDQuad&);
(...skipping 23 matching lines...) Expand all
241 242
242 private: 243 private:
243 int computePoints(const SkDLine& line, int used); 244 int computePoints(const SkDLine& line, int used);
244 // used by addCoincident to remove ordinary intersections in range 245 // used by addCoincident to remove ordinary intersections in range
245 // void remove(double one, double two, const SkDPoint& startPt, const SkDPoin t& endPt); 246 // void remove(double one, double two, const SkDPoint& startPt, const SkDPoin t& endPt);
246 247
247 SkDPoint fPt[9]; 248 SkDPoint fPt[9];
248 double fT[2][9]; 249 double fT[2][9];
249 uint16_t fIsCoincident[2]; // bit arrays, one bit set for each coincident T 250 uint16_t fIsCoincident[2]; // bit arrays, one bit set for each coincident T
250 unsigned char fUsed; 251 unsigned char fUsed;
252 bool fAllowNear;
251 bool fSwap; 253 bool fSwap;
252 #ifdef SK_DEBUG 254 #ifdef SK_DEBUG
253 int fDepth; 255 int fDepth;
254 #endif 256 #endif
255 }; 257 };
256 258
257 extern int (SkIntersections::*CurveRay[])(const SkPoint[], const SkDLine& ); 259 extern int (SkIntersections::*CurveRay[])(const SkPoint[], const SkDLine& );
258 extern int (SkIntersections::*CurveVertical[])(const SkPoint[], SkScalar top, Sk Scalar bottom, 260 extern int (SkIntersections::*CurveVertical[])(const SkPoint[], SkScalar top, Sk Scalar bottom,
259 SkScalar x, bool flipped); 261 SkScalar x, bool flipped);
260 262
261 #endif 263 #endif
OLDNEW
« no previous file with comments | « src/pathops/SkDQuadLineIntersection.cpp ('k') | src/pathops/SkIntersections.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698