mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-20 22:39:50 -05:00
Revert "Remove special handling of winding contribution on overlaps"
This reverts commit c6a38589e9
.
The special handling seems to be still necessary in some edge cases, e.g. in BooleanOperations.html
This commit is contained in:
parent
10eafccd1a
commit
8cf562c57b
1 changed files with 21 additions and 2 deletions
|
@ -415,7 +415,26 @@ PathItem.inject(new function() {
|
||||||
// Assign the average winding to the entire curve chain.
|
// Assign the average winding to the entire curve chain.
|
||||||
var winding = Math.round(windingSum / 3);
|
var winding = Math.round(windingSum / 3);
|
||||||
for (var j = chain.length - 1; j >= 0; j--) {
|
for (var j = chain.length - 1; j >= 0; j--) {
|
||||||
chain[j].segment._winding = winding;
|
var seg = chain[j].segment,
|
||||||
|
inter = seg._intersection,
|
||||||
|
wind = winding;
|
||||||
|
// We need to handle the edge cases of overlapping curves
|
||||||
|
// differently based on the type of operation, and adjust the
|
||||||
|
// winding number accordingly:
|
||||||
|
if (inter && inter._overlap) {
|
||||||
|
switch (operation) {
|
||||||
|
case 'unite':
|
||||||
|
if (wind === 1)
|
||||||
|
wind = 2;
|
||||||
|
break;
|
||||||
|
case 'intersect':
|
||||||
|
if (wind === 2)
|
||||||
|
wind = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
seg._originalWinding = winding;
|
||||||
|
seg._winding = wind;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -532,7 +551,7 @@ PathItem.inject(new function() {
|
||||||
&& /^(unite|subtract)$/.test(operation)) {
|
&& /^(unite|subtract)$/.test(operation)) {
|
||||||
// Switch to the overlapping intersecting segment if it is
|
// Switch to the overlapping intersecting segment if it is
|
||||||
// part of the boolean result.
|
// part of the boolean result.
|
||||||
if (operator(other._winding)) {
|
if (operator(other._originalWinding)) {
|
||||||
drawSegment(seg, 'overlap-cross', i, 'orange');
|
drawSegment(seg, 'overlap-cross', i, 'orange');
|
||||||
seg = other;
|
seg = other;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue