UNPKG

20.5 kBSource Map (JSON)View Raw
1{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/component/labels.ts"],"names":[],"mappings":"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","sourcesContent":["import { deepMix, each, get, isArray, isNull } from '@antv/util';\nimport { BBox, Coordinate, IGroup, IShape } from '../dependents';\nimport { LabelItem } from '../geometry/label/interface';\nimport { AnimateOption, GeometryLabelLayoutCfg } from '../interface';\nimport { doAnimate } from '../animate';\nimport { getGeometryLabelLayout } from '../geometry/label';\nimport { getLabelBackgroundInfo } from '../geometry/label/util';\nimport { polarToCartesian } from '../util/graphics';\nimport { rotate, translate } from '../util/transform';\nimport { FIELD_ORIGIN } from '../constant';\nimport { updateLabel } from './update-label';\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\n constructor(cfg: LabelsGroupCfg) {\n const { layout, container } = cfg;\n\n this.layout = layout;\n this.container = container;\n }\n /**\n * 渲染文本\n */\n public async render(items: LabelItem[], shapes: Record<string, IShape | IGroup>, isUpdate: boolean = false) {\n const shapesMap = {};\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 shapesMap[item.id] = this.renderLabel(item, offscreenGroup);\n }\n }\n // [todo] Move layout into Worker.\n // step 2: 根据布局,调整 labels\n await this.doLayout(items, shapes, shapesMap);\n\n // step 3.1: 绘制 labelLine\n this.renderLabelLine(items, shapesMap);\n // step 3.2: 绘制 labelBackground\n this.renderLabelBackground(items, shapesMap);\n // step 4: 根据用户设置的偏移量调整 label\n this.adjustLabel(items, shapesMap);\n }\n\n // 进行添加、更新、销毁操作\n const lastShapesMap = 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 currentAnimateCfg = shape.get('animateCfg');\n\n const currentShape = lastShapesMap[id]; // 已经在渲染树上的 shape\n updateLabel(currentShape, shapesMap[id], {\n data,\n origin,\n animateCfg: currentAnimateCfg,\n coordinate,\n });\n\n shapesMap[id] = currentShape; // 保存引用\n } else {\n // 新生成的 shape\n // If container has been destroyed, no need to render labels.\n if (this.container.destroyed) return;\n this.container.add(shape);\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.shapesMap = shapesMap;\n offscreenGroup.destroy();\n }\n\n /** 清除当前 labels */\n public clear() {\n this.container.clear();\n this.shapesMap = {};\n }\n\n /** 销毁 */\n public destroy() {\n this.container.destroy();\n this.shapesMap = null;\n }\n\n private renderLabel(cfg: LabelItem, container: IGroup): IGroup {\n const { id, elementId, data, mappingData, coordinate, animate, content } = cfg;\n const shapeAppendCfg = {\n id,\n elementId,\n data,\n origin: {\n ...mappingData,\n data: mappingData[FIELD_ORIGIN],\n },\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 const fill = get(cfg, ['style', 'fill']);\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 fill: isNull(fill) ? cfg.color : fill,\n },\n ...shapeAppendCfg,\n });\n }\n\n if (cfg.rotate) {\n rotate(labelShape, cfg.rotate);\n }\n return labelGroup;\n }\n\n // 根据type对label布局\n private async doLayout(items: LabelItem[], shapes: Record<string, IShape | IGroup>, shapesMap: Record<string, IGroup>) {\n if (this.layout) {\n const layouts = isArray(this.layout) ? this.layout : [this.layout];\n await Promise.all(layouts.map((layout: GeometryLabelLayoutCfg) => {\n const layoutFn = getGeometryLabelLayout(get(layout, 'type', ''));\n if (!layoutFn) return;\n\n const labelShapes = [];\n const geometryShapes = [];\n each(shapesMap, (labelShape, id) => {\n labelShapes.push(labelShape);\n geometryShapes.push(shapes[labelShape.get('elementId')]);\n });\n // [todo] Refactor more layout into Worker.\n return layoutFn(items, labelShapes, geometryShapes, this.region, layout.cfg);\n }));\n }\n }\n\n private renderLabelLine(labelItems: LabelItem[], shapesMap) {\n each(labelItems, (labelItem) => {\n const coordinate: Coordinate = get(labelItem, 'coordinate');\n if (!labelItem || !coordinate) {\n return;\n }\n const center = coordinate.getCenter();\n const radius = coordinate.getRadius();\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 = polarToCartesian(center.x, center.y, radius, labelItem.angle);\n path = [\n ['M', start.x, start.y],\n ['L', labelItem.x, labelItem.y],\n ];\n }\n const labelGroup = 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 /**\n * 绘制标签背景\n * @param labelItems\n */\n private renderLabelBackground(labelItems: LabelItem[], shapesMap) {\n each(labelItems, (labelItem) => {\n const coordinate: Coordinate = get(labelItem, 'coordinate');\n const background: LabelItem['background'] = get(labelItem, 'background');\n if (!background || !coordinate) {\n return;\n }\n\n const id = labelItem.id;\n const labelGroup = shapesMap[id];\n if (!labelGroup.destroyed) {\n const labelContentShape = labelGroup.getChildren()[0];\n if (labelContentShape) {\n const { rotation, ...box } = getLabelBackgroundInfo(labelGroup, labelItem, background.padding);\n const backgroundShape = labelGroup.addShape('rect', {\n attrs: {\n ...box,\n ...(background.style || {}),\n },\n id,\n origin: labelItem.mappingData,\n data: labelItem.data,\n coordinate: labelItem.coordinate,\n });\n backgroundShape.setZIndex(-1);\n\n if (rotation) {\n const matrix = labelContentShape.getMatrix();\n backgroundShape.setMatrix(matrix);\n }\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[], shapesMap) {\n each(items, (item) => {\n if (item) {\n const id = item.id;\n const labelGroup = shapesMap[id];\n if (!labelGroup.destroyed) {\n // fix: 如果说开发者的 label content 是一个 group,此处的偏移无法对 整个 content group 生效;场景类似 饼图 spider label 是一个含 2 个 textShape 的 gorup\n const labelShapes = labelGroup.findAll((ele) => ele.get('type') !== 'path');\n each(labelShapes, (labelShape) => {\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}\n"]}
\No newline at end of file