Merge pull request #1115 from iconexperience/addCurveIntersections-patch

Improve fat line clipping to fix #1088
This commit is contained in:
Jürg Lehni 2016-07-20 17:56:04 +02:00 committed by GitHub
commit 58991a569e
2 changed files with 22 additions and 2 deletions

View file

@ -1709,9 +1709,15 @@ new function() { // Scope for intersection using bezier fat-line clipping
u, uMax, tMinNew, tMaxNew, !flip, recursion, calls);
}
} else { // Iterate
calls = addCurveIntersections(
v2, v1, c2, c1, locations, param,
if (uMax - uMin >= /*#=*/Numerical.CLIPPING_EPSILON) {
calls = addCurveIntersections(v2, v1, c2, c1, locations, param,
uMin, uMax, tMinNew, tMaxNew, !flip, recursion, calls);
} else {
// The interval on the other curve is already tight enough,
// therefore we keep iterating on the same curve.
calls = addCurveIntersections(v1, v2, c1, c2, locations, param,
tMinNew, tMaxNew, uMin, uMax, flip, recursion, calls);
}
}
}
return calls;

View file

@ -152,3 +152,17 @@ test('#1074', function() {
{ point: { x: 349.98644, y: 126.84 } , index: 4, time: 0, crossing: true }
]);
});
test('#1088', function() {
var path1 = new paper.Path({segments:[
[314.48576574722523, 308.77472829145444, 8.651222275575492, -2.220498935022104, -8.651222275575492, 2.220498935022105],
[290.40724577164383, 302.0497467665447, 6.2486166726329975, 6.3819316872198515, -0.012648799703259704, -0.012918663419550348]
], closed:false});
var path2 = new paper.Path({segments:[
[328.02746577749963, 300.1256389868014, 7.902769748335459, -10.046794724901815, -2.5352164811920375e-11, 3.2230218494078144e-11],
[309.7443037372522, 309.63202128991924, 5.4001247917767614e-11, -2.9558577807620168e-12, -6.666656713343759, 0.3629571641783996]
], closed:false});
testIntersection(path1.getIntersections(path2), [
{ point: { x: 309.99726, y: 309.5004975367957 }, index: 0, time: 0.17182, crossing: true }
]);
});