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

Unified Diff: src/pathops/SkOpContour.h

Issue 21359002: path ops work in progress (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: remove space Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pathops/SkOpAngle.cpp ('k') | src/pathops/SkOpContour.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pathops/SkOpContour.h
diff --git a/src/pathops/SkOpContour.h b/src/pathops/SkOpContour.h
index 456e6c0068bc2c7e1ffec342fa680c5b3337c6ef..a5635fe3d2b59b083dcb5801df931fa71de103ac 100644
--- a/src/pathops/SkOpContour.h
+++ b/src/pathops/SkOpContour.h
@@ -15,7 +15,7 @@ class SkOpContour;
class SkPathWriter;
struct SkCoincidence {
- SkOpContour* fContours[2];
+ SkOpContour* fOther;
int fSegments[2];
double fTs[2][2];
SkPoint fPts[2];
@@ -25,8 +25,8 @@ class SkOpContour {
public:
SkOpContour() {
reset();
-#if DEBUG_DUMP
- fID = ++gContourID;
+#ifdef SK_DEBUG
+ fID = ++SkPathOpsDebug::gContourID;
#endif
}
@@ -63,15 +63,19 @@ public:
fSegments[segIndex].addOtherT(tIndex, otherT, otherIndex);
}
+ void addPartialCoincident(int index, SkOpContour* other, int otherIndex,
+ const SkIntersections& ts, int ptIndex, bool swap);
+
int addQuad(const SkPoint pts[3]) {
fSegments.push_back().addQuad(pts, fOperand, fXor);
fContainsCurves = true;
return fSegments.count();
}
- int addT(int segIndex, SkOpContour* other, int otherIndex, const SkPoint& pt, double newT) {
+ int addT(int segIndex, SkOpContour* other, int otherIndex, const SkPoint& pt, double newT,
+ bool isNear) {
setContainsIntercepts();
- return fSegments[segIndex].addT(&other->fSegments[otherIndex], pt, newT);
+ return fSegments[segIndex].addT(&other->fSegments[otherIndex], pt, newT, isNear);
}
int addSelfT(int segIndex, SkOpContour* other, int otherIndex, const SkPoint& pt, double newT) {
@@ -79,16 +83,12 @@ public:
return fSegments[segIndex].addSelfT(&other->fSegments[otherIndex], pt, newT);
}
- int addUnsortableT(int segIndex, SkOpContour* other, int otherIndex, bool start,
- const SkPoint& pt, double newT) {
- return fSegments[segIndex].addUnsortableT(&other->fSegments[otherIndex], start, pt, newT);
- }
-
const SkPathOpsBounds& bounds() const {
return fBounds;
}
void calcCoincidentWinding();
+ void calcPartialCoincidentWinding();
void checkEnds() {
if (!fContainsCurves) {
@@ -100,7 +100,18 @@ public:
if (segment->verb() == SkPath::kLine_Verb) {
continue;
}
- fSegments[sIndex].checkEnds();
+ segment->checkEnds();
+ }
+ }
+
+ // if same point has different T values, choose a common T
+ void checkTiny() {
+ int segmentCount = fSegments.count();
+ if (segmentCount <= 2) {
+ return;
+ }
+ for (int sIndex = 0; sIndex < segmentCount; ++sIndex) {
+ fSegments[sIndex].checkTiny();
}
}
@@ -131,13 +142,6 @@ public:
return segment.pts()[SkPathOpsVerbToPoints(segment.verb())];
}
- void findTooCloseToCall() {
- int segmentCount = fSegments.count();
- for (int sIndex = 0; sIndex < segmentCount; ++sIndex) {
- fSegments[sIndex].findTooCloseToCall();
- }
- }
-
void fixOtherTIndex() {
int segmentCount = fSegments.count();
for (int sIndex = 0; sIndex < segmentCount; ++sIndex) {
@@ -232,12 +236,14 @@ public:
#endif
private:
+ void calcCommonCoincidentWinding(const SkCoincidence& coincidence);
void setBounds();
SkTArray<SkOpSegment> fSegments;
SkTArray<SkOpSegment*, true> fSortedSegments;
int fFirstSorted;
SkTArray<SkCoincidence, true> fCoincidences;
+ SkTArray<SkCoincidence, true> fPartialCoincidences;
SkTArray<const SkOpContour*, true> fCrosses;
SkPathOpsBounds fBounds;
bool fContainsIntercepts; // FIXME: is this used by anybody?
@@ -247,7 +253,7 @@ private:
bool fOperand; // true for the second argument to a binary operator
bool fXor;
bool fOppXor;
-#if DEBUG_DUMP
+#ifdef SK_DEBUG
int fID;
#endif
};
« no previous file with comments | « src/pathops/SkOpAngle.cpp ('k') | src/pathops/SkOpContour.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698