Further simplify checks of crossing vs touching in getWinding()

Relates to #890
This commit is contained in:
Jürg Lehni 2016-01-07 13:09:47 +01:00
parent 231dba83b2
commit 5e01774c91

View file

@ -402,17 +402,13 @@ PathItem.inject(new function() {
|| t < tMin && prevT > tMax)) {
var x = Curve.getPoint(values, t).x,
counted = false;
// Take care of cases where the curve and the
// preceding curve merely touches the ray towards
// +-x direction, but proceeds to the same side of
// the ray. This essentially is not a crossing.
if (Numerical.isZero(Curve.getTangent(values, t).y)
&& !Curve.isStraight(values)
// Does the winding over the edges change?
|| t < tMin && prevCurve
&& winding * prevCurve.winding < 0
|| t > tMax && nextCurve
&& winding * nextCurve.winding < 0) {
// Take care of cases where the ray merely touches
// the connecting point between two neighboring mono
// curves, but does not cross either of them.
if (t < tMin && prevCurve
&& winding * prevCurve.winding < 0
|| t > tMax && nextCurve
&& winding * nextCurve.winding < 0) {
if (x > xBefore && x < xAfter) {
++windLeft;
++windRight;