@antv/g6
Version:
A Graph Visualization Framework in JavaScript
54 lines (47 loc) • 1.59 kB
text/typescript
import type { DisplayObjectConfig, RectStyleProps as GRectStyleProps, Group } from '@antv/g';
import { Rect as GRect } from '@antv/g';
import { ICON_SIZE_RATIO } from '../../constants/element';
import type { IconStyleProps } from '../shapes';
import type { BaseNodeStyleProps } from './base-node';
import { BaseNode } from './base-node';
/**
* <zh/> 矩形节点样式配置项
*
* <en/> Rect node style props
*/
export interface RectStyleProps extends BaseNodeStyleProps {}
type ParsedRectStyleProps = Required<RectStyleProps>;
/**
* <zh/> 矩形节点
*
* <en/> Rect node
*/
export class Rect extends BaseNode<RectStyleProps> {
constructor(options: DisplayObjectConfig<RectStyleProps>) {
super(options);
}
protected getKeyStyle(attributes: ParsedRectStyleProps): GRectStyleProps {
const [width, height] = this.getSize(attributes);
return {
...super.getKeyStyle(attributes),
width,
height,
x: -width / 2,
y: -height / 2,
};
}
protected getIconStyle(attributes: ParsedRectStyleProps): false | IconStyleProps {
const style = super.getIconStyle(attributes);
const { width, height } = this.getShape<GRect>('key').attributes;
return style
? ({
width: (width as number) * ICON_SIZE_RATIO,
height: (height as number) * ICON_SIZE_RATIO,
...style,
} as IconStyleProps)
: false;
}
protected drawKeyShape(attributes: ParsedRectStyleProps, container: Group): GRect | undefined {
return this.upsert('key', GRect, this.getKeyStyle(attributes), container);
}
}