UNPKG

@antv/g6

Version:

A Graph Visualization Framework in JavaScript

62 lines (56 loc) 2.14 kB
import type { DisplayObjectConfig } from '@antv/g'; import type { PathArray } from '@antv/util'; import type { Point } from '../../types'; import { getCurveControlPoint, getQuadraticPath } from '../../utils/edge'; import { mergeOptions } from '../../utils/style'; import type { BaseEdgeStyleProps } from './base-edge'; import { BaseEdge } from './base-edge'; /** * <zh/> 二次贝塞尔曲线样式配置项 * * <en/> Quadratic Bezier curve style properties */ export interface QuadraticStyleProps extends BaseEdgeStyleProps { /** * <zh/> 控制点,用于定义曲线的形状。如果不指定,将会通过`curveOffset`和`curvePosition`来计算控制点 * * <en/> Control point. Used to define the shape of the curve. If not specified, it will be calculated using `curveOffset` and `curvePosition`. */ controlPoint?: Point; /** * <zh/> 控制点在两端点连线上的相对位置,范围为`0-1` * * <en/> The relative position of the control point on the line, ranging from `0-1` * @defaultValue 0.5 */ curvePosition?: number; /** * <zh/> 控制点距离两端点连线的距离,可理解为控制边的弯曲程度 * * <en/> The distance of the control point from the line * @defaultValue 30 */ curveOffset?: number; } type ParsedQuadraticStyleProps = Required<QuadraticStyleProps>; /** * <zh/> 二次贝塞尔曲线 * * <en/> Quadratic Bezier curve */ export class Quadratic extends BaseEdge { static defaultStyleProps: Partial<QuadraticStyleProps> = { curvePosition: 0.5, curveOffset: 30, }; constructor(options: DisplayObjectConfig<QuadraticStyleProps>) { super(mergeOptions({ style: Quadratic.defaultStyleProps }, options)); } protected getKeyPath(attributes: ParsedQuadraticStyleProps): PathArray { const { curvePosition, curveOffset } = attributes; const [sourcePoint, targetPoint] = this.getEndpoints(attributes); const controlPoint = attributes.controlPoint || getCurveControlPoint(sourcePoint, targetPoint, curvePosition, curveOffset); return getQuadraticPath(sourcePoint, targetPoint, controlPoint); } }