From 50c910b03a566be57586b32d81f4c182ee02c557 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Lehni?= Date: Fri, 6 Jan 2017 14:23:27 +0100 Subject: [PATCH] Switch back to sampling winding at t = 1/4, 2/4, 3/4 Due to curve-time clamping, this should now be OK. Relates to #1073 --- src/path/PathItem.Boolean.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/path/PathItem.Boolean.js b/src/path/PathItem.Boolean.js index dc30612e..7eb11abb 100644 --- a/src/path/PathItem.Boolean.js +++ b/src/path/PathItem.Boolean.js @@ -644,16 +644,15 @@ PathItem.inject(new function() { totalLength += length; segment = segment.getNext(); } while (segment && !segment._intersection && segment !== start); - // Determine winding at three points in the chain. If a winding with - // sufficient quality is found, use it. Otherwise use the winding with - // the best quality. - var offsets = [0.48, 0.1, 0.9], - windingZero = { winding: 0, quality: 0 }, + // Sample winding at up to three points in the chain, until a winding + // with sufficient quality is found. The winding with the best quality + // is used otherwise. + var windingZero = { winding: 0, quality: 0 }, winding = windingZero, tMin = /*#=*/Numerical.CURVETIME_EPSILON, tMax = 1 - tMin; - for (var i = 0; i < offsets.length && winding.quality < 0.5; i++) { - var length = totalLength * offsets[i]; + for (var i = 0; i < 3 && winding.quality < 0.5; i++) { + var length = totalLength * (i + 1) / 4; for (var j = 0, l = chain.length; j < l; j++) { var entry = chain[j], curveLength = entry.length;