@@ -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 */
407400export 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
476469function 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