| import PathProxy from '../core/PathProxy.js'; | 
| import { applyTransform as v2ApplyTransform } from '../core/vector.js'; | 
| var CMD = PathProxy.CMD; | 
| var points = [[], [], []]; | 
| var mathSqrt = Math.sqrt; | 
| var mathAtan2 = Math.atan2; | 
| export default function transformPath(path, m) { | 
|     if (!m) { | 
|         return; | 
|     } | 
|     var data = path.data; | 
|     var len = path.len(); | 
|     var cmd; | 
|     var nPoint; | 
|     var i; | 
|     var j; | 
|     var k; | 
|     var p; | 
|     var M = CMD.M; | 
|     var C = CMD.C; | 
|     var L = CMD.L; | 
|     var R = CMD.R; | 
|     var A = CMD.A; | 
|     var Q = CMD.Q; | 
|     for (i = 0, j = 0; i < len;) { | 
|         cmd = data[i++]; | 
|         j = i; | 
|         nPoint = 0; | 
|         switch (cmd) { | 
|             case M: | 
|                 nPoint = 1; | 
|                 break; | 
|             case L: | 
|                 nPoint = 1; | 
|                 break; | 
|             case C: | 
|                 nPoint = 3; | 
|                 break; | 
|             case Q: | 
|                 nPoint = 2; | 
|                 break; | 
|             case A: | 
|                 var x = m[4]; | 
|                 var y = m[5]; | 
|                 var sx = mathSqrt(m[0] * m[0] + m[1] * m[1]); | 
|                 var sy = mathSqrt(m[2] * m[2] + m[3] * m[3]); | 
|                 var angle = mathAtan2(-m[1] / sy, m[0] / sx); | 
|                 data[i] *= sx; | 
|                 data[i++] += x; | 
|                 data[i] *= sy; | 
|                 data[i++] += y; | 
|                 data[i++] *= sx; | 
|                 data[i++] *= sy; | 
|                 data[i++] += angle; | 
|                 data[i++] += angle; | 
|                 i += 2; | 
|                 j = i; | 
|                 break; | 
|             case R: | 
|                 p[0] = data[i++]; | 
|                 p[1] = data[i++]; | 
|                 v2ApplyTransform(p, p, m); | 
|                 data[j++] = p[0]; | 
|                 data[j++] = p[1]; | 
|                 p[0] += data[i++]; | 
|                 p[1] += data[i++]; | 
|                 v2ApplyTransform(p, p, m); | 
|                 data[j++] = p[0]; | 
|                 data[j++] = p[1]; | 
|         } | 
|         for (k = 0; k < nPoint; k++) { | 
|             var p_1 = points[k]; | 
|             p_1[0] = data[i++]; | 
|             p_1[1] = data[i++]; | 
|             v2ApplyTransform(p_1, p_1, m); | 
|             data[j++] = p_1[0]; | 
|             data[j++] = p_1[1]; | 
|         } | 
|     } | 
|     path.increaseVersion(); | 
| } |