Merge pull request #1264 from iconexperience/addWinding-fix

Fix addWinding and improve performance slightly
This commit is contained in:
Jürg Lehni 2017-03-01 12:33:05 +01:00 committed by GitHub
commit 47364f88a6

View file

@ -515,7 +515,7 @@ PathItem.inject(new function() {
var t = po === o0 ? 0 var t = po === o0 ? 0
: po === o3 ? 1 : po === o3 ? 1
: paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3) : paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3)
? 0.5 ? 1
: Curve.solveCubic(v, io, po, roots, 0, 1) === 1 : Curve.solveCubic(v, io, po, roots, 0, 1) === 1
? roots[0] ? roots[0]
: 0.5, : 0.5,
@ -544,25 +544,26 @@ PathItem.inject(new function() {
if (winding !== windingPrev) { if (winding !== windingPrev) {
// Curve is crossed at starting point and winding changes // Curve is crossed at starting point and winding changes
// from previous curve. Cancel winding from previous curve. // from previous curve. Cancel winding from previous curve.
if (a3Prev < paR) { if (a0 < paL) {
windingL += winding; windingL += winding;
} else if (a3Prev > paL) { } else if (a0 > paR) {
windingR += winding; windingR += winding;
} }
} else if (a3Prev < paL && a > paL || a3Prev > paR && a < paR) { } else if (a0 != a3Prev) {
// Point is on a horizontal curve between the previous non- // A horizontal curve is between current and previous
// horizontal and the current curve. // non-horizontal curve
if (a3Prev < paL) { if (a3Prev < paR && a > paR) {
// Left winding was added before, now add right winding. // Right winding was not added before, so add it now
windingR += winding; windingR += winding;
} else if (a3Prev > paR) { onPath = true;
// Right winding was added before, now add left winding. } else if (a3Prev > paL && a < paL) {
// Left winding was not added before, so add it now
windingL += winding; windingL += winding;
onPath = true;
} }
onPath = true; // TODO: Determine how to handle quality when curve is crossed
// at starting point. Do we always need to set to 0?
} }
// TODO: Determine how to handle quality when curve is crossed
// at starting point. Do we always need to set to 0?
quality = 0; quality = 0;
} }
vPrev = v; vPrev = v;