1 line
10 KiB
Plaintext
1 line
10 KiB
Plaintext
{"version":3,"file":"polar.js","sourceRoot":"","sources":["../../../src/geometry/label/polar.ts"],"names":[],"mappings":"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","sourcesContent":["import { each, isArray } from '@antv/util';\nimport { MappingDatum, Point } from '../../interface';\nimport { getDistanceToCenter } from '../../util/coordinate';\nimport { getAngleByPoint } from '../../util/coordinate';\nimport GeometryLabel from './base';\nimport { LabelCfg, LabelItem, LabelPointCfg } from './interface';\n\nconst HALF_PI = Math.PI / 2;\n\n/**\n * 极坐标下的图形 label\n */\nexport default class PolarLabel extends GeometryLabel {\n /**\n * @override\n * 获取文本的对齐方式\n * @param point\n */\n protected getLabelAlign(point: LabelItem) {\n const coordinate = this.getCoordinate();\n let align;\n if (point.labelEmit) {\n align = (point.angle <= Math.PI / 2 && point.angle >= -Math.PI / 2) ? 'left' : 'right';\n } else if (!coordinate.isTransposed) {\n align = 'center';\n } else {\n const center = coordinate.getCenter();\n const offset = this.getDefaultOffset(point.offset);\n if (Math.abs(point.x - center.x) < 1) {\n align = 'center';\n } else if (point.angle > Math.PI || point.angle <= 0) {\n align = offset > 0 ? 'left' : 'right';\n } else {\n align = offset > 0 ? 'right' : 'left';\n }\n }\n return align;\n }\n\n /**\n * @override\n * 获取 label 的位置\n * @param labelCfg\n * @param mappingData\n * @param index\n */\n protected getLabelPoint(labelCfg: LabelCfg, mappingData: MappingDatum, index: number): LabelPointCfg {\n let factor = 1;\n let arcPoint;\n const content = labelCfg.content[index];\n if (this.isToMiddle(mappingData)) {\n arcPoint = this.getMiddlePoint(mappingData.points as Point[]);\n } else {\n if (labelCfg.content.length === 1 && index === 0) {\n index = 1;\n } else if (index === 0) {\n factor = -1;\n }\n arcPoint = this.getArcPoint(mappingData, index);\n }\n\n const offset = this.getDefaultOffset(labelCfg.offset) * factor;\n const middleAngle = this.getPointAngle(arcPoint);\n const isLabelEmit = labelCfg.labelEmit;\n const labelPositionCfg: LabelPointCfg = this.getCirclePoint(middleAngle, offset, arcPoint, isLabelEmit);\n if (labelPositionCfg.r === 0) {\n // 如果文本位置位于圆心,则不展示\n labelPositionCfg.content = '';\n } else {\n labelPositionCfg.content = content;\n labelPositionCfg.angle = middleAngle;\n labelPositionCfg.color = mappingData.color;\n }\n\n labelPositionCfg.rotate = labelCfg.autoRotate\n ? this.getLabelRotate(middleAngle, offset, isLabelEmit)\n : labelCfg.rotate;\n labelPositionCfg.start = {\n x: arcPoint.x,\n y: arcPoint.y,\n };\n return labelPositionCfg;\n }\n\n /**\n * 获取圆弧的位置\n */\n protected getArcPoint(mappingData: MappingDatum, index: number = 0): Point {\n if (!isArray(mappingData.x) && !isArray(mappingData.y)) {\n return {\n x: mappingData.x,\n y: mappingData.y,\n };\n }\n\n return {\n x: isArray(mappingData.x) ? mappingData.x[index] : mappingData.x,\n y: isArray(mappingData.y) ? mappingData.y[index] : mappingData.y,\n };\n }\n\n /**\n * 计算坐标线点在极坐标系下角度\n * @param point\n */\n protected getPointAngle(point: Point): number {\n return getAngleByPoint(this.getCoordinate(), point);\n }\n\n /**\n * 获取坐标点与圆心形成的圆的位置信息\n * @param angle\n * @param offset\n * @param point\n * @param isLabelEmit\n */\n protected getCirclePoint(angle: number, offset: number, point: Point, isLabelEmit: boolean) {\n const coordinate = this.getCoordinate();\n const center = coordinate.getCenter();\n let r = getDistanceToCenter(coordinate, point);\n if (r === 0) {\n return {\n ...center,\n r,\n };\n }\n\n let labelAngle = angle;\n if (coordinate.isTransposed && r > offset && !isLabelEmit) {\n const appendAngle = Math.asin(offset / (2 * r));\n labelAngle = angle + appendAngle * 2;\n } else {\n r = r + offset;\n }\n\n return {\n x: center.x + r * Math.cos(labelAngle),\n y: center.y + r * Math.sin(labelAngle),\n r,\n };\n }\n\n /**\n * 获取 label 的旋转角度\n * @param angle\n * @param offset\n * @param isLabelEmit\n */\n protected getLabelRotate(angle: number, offset: number, isLabelEmit: boolean) {\n let rotate = angle + HALF_PI;\n if (isLabelEmit) {\n rotate -= HALF_PI;\n }\n if (rotate) {\n if (rotate > HALF_PI) {\n rotate = rotate - Math.PI;\n } else if (rotate < -HALF_PI) {\n rotate = rotate + Math.PI;\n }\n }\n return rotate;\n }\n\n // 获取中心的位置\n private getMiddlePoint(points: Point[]) {\n const coordinate = this.getCoordinate();\n const count = points.length;\n let middlePoint = {\n x: 0,\n y: 0,\n };\n each(points, (point: Point) => {\n middlePoint.x += point.x;\n middlePoint.y += point.y;\n });\n middlePoint.x /= count;\n middlePoint.y /= count;\n\n middlePoint = coordinate.convert(middlePoint);\n return middlePoint;\n }\n\n // 是否居中\n private isToMiddle(mappingData: MappingDatum) {\n return (mappingData.x as number[]).length > 2;\n }\n}\n"]} |