diff options
author | caryclark <caryclark@google.com> | 2016-09-06 05:59:47 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-06 05:59:47 -0700 |
commit | 8016b264ceec2b11d2acbeb77a9fbe66e48368b9 (patch) | |
tree | e61b611ed75e5f8a5686c0b84ffba2d7f4fa3d40 /src/pathops/SkOpSegment.cpp | |
parent | 48fde9c4127860ca5851b88ba123169b9889445c (diff) |
interpolation of coincidence must be local to a single span
Pathops makes up intersections that it doesn't detect directly,
but do exist. For instance, if a is coincident with b, and
b is coincident with c, then for where they overlap
a is coincident with c.
The intersections are made up in different ways. In a few
places, the t values that are detected are interpolated to
guess the t values that represent invented intersections.
The interpolated t is not necessarily linear, but a linear
guess is good enough if the invented t lies between known
t values.
Additionally, improve debugging.
This passes the extended release test suite and additionally
passes the first 17 levels in the tiger test suite;
previously, path ops passed 7 levels.
The tiger suite is composed of 37 levels in increasing
complexity, described by about 300K tests.
TBR=reed@google.com
BUG=skia:5131
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2300203002
Review-Url: https://codereview.chromium.org/2300203002
Diffstat (limited to 'src/pathops/SkOpSegment.cpp')
-rw-r--r-- | src/pathops/SkOpSegment.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/pathops/SkOpSegment.cpp b/src/pathops/SkOpSegment.cpp index 6a62175032..484ddca412 100644 --- a/src/pathops/SkOpSegment.cpp +++ b/src/pathops/SkOpSegment.cpp @@ -258,9 +258,9 @@ bool SkOpSegment::addExpanded(double newT, const SkOpSpanBase* test, bool* start return false; } newPtT->fPt = this->ptAtT(newT); - // const cast away to change linked list; pt/t values stays unchanged SkOpPtT* oppPrev = test->ptT()->oppPrev(newPtT); if (oppPrev) { + // const cast away to change linked list; pt/t values stays unchanged SkOpSpanBase* writableTest = const_cast<SkOpSpanBase*>(test); writableTest->mergeMatches(newPtT->span()); writableTest->ptT()->addOpp(newPtT, oppPrev); |