@antv/g2
Version:
the Grammar of Graphics in Javascript
40 lines (34 loc) • 1.21 kB
text/typescript
import { Coordinate } from '@antv/coord';
import { Vector2 } from '../../../runtime';
import { isCircular } from '../../../utils/coordinate';
import { LabelPosition } from './default';
import { inferOutsideCircularStyle, radiusOf, angleOf } from './outside';
/**
* Spider label transform only suitable for the labels in polar coordinate, labels should distinguish coordinate type.
*/
export function spider(
position: LabelPosition,
points: Vector2[],
value: Record<string, any>,
coordinate: Coordinate,
) {
if (!isCircular(coordinate)) return {};
const { connectorLength, connectorLength2, connectorDistance } = value;
const { ...style }: any = inferOutsideCircularStyle(
'outside',
points,
value,
coordinate,
);
const center = coordinate.getCenter();
const radius = radiusOf(points, value, coordinate);
const angle = angleOf(points, value, coordinate);
const radius1 = radius + connectorLength + connectorLength2;
const sign = Math.sin(angle) > 0 ? 1 : -1;
const newX = center[0] + (radius1 + +connectorDistance) * sign;
const { x: originX } = style;
const dx = newX - originX;
style.x += dx;
style.connectorPoints[0][0] -= dx;
return style;
}