Prebuilt module for commit 445d8ae22f

This commit is contained in:
Paper.js Bot 2016-07-27 19:44:49 +00:00
parent 1a9312225a
commit f03308432b
5 changed files with 182 additions and 95 deletions

View file

@ -9,7 +9,7 @@
* *
* All rights reserved. * All rights reserved.
* *
* Date: Wed Jul 27 20:12:29 2016 +0200 * Date: Wed Jul 27 21:40:53 2016 +0200
* *
*** ***
* *
@ -10082,22 +10082,24 @@ PathItem.inject(new function() {
} }
} }
function findBestIntersection(inter, exclude) { function findBestIntersection(segment) {
if (!inter._next) var inter = segment._intersection,
start = inter;
if (!inter || !inter._next)
return inter; return inter;
while (inter) { while (inter && inter !== start) {
var seg = inter._segment, var other = inter._segment,
nextSeg = seg.getNext(), next = other.getNext(),
nextInter = nextSeg && nextSeg._intersection; nextInter = next && next._intersection;
if (seg !== exclude && (isStart(seg) || isStart(nextSeg) if (other !== segment && (isStart(other) || isStart(next)
|| nextSeg && !seg._visited && !nextSeg._visited || next && !other._visited && !next._visited
&& (!operator || isValid(seg) && (isValid(nextSeg) && (!operator || isValid(other) && (isValid(next)
|| nextInter && isValid(nextInter._segment))) || nextInter && isValid(nextInter._segment)))
)) ))
return inter; return inter;
inter = inter._next; inter = inter._next;
} }
return null; return start;
} }
segments.sort(function(seg1, seg2) { segments.sort(function(seg1, seg2) {
@ -10120,6 +10122,9 @@ PathItem.inject(new function() {
var path = null, var path = null,
finished = false, finished = false,
closed = true, closed = true,
branches = [],
branch,
visited,
seg = segments[i], seg = segments[i],
inter = seg._intersection, inter = seg._intersection,
handleIn; handleIn;
@ -10139,17 +10144,19 @@ PathItem.inject(new function() {
continue; continue;
start = otherStart = null; start = otherStart = null;
while (true) { while (true) {
inter = inter && findBestIntersection(inter, seg) || inter; var inter = findBestIntersection(seg),
var other = inter && inter._segment; other = inter && inter._segment,
if (isStart(seg)) { first = !path,
finished = true; cross = false;
} else if (other) { if (first) {
if (isStart(other)) { path = new Path(Item.NO_INSERT);
finished = true; start = seg;
seg = other; otherStart = other;
} else if (isValid(other, isValid(seg, true))) { }
seg = other; finished = !first && isStart(seg);
} if (!finished && other) {
finished = !first && isStart(other);
cross = finished || isValid(other, isValid(seg, true));
} }
if (finished) { if (finished) {
seg._visited = true; seg._visited = true;
@ -10157,20 +10164,42 @@ PathItem.inject(new function() {
closed = seg._path._closed; closed = seg._path._closed;
break; break;
} }
if (!isValid(seg)) if (cross && branch) {
break; branches.push(branch);
if (!path) { branch = null;
path = new Path(Item.NO_INSERT); }
start = seg; if (!branch) {
otherStart = other; visited = [];
branch = {
start: path._segments.length,
segment: seg,
handleIn: handleIn,
visited: visited
};
}
if (cross)
seg = other;
if (!isValid(seg)) {
path.removeSegments(branch.start);
for (var j = 0, k = visited.length; j < k; j++) {
visited[j]._visited = false;
}
seg = branch.segment;
handleIn = branch.handleIn;
visited = branch.visited;
branch = branches.pop();
if (!branch) {
console.log('run out of branches, breaking.');
break;
}
} }
var next = seg.getNext(); var next = seg.getNext();
path.add(new Segment(seg._point, handleIn, path.add(new Segment(seg._point, handleIn,
next && seg._handleOut)); next && seg._handleOut));
seg._visited = true; seg._visited = true;
visited.push(seg);
seg = next || seg._path.getFirstSegment(); seg = next || seg._path.getFirstSegment();
handleIn = next && next._handleIn; handleIn = next && next._handleIn;
inter = seg._intersection;
} }
if (finished) { if (finished) {
path.firstSegment.setHandleIn(handleIn); path.firstSegment.setHandleIn(handleIn);

87
dist/paper-core.js vendored
View file

@ -9,7 +9,7 @@
* *
* All rights reserved. * All rights reserved.
* *
* Date: Wed Jul 27 20:12:29 2016 +0200 * Date: Wed Jul 27 21:40:53 2016 +0200
* *
*** ***
* *
@ -10082,22 +10082,24 @@ PathItem.inject(new function() {
} }
} }
function findBestIntersection(inter, exclude) { function findBestIntersection(segment) {
if (!inter._next) var inter = segment._intersection,
start = inter;
if (!inter || !inter._next)
return inter; return inter;
while (inter) { while (inter && inter !== start) {
var seg = inter._segment, var other = inter._segment,
nextSeg = seg.getNext(), next = other.getNext(),
nextInter = nextSeg && nextSeg._intersection; nextInter = next && next._intersection;
if (seg !== exclude && (isStart(seg) || isStart(nextSeg) if (other !== segment && (isStart(other) || isStart(next)
|| nextSeg && !seg._visited && !nextSeg._visited || next && !other._visited && !next._visited
&& (!operator || isValid(seg) && (isValid(nextSeg) && (!operator || isValid(other) && (isValid(next)
|| nextInter && isValid(nextInter._segment))) || nextInter && isValid(nextInter._segment)))
)) ))
return inter; return inter;
inter = inter._next; inter = inter._next;
} }
return null; return start;
} }
segments.sort(function(seg1, seg2) { segments.sort(function(seg1, seg2) {
@ -10120,6 +10122,9 @@ PathItem.inject(new function() {
var path = null, var path = null,
finished = false, finished = false,
closed = true, closed = true,
branches = [],
branch,
visited,
seg = segments[i], seg = segments[i],
inter = seg._intersection, inter = seg._intersection,
handleIn; handleIn;
@ -10139,17 +10144,19 @@ PathItem.inject(new function() {
continue; continue;
start = otherStart = null; start = otherStart = null;
while (true) { while (true) {
inter = inter && findBestIntersection(inter, seg) || inter; var inter = findBestIntersection(seg),
var other = inter && inter._segment; other = inter && inter._segment,
if (isStart(seg)) { first = !path,
finished = true; cross = false;
} else if (other) { if (first) {
if (isStart(other)) { path = new Path(Item.NO_INSERT);
finished = true; start = seg;
seg = other; otherStart = other;
} else if (isValid(other, isValid(seg, true))) { }
seg = other; finished = !first && isStart(seg);
} if (!finished && other) {
finished = !first && isStart(other);
cross = finished || isValid(other, isValid(seg, true));
} }
if (finished) { if (finished) {
seg._visited = true; seg._visited = true;
@ -10157,20 +10164,42 @@ PathItem.inject(new function() {
closed = seg._path._closed; closed = seg._path._closed;
break; break;
} }
if (!isValid(seg)) if (cross && branch) {
break; branches.push(branch);
if (!path) { branch = null;
path = new Path(Item.NO_INSERT); }
start = seg; if (!branch) {
otherStart = other; visited = [];
branch = {
start: path._segments.length,
segment: seg,
handleIn: handleIn,
visited: visited
};
}
if (cross)
seg = other;
if (!isValid(seg)) {
path.removeSegments(branch.start);
for (var j = 0, k = visited.length; j < k; j++) {
visited[j]._visited = false;
}
seg = branch.segment;
handleIn = branch.handleIn;
visited = branch.visited;
branch = branches.pop();
if (!branch) {
console.log('run out of branches, breaking.');
break;
}
} }
var next = seg.getNext(); var next = seg.getNext();
path.add(new Segment(seg._point, handleIn, path.add(new Segment(seg._point, handleIn,
next && seg._handleOut)); next && seg._handleOut));
seg._visited = true; seg._visited = true;
visited.push(seg);
seg = next || seg._path.getFirstSegment(); seg = next || seg._path.getFirstSegment();
handleIn = next && next._handleIn; handleIn = next && next._handleIn;
inter = seg._intersection;
} }
if (finished) { if (finished) {
path.firstSegment.setHandleIn(handleIn); path.firstSegment.setHandleIn(handleIn);

File diff suppressed because one or more lines are too long

87
dist/paper-full.js vendored
View file

@ -9,7 +9,7 @@
* *
* All rights reserved. * All rights reserved.
* *
* Date: Wed Jul 27 20:12:29 2016 +0200 * Date: Wed Jul 27 21:40:53 2016 +0200
* *
*** ***
* *
@ -10082,22 +10082,24 @@ PathItem.inject(new function() {
} }
} }
function findBestIntersection(inter, exclude) { function findBestIntersection(segment) {
if (!inter._next) var inter = segment._intersection,
start = inter;
if (!inter || !inter._next)
return inter; return inter;
while (inter) { while (inter && inter !== start) {
var seg = inter._segment, var other = inter._segment,
nextSeg = seg.getNext(), next = other.getNext(),
nextInter = nextSeg && nextSeg._intersection; nextInter = next && next._intersection;
if (seg !== exclude && (isStart(seg) || isStart(nextSeg) if (other !== segment && (isStart(other) || isStart(next)
|| nextSeg && !seg._visited && !nextSeg._visited || next && !other._visited && !next._visited
&& (!operator || isValid(seg) && (isValid(nextSeg) && (!operator || isValid(other) && (isValid(next)
|| nextInter && isValid(nextInter._segment))) || nextInter && isValid(nextInter._segment)))
)) ))
return inter; return inter;
inter = inter._next; inter = inter._next;
} }
return null; return start;
} }
segments.sort(function(seg1, seg2) { segments.sort(function(seg1, seg2) {
@ -10120,6 +10122,9 @@ PathItem.inject(new function() {
var path = null, var path = null,
finished = false, finished = false,
closed = true, closed = true,
branches = [],
branch,
visited,
seg = segments[i], seg = segments[i],
inter = seg._intersection, inter = seg._intersection,
handleIn; handleIn;
@ -10139,17 +10144,19 @@ PathItem.inject(new function() {
continue; continue;
start = otherStart = null; start = otherStart = null;
while (true) { while (true) {
inter = inter && findBestIntersection(inter, seg) || inter; var inter = findBestIntersection(seg),
var other = inter && inter._segment; other = inter && inter._segment,
if (isStart(seg)) { first = !path,
finished = true; cross = false;
} else if (other) { if (first) {
if (isStart(other)) { path = new Path(Item.NO_INSERT);
finished = true; start = seg;
seg = other; otherStart = other;
} else if (isValid(other, isValid(seg, true))) { }
seg = other; finished = !first && isStart(seg);
} if (!finished && other) {
finished = !first && isStart(other);
cross = finished || isValid(other, isValid(seg, true));
} }
if (finished) { if (finished) {
seg._visited = true; seg._visited = true;
@ -10157,20 +10164,42 @@ PathItem.inject(new function() {
closed = seg._path._closed; closed = seg._path._closed;
break; break;
} }
if (!isValid(seg)) if (cross && branch) {
break; branches.push(branch);
if (!path) { branch = null;
path = new Path(Item.NO_INSERT); }
start = seg; if (!branch) {
otherStart = other; visited = [];
branch = {
start: path._segments.length,
segment: seg,
handleIn: handleIn,
visited: visited
};
}
if (cross)
seg = other;
if (!isValid(seg)) {
path.removeSegments(branch.start);
for (var j = 0, k = visited.length; j < k; j++) {
visited[j]._visited = false;
}
seg = branch.segment;
handleIn = branch.handleIn;
visited = branch.visited;
branch = branches.pop();
if (!branch) {
console.log('run out of branches, breaking.');
break;
}
} }
var next = seg.getNext(); var next = seg.getNext();
path.add(new Segment(seg._point, handleIn, path.add(new Segment(seg._point, handleIn,
next && seg._handleOut)); next && seg._handleOut));
seg._visited = true; seg._visited = true;
visited.push(seg);
seg = next || seg._path.getFirstSegment(); seg = next || seg._path.getFirstSegment();
handleIn = next && next._handleIn; handleIn = next && next._handleIn;
inter = seg._intersection;
} }
if (finished) { if (finished) {
path.firstSegment.setHandleIn(handleIn); path.firstSegment.setHandleIn(handleIn);

File diff suppressed because one or more lines are too long