aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar Cary Clark <caryclark@skia.org>2018-07-10 10:57:54 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-10 15:25:35 +0000
commit1d314433ffd5a5149438dd82d10c04736325004d (patch)
tree618f7311c51690a0a624be89f8e95bae508691e4 /tools
parent3be2e10ce534a9bf8eb008d3704be26b2ba04437 (diff)
fix line intersect divide by zero
Test filinmangust14 exposes two problems: - finding top of contour can expose divide by zero - joining partial contour results can add diagonal The latter makes the test return the wrong result, and has not been seen in other tests. The fix is to join disconnected contours by only following the contours provided as input. Working on that. The former bug is more straight-forward; just don't try to compute axis-aligned intersection if the denominator is zero. All existing tests prior to the new one work with this change. R=caryclark@google.com Bug: skia:8125 Change-Id: Ic878d090066708d9baca8475f27d4d5aba2294cc Reviewed-on: https://skia-review.googlesource.com/140121 Reviewed-by: Cary Clark <caryclark@skia.org> Commit-Queue: Cary Clark <caryclark@skia.org> Auto-Submit: Cary Clark <caryclark@skia.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/pathops_visualizer.htm349
1 files changed, 349 insertions, 0 deletions
diff --git a/tools/pathops_visualizer.htm b/tools/pathops_visualizer.htm
index 246a29b162..4c8d52f301 100644
--- a/tools/pathops_visualizer.htm
+++ b/tools/pathops_visualizer.htm
@@ -185,11 +185,360 @@ SkOpSegment::markDone id=7 (580.238281,594.114014 278.657715,594.114014) t=0 [13
SkOpSegment::markDone id=6 (580.238281,155.747314 580.238281,594.114014) t=0 [11] (580.238281,155.747314) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
</div>
+<div id="filinmangust14">
+seg=1 {{{559.002686f, 551}, {559.002686f, 570}}}
+seg=2 {{{559.002686f, 570}, {558.997681f, 570}}}
+seg=3 {{{558.997681f, 570}, {558.997681f, 551}}}
+seg=4 {{{558.997681f, 551}, {559.002686f, 551}}}
+op union
+<empty>
+seg=5 {{{364, 759.997498f}, {3403.40015f, 759.997498f}}}
+seg=6 {{{3403.40015f, 759.997498f}, {3403.40015f, 760.002502f}}}
+seg=7 {{{3403.40015f, 760.002502f}, {364, 760.002502f}}}
+seg=8 {{{364, 760.002502f}, {364, 759.997498f}}}
+seg=9 {{{3403.39771f, 6099}, {3403.39771f, 760}}}
+seg=10 {{{3403.39771f, 760}, {3403.40259f, 760}}}
+seg=11 {{{3403.40259f, 760}, {3403.39771f, 6099}}}
+seg=12 {{{1274, 379.997498f}, {3403.40015f, 379.997498f}}}
+seg=13 {{{3403.40015f, 379.997498f}, {3403.40015f, 380.002502f}}}
+seg=14 {{{3403.40015f, 380.002502f}, {1274, 380.002502f}}}
+seg=15 {{{1274, 380.002502f}, {1274, 379.997498f}}}
+seg=16 {{{3403.39771f, 760}, {3403.39771f, 380}}}
+seg=17 {{{3403.39771f, 380}, {3403.40259f, 380}}}
+seg=18 {{{3403.40259f, 380}, {3403.40259f, 760}}}
+seg=19 {{{3403.40259f, 760}, {3403.39771f, 760}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.40015,379.997498}, {3403.40015,380.002502}}} {{3403.40015,379.997498}} wnTs[0]=1 {{{1274,379.997498}, {3403.40015,379.997498}}}
+debugShowLineIntersection wtTs[0]=1 {{{1274,380.002502}, {1274,379.997498}}} {{1274,379.997498}} wnTs[0]=0 {{{1274,379.997498}, {3403.40015,379.997498}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.40015,380.002502}, {1274,380.002502}}} {{3403.40015,380.002502}} wnTs[0]=1 {{{3403.40015,379.997498}, {3403.40015,380.002502}}}
+debugShowLineIntersection wtTs[0]=0 {{{1274,380.002502}, {1274,379.997498}}} {{1274,380.002502}} wnTs[0]=1 {{{3403.40015,380.002502}, {1274,380.002502}}}
+debugShowLineIntersection no intersect {{{3403.39771,760}, {3403.39771,380}}} {{{3403.40015,379.997498}, {3403.40015,380.002502}}}
+debugShowLineIntersection wtTs[0]=0.5 {{{3403.39771,380}, {3403.40259,380}}} {{3403.40015,380}} wnTs[0]=0.5 {{{3403.40015,379.997498}, {3403.40015,380.002502}}}
+debugShowLineIntersection no intersect {{{3403.40259,380}, {3403.40259,760}}} {{{3403.40015,379.997498}, {3403.40015,380.002502}}}
+debugShowLineIntersection wtTs[0]=0.999993415 {{{3403.39771,760}, {3403.39771,380}}} {{3403.39771,380.002502}} wnTs[0]=1.14652e-06 {{{3403.40015,380.002502}, {1274,380.002502}}}
+debugShowLineIntersection no intersect {{{3403.40259,380}, {3403.40259,760}}} {{{3403.40015,380.002502}, {1274,380.002502}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.39771,380}, {3403.40259,380}}} {{3403.39771,380}} wnTs[0]=1 {{{3403.39771,760}, {3403.39771,380}}}
+SkOpSegment::markDone id=13 (3403.40015,379.997498 3403.40015,380.002502) t=0 [25] (3403.40015,379.997498) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=1 oppValue=0
+debugShowLineIntersection wtTs[0]=1 {{{3403.40259,760}, {3403.39771,760}}} {{3403.39771,760}} wnTs[0]=0 {{{3403.39771,760}, {3403.39771,380}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.40259,380}, {3403.40259,760}}} {{3403.40259,380}} wnTs[0]=1 {{{3403.39771,380}, {3403.40259,380}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.40259,760}, {3403.39771,760}}} {{3403.40259,760}} wnTs[0]=1 {{{3403.40259,380}, {3403.40259,760}}}
+debugShowLineIntersection wtTs[0]=0.999999197 {{{364,759.997498}, {3403.40015,759.997498}}} {{3403.39771,759.997498}} wnTs[0]=6.58537e-06 {{{3403.39771,760}, {3403.39771,380}}}
+debugShowLineIntersection no intersect {{{3403.40015,759.997498}, {3403.40015,760.002502}}} {{{3403.39771,760}, {3403.39771,380}}}
+debugShowLineIntersection no intersect {{{364,759.997498}, {3403.40015,759.997498}}} {{{3403.40259,380}, {3403.40259,760}}}
+debugShowLineIntersection no intersect {{{3403.40015,759.997498}, {3403.40015,760.002502}}} {{{3403.40259,380}, {3403.40259,760}}}
+debugShowLineIntersection wtTs[0]=0.5 {{{3403.40015,759.997498}, {3403.40015,760.002502}}} {{3403.40015,760}} wnTs[0]=0.5 {{{3403.40259,760}, {3403.39771,760}}}
+debugShowLineIntersection wtTs[0]=1 {{{3403.39771,6099}, {3403.39771,760}}} {{3403.39771,760}} wnTs[0]=0 {{{3403.39771,760}, {3403.39771,380}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.39771,760}, {3403.40259,760}}} {{3403.39771,760}} wnTs[0]=0 {{{3403.39771,760}, {3403.39771,380}}}
+debugShowLineIntersection wtTs[0]=8.36411997e-13 {{{3403.40259,760}, {3403.39771,6099}}} {{3403.39771,760}} wnTs[0]=0 {{{3403.39771,760}, {3403.39771,380}}}
+debugShowLineIntersection wtTs[0]=1 {{{3403.39771,760}, {3403.40259,760}}} {{3403.40259,760}} wnTs[0]=1 {{{3403.40259,380}, {3403.40259,760}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.40259,760}, {3403.39771,6099}}} {{3403.40259,760}} wnTs[0]=1 {{{3403.40259,380}, {3403.40259,760}}}
+SkOpSegment::markDone id=10 (3403.39771,760 3403.40259,760) t=0 [19] (3403.39771,760) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=1 oppValue=0
+SkOpSegment::markDone id=19 (3403.40259,760 3403.39771,760) t=0 [37] (3403.40259,760) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=1 oppValue=0
+debugShowLineIntersection wtTs[0]=1 {{{3403.39771,6099}, {3403.39771,760}}} {{3403.39771,760}} wnTs[0]=1 {{{3403.40259,760}, {3403.39771,760}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.39771,760}, {3403.40259,760}}} {{3403.39771,760}} wtTs[1]=1 {{3403.40259,760}} wnTs[0]=1 {{{3403.40259,760}, {3403.39771,760}}} wnTs[1]=0
+debugShowLineIntersection wtTs[0]=0 {{{3403.40259,760}, {3403.39771,6099}}} {{3403.40259,760}} wnTs[0]=0 {{{3403.40259,760}, {3403.39771,760}}}
+debugShowLineIntersection wtTs[0]=0 {{{559.002686,570}, {558.997681,570}}} {{559.002686,570}} wnTs[0]=1 {{{559.002686,551}, {559.002686,570}}}
+debugShowLineIntersection wtTs[0]=1 {{{558.997681,551}, {559.002686,551}}} {{559.002686,551}} wnTs[0]=0 {{{559.002686,551}, {559.002686,570}}}
+debugShowLineIntersection wtTs[0]=0 {{{558.997681,570}, {558.997681,551}}} {{558.997681,570}} wnTs[0]=1 {{{559.002686,570}, {558.997681,570}}}
+debugShowLineIntersection wtTs[0]=0 {{{558.997681,551}, {559.002686,551}}} {{558.997681,551}} wnTs[0]=1 {{{558.997681,570}, {558.997681,551}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.40015,759.997498}, {3403.40015,760.002502}}} {{3403.40015,759.997498}} wnTs[0]=1 {{{364,759.997498}, {3403.40015,759.997498}}}
+debugShowLineIntersection wtTs[0]=1 {{{364,760.002502}, {364,759.997498}}} {{364,759.997498}} wnTs[0]=0 {{{364,759.997498}, {3403.40015,759.997498}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.40015,760.002502}, {364,760.002502}}} {{3403.40015,760.002502}} wnTs[0]=1 {{{3403.40015,759.997498}, {3403.40015,760.002502}}}
+debugShowLineIntersection wtTs[0]=0 {{{364,760.002502}, {364,759.997498}}} {{364,760.002502}} wnTs[0]=1 {{{3403.40015,760.002502}, {364,760.002502}}}
+debugShowLineIntersection no intersect {{{3403.39771,6099}, {3403.39771,760}}} {{{3403.40015,759.997498}, {3403.40015,760.002502}}}
+debugShowLineIntersection wtTs[0]=0.5 {{{3403.39771,760}, {3403.40259,760}}} {{3403.40015,760}} wnTs[0]=0.5 {{{3403.40015,759.997498}, {3403.40015,760.002502}}}
+debugShowLineIntersection wtTs[0]=4.68710178e-07 {{{3403.40259,760}, {3403.39771,6099}}} {{3403.40015,760.002502}} wnTs[0]=1 {{{3403.40015,759.997498}, {3403.40015,760.002502}}}
+SkOpSegment::markDone id=6 (3403.40015,759.997498 3403.40015,760.002502) t=0 [11] (3403.40015,759.997498) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=1 oppValue=0
+debugShowLineIntersection wtTs[0]=0.999999531 {{{3403.39771,6099}, {3403.39771,760}}} {{3403.39771,760.002502}} wnTs[0]=8.03253e-07 {{{3403.40015,760.002502}, {364,760.002502}}}
+debugShowLineIntersection wtTs[0]=4.68710178e-07 {{{3403.40259,760}, {3403.39771,6099}}} {{3403.40015,760.002502}} wnTs[0]=0 {{{3403.40015,760.002502}, {364,760.002502}}}
+debugShowLineIntersection wtTs[0]=0 {{{3403.39771,760}, {3403.40259,760}}} {{3403.39771,760}} wnTs[0]=1 {{{3403.39771,6099}, {3403.39771,760}}}
+debugShowLineIntersection wtTs[0]=8.36411997e-13 {{{3403.40259,760}, {3403.39771,6099}}} {{3403.39771,760}} wtTs[1]=1 {{3403.39771,6099}} wnTs[0]=1 {{{3403.39771,6099}, {3403.39771,760}}} wnTs[1]=0
+debugShowLineIntersection wtTs[0]=0 {{{3403.40259,760}, {3403.39771,6099}}} {{3403.40259,760}} wnTs[0]=1 {{{3403.39771,760}, {3403.40259,760}}}
+------------------x--x------x--------- addExpanded
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+05: seg/base=9/17 seg/base=11/21 MarkCoinStart
+06: seg/base=9/18 seg/base=11/22 MarkCoinEnd
+SkOpSegment::debugShowActiveSpans id=12 (1274,379.997498 3403.40015,379.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=14 (3403.40015,380.002502 1274,380.002502) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=15 (1274,380.002502 1274,379.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=16 (3403.39771,760 3403.39771,380) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=17 (3403.39771,380 3403.40259,380) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=18 (3403.40259,380 3403.40259,760) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=1 (559.002686,551 559.002686,570) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=2 (559.002686,570 558.997681,570) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=3 (558.997681,570 558.997681,551) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=4 (558.997681,551 559.002686,551) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=5 (364,759.997498 3403.40015,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=7 (3403.40015,760.002502 364,760.002502) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=8 (364,760.002502 364,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=9 (3403.39771,6099 3403.39771,760) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=11 (3403.40259,760 3403.39771,6099) t=0 tEnd=1 windSum=? windValue=1
+------------------x--x------x--------- move_multiples
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+05: seg/base=9/17 seg/base=11/21 MarkCoinStart
+06: seg/base=9/18 seg/base=11/22 MarkCoinEnd
+------------------x--x------x--------- move_nearby
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+05: seg/base=9/17 seg/base=11/21 MarkCoinStart
+06: seg/base=9/18 seg/base=11/22 MarkCoinEnd
+SkOpSegment::markDone id=17 (3403.39771,380 3403.40259,380) t=0 [33] (3403.39771,380) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=0 oppValue=0
+------------------x--x------x--------- correctEnds
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+05: seg/base=9/17 seg/base=11/21 MarkCoinStart
+06: seg/base=9/18 seg/base=11/22 MarkCoinEnd
+SkOpSegment::debugShowActiveSpans id=12 (1274,379.997498 3403.40015,379.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=14 (3403.40015,380.002502 1274,380.002502) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=15 (1274,380.002502 1274,379.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=16 (3403.39771,760 3403.39771,380) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=18 (3403.40259,380 3403.40259,760) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=1 (559.002686,551 559.002686,570) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=2 (559.002686,570 558.997681,570) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=3 (558.997681,570 558.997681,551) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=4 (558.997681,551 559.002686,551) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=5 (364,759.997498 3403.40015,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=7 (3403.40015,760.002502 364,760.002502) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=8 (364,760.002502 364,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=9 (3403.39771,6099 3403.39771,760) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=11 (3403.40259,760 3403.39771,6099) t=0 tEnd=1 windSum=? windValue=1
+------------------x--x------x--------- addEndMovedSpans
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+05: seg/base=9/17 seg/base=11/21 MarkCoinStart
+06: seg/base=9/18 seg/base=11/22 MarkCoinEnd
+------------------x--x------x--------- expand
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+05: seg/base=9/17 seg/base=11/21 MarkCoinStart
+06: seg/base=9/18 seg/base=11/22 MarkCoinEnd
+------------------x--x------x--------- addExpanded
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+05: seg/base=9/17 seg/base=11/21 MarkCoinStart
+06: seg/base=9/18 seg/base=11/22 MarkCoinEnd
+------------------x--x------x--------- mark
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+05: seg/base=9/17 seg/base=11/21 MarkCoinStart
+06: seg/base=9/18 seg/base=11/22 MarkCoinEnd
+----------------------------x--------- missing_coincidence
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+----------------------------x--------- expand
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+----------------------------x--------- expand
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+----------------------------x--------- apply
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+SkOpSegment::markDone id=9 (3403.39771,6099 3403.39771,760) t=0 [17] (3403.39771,6099) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=0 oppValue=0
+SkOpSegment::markDone id=11 (3403.40259,760 3403.39771,6099) t=0 [21] (3403.40259,760) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=0 oppValue=0
+----------------------------x--------- findOverlaps
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+SkOpSegment::debugShowActiveSpans id=12 (1274,379.997498 3403.40015,379.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=14 (3403.40015,380.002502 1274,380.002502) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=15 (1274,380.002502 1274,379.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=16 (3403.39771,760 3403.39771,380) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=18 (3403.40259,380 3403.40259,760) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=1 (559.002686,551 559.002686,570) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=2 (559.002686,570 558.997681,570) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=3 (558.997681,570 558.997681,551) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=4 (558.997681,551 559.002686,551) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=5 (364,759.997498 3403.40015,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=7 (3403.40015,760.002502 364,760.002502) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=8 (364,760.002502 364,759.997498) t=0 tEnd=1 windSum=? windValue=1
+----------------------------x--------- calc_angles
+00: segment=13 MoveNearbyClearAll2
+01: segment=17 MoveNearbyClearAll2
+02: segment=19 MoveNearbyClearAll2
+03: segment=6 MoveNearbyClearAll2
+04: segment=10 MoveNearbyClearAll2
+SkOpSegment::sortAngles [12] tStart=1 [24]
+SkOpAngle::after [12/1] 15/15 tStart=1 tEnd=0 < [16/4] 23/23 tStart=1 tEnd=0 < [14/2] 15/15 tStart=0 tEnd=1 F 5
+SkOpAngle::afterPart {{{3403.39771,380}, {1273.99756,380}}} id=12
+SkOpAngle::afterPart {{{3403.39771,380}, {3403.39771,760}}} id=16
+SkOpAngle::afterPart {{{3403.39771,380}, {1273.99756,380}}} id=14
+SkOpSegment::sortAngles [14] tStart=0 [27]
+SkOpSegment::sortAngles [16] tStart=0 [31]
+SkOpAngle::after [16/3] 7/7 tStart=0 tEnd=1 < [7/7] 15/15 tStart=0 tEnd=1 < [18/5] 7/7 tStart=1 tEnd=0 F 5
+SkOpAngle::afterPart {{{3403.40015,760.002502}, {3403.40015,380.002502}}} id=16
+SkOpAngle::afterPart {{{3403.40015,760.002502}, {364,760.002502}}} id=7
+SkOpAngle::afterPart {{{3403.40015,760.002502}, {3403.40015,380.002502}}} id=18
+SkOpAngle::after [16/3] 7/7 tStart=0 tEnd=1 < [5/6] 15/15 tStart=1 tEnd=0 < [18/5] 7/7 tStart=1 tEnd=0 F 5
+SkOpAngle::afterPart {{{3403.40015,759.997498}, {3403.40015,379.997498}}} id=16
+SkOpAngle::afterPart {{{3403.40015,759.997498}, {364,759.997498}}} id=5
+SkOpAngle::afterPart {{{3403.40015,759.997498}, {3403.40015,379.997498}}} id=18
+SkOpAngle::after [18/5] 7/7 tStart=1 tEnd=0 < [5/6] 15/15 tStart=1 tEnd=0 < [7/7] 15/15 tStart=0 tEnd=1 T 7
+SkOpAngle::afterPart {{{3403.40015,759.997498}, {3403.40015,379.997498}}} id=18
+SkOpAngle::afterPart {{{3403.40015,759.997498}, {364,759.997498}}} id=5
+SkOpAngle::afterPart {{{3403.40015,759.997498}, {364,759.997498}}} id=7
+SkOpSegment::sortAngles [16] tStart=1 [32]
+SkOpSegment::sortAngles [18] tStart=1 [36]
+SkOpSegment::sortAngles [5] tStart=1 [10]
+SkOpSegment::sortAngles [7] tStart=0 [13]
+coinSpan - id=9 t=0 tEnd=1
+coinSpan + id=11 t=1 tEnd=0
+SkOpSpan::sortableTop dir=kTop seg=12 t=0.5 pt=(2338.7002,379.997498)
+SkOpSpan::sortableTop [0] valid=1 operand=1 span=23 ccw=1 seg=12 {{{1274, 379.997498f}, {3403.40015f, 379.997498f}}} t=0.5 pt=(2338.7002,379.997498) slope=(2129.40015,0)
+SkOpSegment::markWinding id=12 (1274,379.997498 3403.40015,379.997498) t=0 [23] (1274,379.997498) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+SkOpSegment::markWinding id=12 (1274,379.997498 3403.40015,379.997498) t=0 [23] (1274,379.997498) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+SkOpSegment::markWinding id=15 (1274,380.002502 1274,379.997498) t=0 [29] (1274,380.002502) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+SkOpSegment::markWinding id=14 (3403.40015,380.002502 1274,380.002502) t=0 [27] (3403.40015,380.002502) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+SkOpSegment::activeOp id=12 t=1 tEnd=0 op=union miFrom=0 miTo=0 suFrom=0 suTo=1 result=1
+SkOpSegment::findNextOp simple
+SkOpSegment::markDone id=12 (1274,379.997498 3403.40015,379.997498) t=0 [23] (1274,379.997498) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+bridgeOp current id=12 from=(3403.40015,379.997498) to=(1274,379.997498)
+SkOpSegment::findNextOp simple
+SkOpSegment::markDone id=15 (1274,380.002502 1274,379.997498) t=0 [29] (1274,380.002502) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+bridgeOp current id=15 from=(1274,379.997498) to=(1274,380.002502)
+path.moveTo(3403.40015,379.997498);
+path.lineTo(1274,379.997498);
+SkOpSegment::markDone id=14 (3403.40015,380.002502 1274,380.002502) t=0 [27] (3403.40015,380.002502) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+path.lineTo(1274,380.002502);
+SkOpSegment::debugShowActiveSpans id=16 (3403.39771,760 3403.39771,380) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=18 (3403.40259,380 3403.40259,760) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=1 (559.002686,551 559.002686,570) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=2 (559.002686,570 558.997681,570) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=3 (558.997681,570 558.997681,551) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=4 (558.997681,551 559.002686,551) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=5 (364,759.997498 3403.40015,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=7 (3403.40015,760.002502 364,760.002502) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=8 (364,760.002502 364,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSpan::sortableTop dir=kLeft seg=16 t=0.5 pt=(3403.39771,570)
+SkOpSpan::sortableTop [0] valid=0 operand=0 span=5 ccw=1 seg=3 {{{558.997681f, 570}, {558.997681f, 551}}} t=0 pt=(558.997681,570) slope=(0,0)
+SkOpSpan::sortableTop [1] valid=0 operand=0 span=-1 ccw=1 t=1 pt=(559.002686,570) slope=(0,0)
+SkOpSpan::sortableTop [2] valid=1 operand=1 span=31 ccw=1 seg=16 {{{3403.39771f, 760}, {3403.39771f, 380}}} t=0.5 pt=(3403.39771,570) slope=(0,-380)
+SkOpSpan::sortableTop dir=kLeft seg=18 t=0.5 pt=(3403.40259,570)
+SkOpSpan::sortableTop [0] valid=0 operand=0 span=5 ccw=1 seg=3 {{{558.997681f, 570}, {558.997681f, 551}}} t=0 pt=(558.997681,570) slope=(0,0)
+SkOpSpan::sortableTop [1] valid=0 operand=0 span=-1 ccw=1 t=1 pt=(559.002686,570) slope=(0,0)
+SkOpSpan::sortableTop [2] valid=1 operand=1 span=31 ccw=1 seg=16 {{{3403.39771f, 760}, {3403.39771f, 380}}} t=0.5 pt=(3403.39771,570) slope=(0,-380)
+SkOpSpan::sortableTop [3] valid=1 operand=1 span=35 ccw=0 seg=18 {{{3403.40259f, 380}, {3403.40259f, 760}}} t=0.5 pt=(3403.40259,570) slope=(0,380)
+SkOpSpan::sortableTop dir=kLeft seg=1 t=0.5 pt=(559.002686,560.5)
+SkOpSpan::sortableTop [0] valid=1 operand=0 span=5 ccw=1 seg=3 {{{558.997681f, 570}, {558.997681f, 551}}} t=0.5 pt=(558.997681,560.5) slope=(0,-19)
+SkOpSpan::sortableTop [1] valid=1 operand=0 span=1 ccw=0 seg=1 {{{559.002686f, 551}, {559.002686f, 570}}} t=0.5 pt=(559.002686,560.5) slope=(0,19)
+SkOpSegment::markWinding id=3 (558.997681,570 558.997681,551) t=0 [5] (558.997681,570) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+SkOpSegment::markWinding id=4 (558.997681,551 559.002686,551) t=0 [7] (558.997681,551) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+SkOpSegment::markWinding id=1 (559.002686,551 559.002686,570) t=0 [1] (559.002686,551) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+SkOpSegment::markWinding id=2 (559.002686,570 558.997681,570) t=0 [3] (559.002686,570) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+SkOpSegment::markWinding id=3 (558.997681,570 558.997681,551) t=0 [5] (558.997681,570) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+SkOpSegment::activeOp id=1 t=1 tEnd=0 op=union miFrom=0 miTo=1 suFrom=0 suTo=0 result=1
+SkOpSegment::findNextOp simple
+SkOpSegment::markDone id=1 (559.002686,551 559.002686,570) t=0 [1] (559.002686,551) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+bridgeOp current id=1 from=(559.002686,570) to=(559.002686,551)
+SkOpSegment::findNextOp simple
+SkOpSegment::markDone id=4 (558.997681,551 559.002686,551) t=0 [7] (558.997681,551) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+bridgeOp current id=4 from=(559.002686,551) to=(558.997681,551)
+path.moveTo(559.002686,570);
+path.lineTo(559.002686,551);
+SkOpSegment::findNextOp simple
+SkOpSegment::markDone id=3 (558.997681,570 558.997681,551) t=0 [5] (558.997681,570) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+bridgeOp current id=3 from=(558.997681,551) to=(558.997681,570)
+path.lineTo(558.997681,551);
+SkOpSegment::findNextOp simple
+SkOpSegment::markDone id=2 (559.002686,570 558.997681,570) t=0 [3] (559.002686,570) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+bridgeOp current id=2 from=(558.997681,570) to=(559.002686,570)
+path.lineTo(558.997681,570);
+path.lineTo(559.002686,570);
+path.close();
+SkOpSegment::debugShowActiveSpans id=16 (3403.39771,760 3403.39771,380) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=18 (3403.40259,380 3403.40259,760) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=5 (364,759.997498 3403.40015,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=7 (3403.40015,760.002502 364,760.002502) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=8 (364,760.002502 364,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSpan::sortableTop dir=kTop seg=16 t=0.5 pt=(3403.39771,570)
+SkOpSpan::sortableTop [0] valid=1 operand=1 span=23 ccw=1 seg=12 {{{1274, 379.997498f}, {3403.40015f, 379.997498f}}} t=0.999998853 pt=(3403.39771,379.997498) slope=(2129.40015,0)
+SkOpSpan::sortableTop [1] valid=1 operand=1 span=27 ccw=0 seg=14 {{{3403.40015f, 380.002502f}, {1274, 380.002502f}}} t=1.146523e-06 pt=(3403.39771,380.002502) slope=(-2129.40015,0)
+SkOpSpan::sortableTop [2] valid=1 operand=1 span=31 ccw=0 seg=16 {{{3403.39771f, 760}, {3403.39771f, 380}}} t=0.5 pt=(3403.39771,570) slope=(0,-380)
+SkOpSegment::markWinding id=16 (3403.39771,760 3403.39771,380) t=0 [31] (3403.39771,760) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
+SkOpSegment::markWinding id=16 (3403.39771,760 3403.39771,380) t=0 [31] (3403.39771,760) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
+SkOpSegment::activeOp id=16 t=1 tEnd=0 op=union miFrom=0 miTo=0 suFrom=1 suTo=0 result=1
+SkOpSegment::markDone id=16 (3403.39771,760 3403.39771,380) t=0 [31] (3403.39771,760) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
+SkOpSegment::debugShowActiveSpans id=18 (3403.40259,380 3403.40259,760) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=5 (364,759.997498 3403.40015,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=7 (3403.40015,760.002502 364,760.002502) t=0 tEnd=1 windSum=? windValue=1
+SkOpSegment::debugShowActiveSpans id=8 (364,760.002502 364,759.997498) t=0 tEnd=1 windSum=? windValue=1
+SkOpSpan::sortableTop dir=kTop seg=18 t=0.5 pt=(3403.40259,570)
+SkOpSpan::sortableTop [0] valid=0 operand=0 span=-1 ccw=0 t=1 pt=(3403.40259,380) slope=(0,0)
+SkOpSpan::sortableTop [1] valid=1 operand=1 span=35 ccw=0 seg=18 {{{3403.40259f, 380}, {3403.40259f, 760}}} t=0.5 pt=(3403.40259,570) slope=(0,380)
+SkOpSpan::sortableTop dir=kTop seg=5 t=0.5 pt=(1883.70007,759.997498)
+SkOpSpan::sortableTop [0] valid=1 operand=1 span=23 ccw=1 seg=12 {{{1274, 379.997498f}, {3403.40015f, 379.997498f}}} t=0.286324801 pt=(1883.70007,379.997498) slope=(2129.40015,0)
+SkOpSpan::sortableTop [1] valid=1 operand=1 span=27 ccw=0 seg=14 {{{3403.40015f, 380.002502f}, {1274, 380.002502f}}} t=0.713675199 pt=(1883.70007,380.002502) slope=(-2129.40015,0)
+SkOpSpan::sortableTop [2] valid=1 operand=1 span=9 ccw=1 seg=5 {{{364, 759.997498f}, {3403.40015f, 759.997498f}}} t=0.5 pt=(1883.70007,759.997498) slope=(3039.40015,0)
+SkOpSegment::markWinding id=5 (364,759.997498 3403.40015,759.997498) t=0 [9] (364,759.997498) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+SkOpSegment::markWinding id=5 (364,759.997498 3403.40015,759.997498) t=0 [9] (364,759.997498) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+SkOpSegment::markWinding id=8 (364,760.002502 364,759.997498) t=0 [15] (364,760.002502) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+SkOpSegment::markWinding id=7 (3403.40015,760.002502 364,760.002502) t=0 [13] (3403.40015,760.002502) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+SkOpSegment::activeOp id=5 t=1 tEnd=0 op=union miFrom=0 miTo=0 suFrom=0 suTo=1 result=1
+SkOpSegment::findNextOp simple
+SkOpSegment::markDone id=5 (364,759.997498 3403.40015,759.997498) t=0 [9] (364,759.997498) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+bridgeOp current id=5 from=(3403.40015,759.997498) to=(364,759.997498)
+SkOpSegment::findNextOp simple
+SkOpSegment::markDone id=8 (364,760.002502 364,759.997498) t=0 [15] (364,760.002502) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+bridgeOp current id=8 from=(364,759.997498) to=(364,760.002502)
+path.moveTo(3403.40015,759.997498);
+path.lineTo(364,759.997498);
+SkOpSegment::markDone id=7 (3403.40015,760.002502 364,760.002502) t=0 [13] (3403.40015,760.002502) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+path.lineTo(364,760.002502);
+SkOpSegment::debugShowActiveSpans id=18 (3403.40259,380 3403.40259,760) t=0 tEnd=1 windSum=? windValue=1
+SkOpSpan::sortableTop dir=kLeft seg=18 t=0.25 pt=(3403.40259,475)
+SkOpSpan::sortableTop [0] valid=1 operand=1 span=31 ccw=1 seg=16 {{{3403.39771f, 760}, {3403.39771f, 380}}} t=0.75 pt=(3403.39771,475) slope=(0,-380)
+SkOpSpan::sortableTop [1] valid=1 operand=1 span=35 ccw=0 seg=18 {{{3403.40259f, 380}, {3403.40259f, 760}}} t=0.25 pt=(3403.40259,475) slope=(0,380)
+SkOpSegment::markWinding id=18 (3403.40259,380 3403.40259,760) t=0 [35] (3403.40259,380) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+SkOpSegment::markWinding id=18 (3403.40259,380 3403.40259,760) t=0 [35] (3403.40259,380) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+SkOpSegment::activeOp id=18 t=1 tEnd=0 op=union miFrom=0 miTo=0 suFrom=0 suTo=1 result=1
+SkOpSegment::markDone id=18 (3403.40259,380 3403.40259,760) t=0 [35] (3403.40259,380) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+</div>
+
</div>
<script type="text/javascript">
var testDivs = [
+ filinmangust14,
halbug,
];