{"version":3,"file":"SVGToGraphicsPath.mjs","sources":["../../../../../src/scene/graphics/shared/svg/SVGToGraphicsPath.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport parse from 'parse-svg-path';\nimport { warn } from '../../../../utils/logging/warn';\n\nimport type { GraphicsPath } from '../path/GraphicsPath';\n\ninterface SubPath\n{\n    startX: number;\n    startY: number;\n}\n\n// TODO optimise and cache the paths?\nexport function SVGToGraphicsPath(svgPath: string, path: GraphicsPath): GraphicsPath\n{\n    const commands = parse(svgPath);\n\n    const subpaths: SubPath[] = [];\n    let currentSubPath: SubPath | null = null;\n\n    let lastX = 0;\n    let lastY = 0;\n\n    for (let i = 0; i < commands.length; i++)\n    {\n        const command = commands[i];\n        const type = command[0];\n        const data = command; // alias for 1-based referencing\n\n        switch (type)\n        {\n            case 'M':\n                lastX = data[1];\n                lastY = data[2];\n\n                path.moveTo(lastX, lastY);\n                break;\n            case 'm':\n\n                lastX += data[1];\n                lastY += data[2];\n\n                path.moveTo(lastX, lastY);\n                break;\n            case 'H':\n                lastX = data[1];\n\n                path.lineTo(lastX, lastY);\n                break;\n            case 'h':\n                lastX += data[1];\n\n                path.lineTo(lastX, lastY);\n                break;\n            case 'V':\n                lastY = data[1];\n\n                path.lineTo(lastX, lastY);\n                break;\n            case 'v':\n                lastY += data[1];\n\n                path.lineTo(lastX, lastY);\n                break;\n            case 'L':\n                lastX = data[1];\n                lastY = data[2];\n\n                path.lineTo(lastX, lastY);\n                break;\n            case 'l':\n                lastX += data[1];\n                lastY += data[2];\n\n                path.lineTo(lastX, lastY);\n                break;\n            case 'C':\n\n                lastX = data[5];\n                lastY = data[6];\n\n                path.bezierCurveTo(\n                    data[1], data[2],\n                    data[3], data[4],\n                    lastX, lastY\n                );\n                break;\n            case 'c':\n                path.bezierCurveTo(\n                    lastX + data[1], lastY + data[2],\n                    lastX + data[3], lastY + data[4],\n                    lastX + data[5], lastY + data[6]\n                );\n\n                lastX += data[5];\n                lastY += data[6];\n                break;\n            case 'S':\n                lastX = data[3];\n                lastY = data[4];\n\n                path.bezierCurveToShort(\n                    data[1], data[2],\n                    lastX, lastY\n                );\n                break;\n            case 's':\n                path.bezierCurveToShort(\n                    lastX + data[1], lastY + data[2],\n                    lastX + data[3], lastY + data[4],\n                );\n\n                lastX += data[3];\n                lastY += data[4];\n                break;\n            case 'Q':\n                lastX = data[3];\n                lastY = data[4];\n\n                path.quadraticCurveTo(\n                    data[1], data[2],\n                    lastX, lastY\n                );\n                break;\n            case 'q':\n                path.quadraticCurveTo(\n                    lastX + data[1], lastY + data[2],\n                    lastX + data[3], lastY + data[4]\n                );\n\n                lastX += data[3];\n                lastY += data[4];\n                break;\n            case 'T':\n                lastX = data[1];\n                lastY = data[2];\n\n                path.quadraticCurveToShort(\n                    lastX, lastY\n                );\n                break;\n            case 't':\n                lastX += data[1];\n                lastY += data[2];\n\n                path.quadraticCurveToShort(\n                    lastX, lastY\n                );\n                break;\n            case 'A':\n                lastX = data[6];\n                lastY = data[7];\n\n                path.arcToSvg(\n                    data[1],\n                    data[2],\n                    data[3],\n                    data[4],\n                    data[5],\n                    lastX, lastY\n                );\n                break;\n            case 'a':\n                lastX += data[6];\n                lastY += data[7];\n\n                path.arcToSvg(\n                    data[1],\n                    data[2],\n                    data[3],\n                    data[4],\n                    data[5],\n                    lastX, lastY\n                );\n                break;\n            case 'Z':\n            case 'z':\n                path.closePath();\n                if (subpaths.length > 0)\n                {\n                    currentSubPath = subpaths.pop();\n                    if (currentSubPath)\n                    {\n                        lastX = currentSubPath.startX;\n                        lastY = currentSubPath.startY;\n                    }\n                    else\n                    {\n                        lastX = 0;\n                        lastY = 0;\n                    }\n                }\n                currentSubPath = null;\n                break;\n            default:\n                // #if _DEBUG\n                warn(`Unknown SVG path command: ${type}`);\n                // #endif\n        }\n\n        if (type !== 'Z' && type !== 'z')\n        {\n            if (currentSubPath === null)\n            {\n                currentSubPath = { startX: lastX, startY: lastY };\n                subpaths.push(currentSubPath);\n            }\n        }\n    }\n\n    return path;\n}\n"],"names":[],"mappings":"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"}