UNPKG

13.3 kBSource Map (JSON)View Raw
1{"version":3,"file":"graphics.js","sourceRoot":"","sources":["../../src/util/graphics.ts"],"names":[],"mappings":"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","sourcesContent":["import { BBox } from '@antv/g-svg';\nimport { each, isEmpty, isNumber, isNumberEqual } from '@antv/util';\nimport { Coordinate, IShape, Point } from '../dependents';\nimport { ShapeInfo } from '../interface';\n\n// 获取图形的包围盒\nfunction getPointsBox(points) {\n if (isEmpty(points)) {\n return null;\n }\n\n let minX = points[0].x;\n let maxX = points[0].x;\n let minY = points[0].y;\n let maxY = points[0].y;\n each(points, (point) => {\n minX = minX > point.x ? point.x : minX;\n maxX = maxX < point.x ? point.x : maxX;\n minY = minY > point.y ? point.y : minY;\n maxY = maxY < point.y ? point.y : maxY;\n });\n\n return {\n minX,\n maxX,\n minY,\n maxY,\n centerX: (minX + maxX) / 2,\n centerY: (minY + maxY) / 2,\n };\n}\n\n/**\n * @ignore\n * 根据弧度计算极坐标系下的坐标点\n * @param centerX\n * @param centerY\n * @param radius\n * @param angleInRadian\n * @returns\n */\nexport function polarToCartesian(centerX: number, centerY: number, radius: number, angleInRadian: number) {\n return {\n x: centerX + radius * Math.cos(angleInRadian),\n y: centerY + radius * Math.sin(angleInRadian),\n };\n}\n\n/**\n * @ignore\n * 根据起始角度计算绘制扇形的 path\n * @param centerX\n * @param centerY\n * @param radius\n * @param startAngleInRadian\n * @param endAngleInRadian\n * @returns\n */\nexport function getSectorPath(\n centerX: number,\n centerY: number,\n radius: number,\n startAngleInRadian: number,\n endAngleInRadian: number,\n innerRadius: number = 0\n) {\n const start = polarToCartesian(centerX, centerY, radius, startAngleInRadian);\n const end = polarToCartesian(centerX, centerY, radius, endAngleInRadian);\n\n const innerStart = polarToCartesian(centerX, centerY, innerRadius, startAngleInRadian);\n const innerEnd = polarToCartesian(centerX, centerY, innerRadius, endAngleInRadian);\n\n if (endAngleInRadian - startAngleInRadian === Math.PI * 2) {\n // 整个圆是分割成两个圆\n const middlePoint = polarToCartesian(centerX, centerY, radius, startAngleInRadian + Math.PI);\n const innerMiddlePoint = polarToCartesian(centerX, centerY, innerRadius, startAngleInRadian + Math.PI);\n const circlePathCommands = [\n ['M', start.x, start.y],\n ['A', radius, radius, 0, 1, 1, middlePoint.x, middlePoint.y],\n ['A', radius, radius, 0, 1, 1, end.x, end.y],\n ['M', innerStart.x, innerStart.y],\n ];\n if (innerRadius) {\n circlePathCommands.push(['A', innerRadius, innerRadius, 0, 1, 0, innerMiddlePoint.x, innerMiddlePoint.y]);\n circlePathCommands.push(['A', innerRadius, innerRadius, 0, 1, 0, innerEnd.x, innerEnd.y]);\n }\n\n circlePathCommands.push(['M', start.x, start.y]);\n circlePathCommands.push(['Z']);\n\n return circlePathCommands;\n }\n\n const arcSweep = endAngleInRadian - startAngleInRadian <= Math.PI ? 0 : 1;\n const sectorPathCommands = [\n ['M', start.x, start.y],\n ['A', radius, radius, 0, arcSweep, 1, end.x, end.y],\n ['L', innerEnd.x, innerEnd.y],\n ];\n if (innerRadius) {\n sectorPathCommands.push(['A', innerRadius, innerRadius, 0, arcSweep, 0, innerStart.x, innerStart.y]);\n }\n sectorPathCommands.push(['L', start.x, start.y]);\n sectorPathCommands.push(['Z']);\n\n return sectorPathCommands;\n}\n\n/**\n * @ignore\n * Gets arc path\n * @param centerX\n * @param centerY\n * @param radius\n * @param startAngleInRadian\n * @param endAngleInRadian\n * @returns\n */\nexport function getArcPath(\n centerX: number,\n centerY: number,\n radius: number,\n startAngleInRadian: number,\n endAngleInRadian: number\n) {\n const start = polarToCartesian(centerX, centerY, radius, startAngleInRadian);\n const end = polarToCartesian(centerX, centerY, radius, endAngleInRadian);\n\n if (isNumberEqual(endAngleInRadian - startAngleInRadian, Math.PI * 2)) {\n const middlePoint = polarToCartesian(centerX, centerY, radius, startAngleInRadian + Math.PI);\n return [\n ['M', start.x, start.y],\n ['A', radius, radius, 0, 1, 1, middlePoint.x, middlePoint.y],\n ['A', radius, radius, 0, 1, 1, start.x, start.y],\n ['A', radius, radius, 0, 1, 0, middlePoint.x, middlePoint.y],\n ['A', radius, radius, 0, 1, 0, start.x, start.y],\n ['Z'],\n ];\n }\n const arcSweep = endAngleInRadian - startAngleInRadian <= Math.PI ? 0 : 1;\n return [\n ['M', start.x, start.y],\n ['A', radius, radius, 0, arcSweep, 1, end.x, end.y],\n ];\n}\n\n/**\n * @ignore\n * 从数据模型中的 points 换算角度\n * @param shapeModel\n * @param coordinate\n * @returns\n */\nexport function getAngle(shapeModel: ShapeInfo, coordinate: Coordinate) {\n const points = shapeModel.points;\n const box = getPointsBox(points);\n let endAngle;\n let startAngle;\n const { startAngle: coordStartAngle, endAngle: coordEndAngle } = coordinate;\n const diffAngle = coordEndAngle - coordStartAngle;\n\n if (coordinate.isTransposed) {\n endAngle = box.maxY * diffAngle;\n startAngle = box.minY * diffAngle;\n } else {\n endAngle = box.maxX * diffAngle;\n startAngle = box.minX * diffAngle;\n }\n endAngle += coordStartAngle;\n startAngle += coordStartAngle;\n return {\n startAngle,\n endAngle,\n };\n}\n\n/**\n * @ignore\n * 计算多边形重心: https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n */\nexport function getPolygonCentroid(xs: number | number[], ys: number | number[]) {\n if (isNumber(xs) && isNumber(ys)) {\n // 普通色块图,xs 和 ys 是数值\n return [xs, ys];\n }\n let i = -1;\n let x = 0;\n let y = 0;\n let former;\n let current = (xs as number[]).length - 1;\n let diff;\n let k = 0;\n while (++i < (xs as number[]).length) {\n former = current;\n current = i;\n k += diff = xs[former] * ys[current] - xs[current] * ys[former];\n x += (xs[former] + xs[current]) * diff;\n y += (ys[former] + ys[current]) * diff;\n }\n k *= 3;\n return [x / k, y / k];\n}\n\n/**\n * @ignore\n * 获取需要替换的属性,如果原先图形元素存在,而新图形不存在,则设置 undefined\n */\nexport function getReplaceAttrs(sourceShape: IShape, targetShape: IShape) {\n const originAttrs = sourceShape.attr();\n const newAttrs = targetShape.attr();\n each(originAttrs, (v, k) => {\n if (newAttrs[k] === undefined) {\n newAttrs[k] = undefined;\n }\n });\n return newAttrs;\n}\n"]}
\No newline at end of file