Skip to content

Commit f5455f9

Browse files
committed
refactor(): pathToCurve pathToAbsolute parsePathString
extract caching to `getPathCurve`
1 parent 74c7a5b commit f5455f9

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
}
@@ -407,8 +400,8 @@ function findBezierIntersections(bez1, bez2, justCount) {
407400
* @return {Array<Intersection>|Number}
408401
*/
409402
export default function findPathIntersections(path1, path2, justCount) {
410-
path1 = pathToCurve(path1);
411-
path2 = pathToCurve(path2);
403+
path1 = getPathCurve(path1);
404+
path2 = getPathCurve(path2);
412405

413406
var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,
414407
res = justCount ? 0 : [];
@@ -476,15 +469,6 @@ export default function findPathIntersections(path1, path2, justCount) {
476469

477470

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

489473
if (!pathArray || !pathArray.length) {
490474
return [ [ 'M', 0, 0 ] ];
@@ -567,7 +551,6 @@ function pathToAbsolute(pathArray) {
567551
}
568552

569553
res.toString = pathToString;
570-
pth.abs = pathClone(res);
571554

572555
return res;
573556
}
@@ -788,16 +771,39 @@ function curveBBox(x0, y0, x1, y1, x2, y2, x3, y3) {
788771
};
789772
}
790773

791-
function pathToCurve(path) {
774+
/**
775+
* Handles caches
776+
*/
777+
function getPathCurve(path) {
792778

793-
var pth = paths(path);
779+
const pth = paths(path);
794780

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

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

924-
// cache curve
925-
pth.curve = pathClone(curvedPath);
926-
927930
return curvedPath;
928931
}

0 commit comments

Comments
 (0)