aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/pathops/SkOpSegment.cpp
diff options
context:
space:
mode:
authorGravatar caryclark <caryclark@google.com>2016-09-06 05:59:47 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-09-06 05:59:47 -0700
commit8016b264ceec2b11d2acbeb77a9fbe66e48368b9 (patch)
treee61b611ed75e5f8a5686c0b84ffba2d7f4fa3d40 /src/pathops/SkOpSegment.cpp
parent48fde9c4127860ca5851b88ba123169b9889445c (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.cpp2
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);