Skip to content

Commit 42b328c

Browse files
committed
refactor(): pathToCurve pathToAbsolute parsePathString
extract caching to `getPathCurve`
1 parent fd0ba4d commit 42b328c

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

intersect.js

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,6 @@ function parsePathString(pathString) {
7575
return null;
7676
}
7777

78-
var pth = paths(pathString);
79-
80-
if (pth.arr) {
81-
return clone(pth.arr);
82-
}
83-
8478
var paramCounts = { a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0 },
8579
data = [];
8680

@@ -114,7 +108,6 @@ function parsePathString(pathString) {
114108
}
115109

116110
data.toString = paths.toString;
117-
pth.arr = clone(data);
118111

119112
return data;
120113
}
@@ -405,8 +398,8 @@ function findBezierIntersections(bez1, bez2, justCount) {
405398
* @return {Array<Intersection>|Number}
406399
*/
407400
export default function findPathIntersections(path1, path2, justCount) {
408-
path1 = pathToCurve(path1);
409-
path2 = pathToCurve(path2);
401+
path1 = getPathCurve(path1);
402+
path2 = getPathCurve(path2);
410403

411404
var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,
412405
res = justCount ? 0 : [];
@@ -474,15 +467,6 @@ export default function findPathIntersections(path1, path2, justCount) {
474467

475468

476469
function pathToAbsolute(pathArray) {
477-
var pth = paths(pathArray);
478-
479-
if (pth.abs) {
480-
return pathClone(pth.abs);
481-
}
482-
483-
if (!isArray(pathArray) || !isArray(pathArray && pathArray[0])) { // rough assumption
484-
pathArray = parsePathString(pathArray);
485-
}
486470

487471
if (!pathArray || !pathArray.length) {
488472
return [ [ 'M', 0, 0 ] ];
@@ -565,7 +549,6 @@ function pathToAbsolute(pathArray) {
565549
}
566550

567551
res.toString = pathToString;
568-
pth.abs = pathClone(res);
569552

570553
return res;
571554
}
@@ -786,16 +769,39 @@ function curveBBox(x0, y0, x1, y1, x2, y2, x3, y3) {
786769
};
787770
}
788771

789-
function pathToCurve(path) {
772+
/**
773+
* Handles caches
774+
*/
775+
function getPathCurve(path) {
790776

791-
var pth = paths(path);
777+
const pth = paths(path);
792778

793779
// return cached curve, if existing
794780
if (pth.curve) {
795781
return pathClone(pth.curve);
796782
}
797783

798-
var curvedPath = pathToAbsolute(path),
784+
// retrieve abs path OR create and cache if non existing
785+
const abs = pth.abs ||
786+
(pth.abs = pathToAbsolute(
787+
788+
// retrieve parsed path OR create and cache if non existing
789+
pth.arr ||
790+
(pth.arr = (
791+
792+
// rough assumption
793+
(!isArray(path) || !isArray(path && path[0]))) ?
794+
parsePathString(path) :
795+
path)
796+
));
797+
798+
// cache curve
799+
return pathClone(pth.curve = pathToCurve(abs));
800+
}
801+
802+
function pathToCurve(absPath) {
803+
804+
var curvedPath = pathClone(absPath),
799805
attrs = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null },
800806
processPath = function(path, d, pathCommand) {
801807
var nx, ny;
@@ -919,8 +925,5 @@ function pathToCurve(path) {
919925
attrs.by = toFloat(seg[seglen - 3]) || attrs.y;
920926
}
921927

922-
// cache curve
923-
pth.curve = pathClone(curvedPath);
924-
925928
return curvedPath;
926929
}

0 commit comments

Comments
 (0)