mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-01 02:38:43 -05:00
Optimise Path#getBounds() by not relying on Point#add() but instead doing the calculations in direct math in the per-coordinate loop.
This commit is contained in:
parent
6c4121db4b
commit
c89d04dca6
1 changed files with 7 additions and 16 deletions
|
@ -34,27 +34,19 @@ Path = PathItem.extend({
|
||||||
// Code ported from:
|
// Code ported from:
|
||||||
// http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html
|
// http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html
|
||||||
var segments = this._segments;
|
var segments = this._segments;
|
||||||
var first = segments[0];
|
var first = segments[0], prev = first;
|
||||||
if (!first)
|
if (!first)
|
||||||
return null;
|
return null;
|
||||||
var p0 = first.point, prev = first;
|
var min = first.point.clone(), max = min.clone();
|
||||||
var min = {
|
|
||||||
x: p0.x,
|
|
||||||
y: p0.y
|
|
||||||
};
|
|
||||||
var max = {
|
|
||||||
x: p0.x,
|
|
||||||
y: p0.y
|
|
||||||
};
|
|
||||||
var coords = ['x', 'y'];
|
var coords = ['x', 'y'];
|
||||||
function processSegment(segment) {
|
function processSegment(segment) {
|
||||||
var p1 = p0.add(prev.handleOut);
|
|
||||||
var p3 = segment.point;
|
|
||||||
var p2 = p3.add(segment.handleIn);
|
|
||||||
for (var i = 0; i < 2; i++) {
|
for (var i = 0; i < 2; i++) {
|
||||||
var coord = coords[i];
|
var coord = coords[i];
|
||||||
var v0 = p0[coord], v1 = p1[coord],
|
|
||||||
v2 = p2[coord], v3 = p3[coord];
|
var v0 = prev.point[coord],
|
||||||
|
v1 = v0 + prev.handleOut[coord],
|
||||||
|
v3 = segment.point[coord],
|
||||||
|
v2 = v3 + segment.handleIn[coord];
|
||||||
|
|
||||||
function bounds(value) {
|
function bounds(value) {
|
||||||
if (value < min[coord]) {
|
if (value < min[coord]) {
|
||||||
|
@ -96,7 +88,6 @@ Path = PathItem.extend({
|
||||||
if (0 < t2 && t2 < 1)
|
if (0 < t2 && t2 < 1)
|
||||||
bounds(f(t2));
|
bounds(f(t2));
|
||||||
}
|
}
|
||||||
p0 = p3;
|
|
||||||
prev = segment;
|
prev = segment;
|
||||||
}
|
}
|
||||||
for (var i = 1, l = segments.length; i < l; i++)
|
for (var i = 1, l = segments.length; i < l; i++)
|
||||||
|
|
Loading…
Reference in a new issue