@antv/g2plot
Version:
An interactive and responsive charting library
54 lines (46 loc) • 1.41 kB
text/typescript
import { IGroup } from '@antv/g-base';
import { registerShape, Types, Util } from '@antv/g2';
import { parsePathString } from '@antv/path-util';
import { Datum, Point } from '../../types';
import { deepAssign } from '../../utils';
import { PATH_FIELD } from './constant';
import { CustomInfo } from './types';
/**
* 获取填充属性
* @param cfg 图形绘制数据
*/
function getFillAttrs(cfg: Types.ShapeInfo) {
// style.fill 优先级更高
return deepAssign({}, cfg.defaultStyle, { fill: cfg.color }, cfg.style);
}
registerShape('schema', 'venn', {
draw(cfg: Types.ShapeInfo & { points: Point[]; nextPoints: Point[] }, container: IGroup) {
const data = cfg.data as Datum;
const segments = parsePathString(data[PATH_FIELD]);
const fillAttrs = getFillAttrs(cfg);
const group = container.addGroup({ name: 'venn-shape' });
group.addShape('path', {
attrs: {
...fillAttrs,
path: segments,
},
name: 'venn-path',
});
const { offsetX, offsetY } = cfg.customInfo as CustomInfo;
const matrix = Util.transform(null, [['t', offsetX, offsetY]]);
group.setMatrix(matrix);
return group;
},
getMarker(markerCfg: Types.ShapeMarkerCfg) {
const { color } = markerCfg;
return {
symbol: 'circle',
style: {
lineWidth: 0,
stroke: color,
fill: color,
r: 4,
},
};
},
});