Fix addWinding() for special cases

This commit is contained in:
iconexperience 2017-03-01 09:04:46 +01:00
parent 32db1eb005
commit 86d05624c0

View file

@ -544,25 +544,26 @@ PathItem.inject(new function() {
if (winding !== windingPrev) {
// Curve is crossed at starting point and winding changes
// from previous curve. Cancel winding from previous curve.
if (a3Prev < paR) {
if (a0 < paL) {
windingL += winding;
} else if (a3Prev > paL) {
} else if (a0 > paR) {
windingR += winding;
}
} else if (a3Prev < paL && a > paL || a3Prev > paR && a < paR) {
// Point is on a horizontal curve between the previous non-
// horizontal and the current curve.
if (a3Prev < paL) {
// Left winding was added before, now add right winding.
} else if (a0 != a3Prev) {
// A horizontal curve is between current and previous
// non-horizontal curve
if (a3Prev < paR && a > paR) {
// Right winding was not added before, so add it now
windingR += winding;
} else if (a3Prev > paR) {
// Right winding was added before, now add left winding.
onPath = true;
} else if (a3Prev > paL && a < paL) {
// Left winding was not added before, so add it now
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;
}
vPrev = v;