@@ -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 */
409402export 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
478471function 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