{"version":3,"file":"sector-path-update.js","sourceRoot":"","sources":["../../../src/animate/animation/sector-path-update.ts"],"names":[],"mappings":"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","sourcesContent":["import { getArcParams } from '@antv/g-canvas';\nimport { isNumberEqual, isEqual, isFunction } from '@antv/util';\n\nimport { IShape, PathCommand } from '../../dependents';\nimport { GAnimateCfg } from '../../interface';\nimport { AnimateExtraCfg } from '../interface';\n\nimport { getArcPath, getSectorPath } from '../../util/graphics';\n\nfunction getAngle(startPoint: number[], arcPath: PathCommand) {\n let { startAngle, endAngle } = getArcParams(startPoint, arcPath);\n\n if (!isNumberEqual(startAngle, -Math.PI * 0.5) && startAngle < -Math.PI * 0.5) {\n startAngle += Math.PI * 2;\n }\n if (!isNumberEqual(endAngle, -Math.PI * 0.5) && endAngle < -Math.PI * 0.5) {\n endAngle += Math.PI * 2;\n }\n\n if (arcPath[5] === 0) {\n // 逆时针,需要将 startAngle 和 endAngle 转置,因为 G2 极坐标系为顺时针方向\n [startAngle, endAngle] = [endAngle, startAngle];\n }\n\n if (isNumberEqual(startAngle, Math.PI * 1.5)) {\n startAngle = Math.PI * -0.5;\n }\n\n // 当 startAngle, endAngle 接近相等时,不进行 endAngle = Math.PI * 1.5 防止变化从整个圆开始\n if (isNumberEqual(endAngle, Math.PI * -0.5) && !isNumberEqual(startAngle, endAngle)) {\n endAngle = Math.PI * 1.5;\n }\n\n return {\n startAngle,\n endAngle,\n };\n}\n\nfunction getArcStartPoint(path: PathCommand) {\n let startPoint;\n if (path[0] === 'M' || path[0] === 'L') {\n startPoint = [path[1], path[2]];\n } else if (path[0] === 'a' || path[0] === 'A' || path[0] === 'C') {\n startPoint = [path[path.length - 2], path[path.length - 1]];\n }\n\n return startPoint;\n}\n\n/**\n * path 存在以下情况\n * 1. 饼图不为整圆的 path,命令为 M, L, A, L, Z\n * 2. 饼图为整圆的 path,命令为 M, M, A, A, M, Z\n * 3. 环图不为整圆的 path,命令为 M, A, L, A, L, Z\n * 4. 环图为整圆的 path,命令为 M, A, A, M, A, A, M, Z\n * 5. radial-line, 不为整圆时的 path, 命令为 M, A, A, Z\n * 6. radial-line, 为整圆时的 path,命令为 M, A, A, A, A, Z\n * @param path theta 坐标系下圆弧的 path 命令\n */\nexport function getArcInfo(path: PathCommand[]) {\n let startAngle;\n let endAngle;\n\n const arcPaths = path.filter((command) => {\n return command[0] === 'A' || command[0] === 'a';\n });\n\n if (arcPaths.length === 0) {\n return {\n startAngle: 0,\n endAngle: 0,\n radius: 0,\n innerRadius: 0,\n };\n }\n\n const firstArcPathCommand = arcPaths[0];\n const lastArcPathCommand = arcPaths.length > 1 ? arcPaths[1] : arcPaths[0];\n const firstIndex = path.indexOf(firstArcPathCommand);\n const lastIndex = path.indexOf(lastArcPathCommand);\n const firstStartPoint = getArcStartPoint(path[firstIndex - 1]);\n const lastStartPoint = getArcStartPoint(path[lastIndex - 1]);\n\n const { startAngle: firstStartAngle, endAngle: firstEndAngle } = getAngle(firstStartPoint, firstArcPathCommand);\n const { startAngle: lastStartAngle, endAngle: lastEndAngle } = getAngle(lastStartPoint, lastArcPathCommand);\n\n if (isNumberEqual(firstStartAngle, lastStartAngle) && isNumberEqual(firstEndAngle, lastEndAngle)) {\n startAngle = firstStartAngle;\n endAngle = firstEndAngle;\n } else {\n startAngle = Math.min(firstStartAngle, lastStartAngle);\n endAngle = Math.max(firstEndAngle, lastEndAngle);\n }\n\n let radius = firstArcPathCommand[1];\n let innerRadius = arcPaths[arcPaths.length - 1][1];\n if (radius < innerRadius) {\n [radius, innerRadius] = [innerRadius, radius];\n } else if (radius === innerRadius) {\n innerRadius = 0;\n }\n\n return {\n startAngle,\n endAngle,\n radius,\n innerRadius,\n };\n}\n\n/**\n * @ignore\n * 饼图更新动画\n * @param shape 文本图形\n * @param animateCfg\n * @param cfg\n */\nexport function sectorPathUpdate(shape: IShape, animateCfg: GAnimateCfg, cfg: AnimateExtraCfg) {\n const { toAttrs, coordinate } = cfg;\n const path = (toAttrs as { path: PathCommand[] }).path || [];\n const pathCommands = path.map((command) => command[0]);\n\n if (path.length < 1) return;\n\n const { startAngle: curStartAngle, endAngle: curEndAngle, radius, innerRadius } = getArcInfo(path);\n const { startAngle: preStartAngle, endAngle: preEndAngle } = getArcInfo(shape.attr('path'));\n\n const center = coordinate.getCenter();\n const diffStartAngle = curStartAngle - preStartAngle;\n const diffEndAngle = curEndAngle - preEndAngle;\n // 没有 diff 时直接返回最终 attrs,不需要额外动画\n if (diffStartAngle === 0 && diffEndAngle === 0) {\n shape.attr(toAttrs);\n return;\n }\n\n shape.animate(\n (ratio) => {\n const onFrameStartAngle = preStartAngle + ratio * diffStartAngle;\n const onFrameEndAngle = preEndAngle + ratio * diffEndAngle;\n return {\n ...toAttrs,\n path:\n // hack, 兼容 /examples/bar/basic/demo/radial-line.ts 动画\n isEqual(pathCommands, ['M', 'A', 'A', 'Z'])\n ? getArcPath(center.x, center.y, radius, onFrameStartAngle, onFrameEndAngle)\n : getSectorPath(center.x, center.y, radius, onFrameStartAngle, onFrameEndAngle, innerRadius),\n };\n },\n {\n ...animateCfg,\n callback: () => {\n // 将 path 保持原始态,否则会影响 setState() 的动画\n shape.attr('path', path);\n isFunction(animateCfg.callback) && animateCfg.callback();\n },\n }\n );\n}\n"]}