NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g2/esm/component/labels.js.map
2023-09-14 14:47:11 +08:00

1 line
18 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/component/labels.ts"],"names":[],"mappings":"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","sourcesContent":["import { deepMix, each, get, isArray } from '@antv/util';\n\nimport { BBox, IGroup, IShape } from '../dependents';\nimport { LabelItem } from '../geometry/label/interface';\nimport { AnimateOption, GeometryLabelLayoutCfg } from '../interface';\n\nimport { doAnimate } from '../animate';\nimport { getGeometryLabelLayout } from '../geometry/label';\nimport { getReplaceAttrs } from '../util/graphics';\nimport { rotate, translate } from '../util/transform';\n\n/**\n * Labels 实例创建时,传入构造函数的参数定义\n */\nexport interface LabelsGroupCfg {\n /** label 容器 */\n container: IGroup;\n /** label 布局配置 */\n layout?: GeometryLabelLayoutCfg | GeometryLabelLayoutCfg[];\n}\n\n/**\n * Geometry labels 渲染组件\n */\nexport default class Labels {\n /** 用于指定 labels 布局的类型 */\n public layout: GeometryLabelLayoutCfg | GeometryLabelLayoutCfg[];\n /** 图形容器 */\n public container: IGroup;\n /** 动画配置 */\n public animate: AnimateOption | false;\n /** label 绘制的区域 */\n public region: BBox;\n\n /** 存储当前 shape 的映射表,键值为 shape id */\n public shapesMap: Record<string, IGroup> = {};\n private lastShapesMap: Record<string, IGroup> = {};\n\n constructor(cfg: LabelsGroupCfg) {\n const { layout, container } = cfg;\n\n this.layout = layout;\n this.container = container;\n }\n\n /**\n * 渲染文本\n */\n public render(items: LabelItem[], shapes: Record<string, IShape | IGroup>, isUpdate: boolean = false) {\n this.shapesMap = {};\n const container = this.container;\n const offscreenGroup = this.createOffscreenGroup(); // 创建虚拟分组\n if (items.length) {\n // 如果 items 空的话就不进行绘制调整操作\n // step 1: 在虚拟 group 中创建 shapes\n for (const item of items) {\n if (item) {\n this.renderLabel(item, offscreenGroup);\n }\n }\n // step 2: 根据布局,调整 labels\n this.doLayout(items, shapes);\n // step 3: 绘制 labelLine\n this.renderLabelLine(items);\n // step 4: 根据用户设置的偏移量调整 label\n this.adjustLabel(items);\n }\n\n // 进行添加、更新、销毁操作\n const lastShapesMap = this.lastShapesMap;\n const shapesMap = this.shapesMap;\n each(shapesMap, (shape, id) => {\n if (shape.destroyed) {\n // label 在布局调整环节被删除了doLayout\n delete shapesMap[id];\n } else {\n if (lastShapesMap[id]) {\n // 图形发生更新\n const data = shape.get('data');\n const origin = shape.get('origin');\n const coordinate = shape.get('coordinate');\n const currentShape = lastShapesMap[id]; // 已经在渲染树上的 shape\n const currentAnimateCfg = shape.get('animateCfg');\n currentShape.set('data', data);\n currentShape.set('origin', origin);\n currentShape.set('animateCfg', currentAnimateCfg);\n currentShape.set('coordinate', coordinate);\n\n const updateAnimateCfg = get(currentAnimateCfg, 'update');\n const currentChildren = currentShape.getChildren();\n shape.getChildren().map((child, index) => {\n const currentChild = currentChildren[index] as IShape;\n currentChild.set('data', data);\n currentChild.set('origin', origin);\n currentChild.set('animateCfg', currentAnimateCfg);\n currentChild.set('coordinate', coordinate);\n\n const newAttrs = getReplaceAttrs(currentChild, child);\n if (updateAnimateCfg) {\n doAnimate(currentChild, updateAnimateCfg, {\n toAttrs: newAttrs,\n coordinate,\n });\n } else {\n currentChild.attr(newAttrs);\n }\n });\n\n this.shapesMap[id] = currentShape; // 保存引用\n } else {\n // 新生成的 shape\n container.add(shape);\n\n const animateCfg = get(shape.get('animateCfg'), isUpdate ? 'enter' : 'appear');\n if (animateCfg) {\n doAnimate(shape, animateCfg, {\n toAttrs: {\n ...shape.attr(),\n },\n coordinate: shape.get('coordinate'),\n });\n }\n }\n delete lastShapesMap[id];\n }\n });\n\n // 移除\n each(lastShapesMap, (deleteShape) => {\n const animateCfg = get(deleteShape.get('animateCfg'), 'leave');\n if (animateCfg) {\n doAnimate(deleteShape, animateCfg, {\n toAttrs: null,\n coordinate: deleteShape.get('coordinate'),\n });\n } else {\n deleteShape.remove(true); // 移除\n }\n });\n\n this.lastShapesMap = shapesMap;\n offscreenGroup.destroy();\n }\n\n /** 清楚当前 labels */\n public clear() {\n this.container.clear();\n this.shapesMap = {};\n this.lastShapesMap = {};\n }\n\n /** 销毁 */\n public destroy() {\n this.container.destroy();\n this.shapesMap = null;\n this.lastShapesMap = null;\n }\n\n private renderLabel(cfg: LabelItem, container: IGroup) {\n const { id, data, mappingData, coordinate, animate, content } = cfg;\n const shapeAppendCfg = {\n id,\n data,\n origin: mappingData,\n coordinate,\n };\n const labelGroup = container.addGroup({\n name: 'label',\n // 如果 this.animate === false 或者 cfg.animate === false/null 则不进行动画,否则进行动画配置的合并\n animateCfg:\n this.animate === false || animate === null || animate === false ? false : deepMix({}, this.animate, animate),\n ...shapeAppendCfg,\n });\n let labelShape;\n if ((content.isGroup && content.isGroup()) || (content.isShape && content.isShape())) {\n // 如果 content 是 Group 或者 Shape根据 textAlign 调整位置后,直接将其加入 labelGroup\n const { width, height } = content.getCanvasBBox();\n const textAlign = get(cfg, 'textAlign', 'left');\n\n let x = cfg.x;\n const y = cfg.y - (height / 2);\n\n if (textAlign === 'center') {\n x = x - (width / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n x = x - width;\n }\n\n translate(content, x, y); // 将 label 平移至 x, y 指定的位置\n labelShape = content;\n labelGroup.add(content);\n } else {\n labelShape = labelGroup.addShape('text', {\n attrs: {\n x: cfg.x,\n y: cfg.y,\n textAlign: cfg.textAlign,\n textBaseline: get(cfg, 'textBaseline', 'middle'),\n text: cfg.content,\n ...cfg.style,\n },\n ...shapeAppendCfg,\n });\n }\n\n if (cfg.rotate) {\n rotate(labelShape, cfg.rotate);\n }\n this.shapesMap[id] = labelGroup;\n }\n\n // 根据type对label布局\n private doLayout(items: LabelItem[], shapes: Record<string, IShape | IGroup>) {\n if (this.layout) {\n const layouts = isArray(this.layout) ? this.layout : [this.layout];\n each(layouts, (layout: GeometryLabelLayoutCfg) => {\n const layoutFn = getGeometryLabelLayout(get(layout, 'type', ''));\n if (layoutFn) {\n const labelShapes = [];\n const geometryShapes = [];\n each(this.shapesMap, (labelShape, id) => {\n labelShapes.push(labelShape);\n geometryShapes.push(shapes[id]);\n });\n\n layoutFn(items, labelShapes, geometryShapes, this.region, layout.cfg);\n }\n });\n }\n }\n\n private renderLabelLine(labelItems: LabelItem[]) {\n each(labelItems, (labelItem) => {\n if (!labelItem) {\n return;\n }\n if (!labelItem.labelLine) {\n // labelLine: null | false关闭 label 对应的 labelLine\n return;\n }\n const labelLineCfg = get(labelItem, 'labelLine', {});\n const id = labelItem.id;\n let path = labelLineCfg.path;\n if (!path) {\n const start = labelItem.start;\n path = [\n ['M', start.x, start.y],\n ['L', labelItem.x, labelItem.y],\n ];\n }\n const labelGroup = this.shapesMap[id];\n if (!labelGroup.destroyed) {\n labelGroup.addShape('path', {\n capture: false, // labelLine 默认不参与事件捕获\n attrs: {\n path,\n stroke: labelItem.color ? labelItem.color : get(labelItem, ['style', 'fill'], '#000'),\n fill: null,\n ...labelLineCfg.style,\n },\n id,\n origin: labelItem.mappingData,\n data: labelItem.data,\n coordinate: labelItem.coordinate,\n });\n }\n });\n }\n\n private createOffscreenGroup() {\n const container = this.container;\n const GroupClass = container.getGroupBase(); // 获取分组的构造函数\n const newGroup = new GroupClass({});\n return newGroup;\n }\n\n private adjustLabel(items: LabelItem[]) {\n each(items, (item) => {\n if (item) {\n const id = item.id;\n const labelGroup = this.shapesMap[id];\n if (!labelGroup.destroyed) {\n const labelShape = labelGroup.find(ele => ele.get('type') === 'text');\n if (labelShape) {\n if (item.offsetX) {\n labelShape.attr('x', labelShape.attr('x') + item.offsetX);\n }\n if (item.offsetY) {\n labelShape.attr('y', labelShape.attr('y') + item.offsetY);\n }\n }\n }\n }\n });\n }\n}\n"]}