@antv/g2
Version:
the Grammar of Graphics in Javascript
50 lines (44 loc) • 1.39 kB
text/typescript
import { isArray } from '@antv/util';
import { IGroup } from '../../../dependents';
import { Point, ShapeInfo, ShapeMarkerCfg, ShapePoint } from '../../../interface';
import { registerShape, registerShapeFactory } from '../base';
import { getShapeAttrs } from './util';
const AreaShapeFactory = registerShapeFactory('area', {
defaultShapeType: 'area',
getDefaultPoints(pointInfo: ShapePoint): Point[] {
// area 基本标记的绘制需要获取上下两边的顶点
const { x, y0 } = pointInfo;
const y = isArray(pointInfo.y) ? pointInfo.y : [y0, pointInfo.y];
return y.map((yItem: number) => {
return {
x: x as number,
y: yItem,
};
});
},
});
// Area 几何标记默认的 shape:填充的区域图
registerShape('area', 'area', {
draw(cfg: ShapeInfo, container: IGroup) {
const attrs = getShapeAttrs(cfg, false, false, this);
const shape = container.addShape({
type: 'path',
attrs,
name: 'area',
});
return shape;
},
getMarker(markerCfg: ShapeMarkerCfg) {
const { color } = markerCfg;
return {
symbol: (x: number, y: number, r: number = 5.5) => {
return [['M', x - r, y - 4], ['L', x + r, y - 4], ['L', x + r, y + 4], ['L', x - r, y + 4], ['Z']];
},
style: {
r: 5,
fill: color,
},
};
},
});
export default AreaShapeFactory;