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 { getlLabelBackgroundInfo } 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 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.1: 绘制 labelLine\n this.renderLabelLine(items);\n // step 3.2: 绘制 labelBackground\n this.renderLabelBackground(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 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 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, 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 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[labelShape.get('elementId')]);\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 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 = 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 /**\n * 绘制标签背景\n * @param labelItems\n */\n private renderLabelBackground(labelItems: LabelItem[]) {\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 = this.shapesMap[id];\n if (!labelGroup.destroyed) {\n const labelContentShape = labelGroup.getChildren()[0];\n if (labelContentShape) {\n const { rotation, ...box } = getlLabelBackgroundInfo(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[]) {\n each(items, (item) => {\n if (item) {\n const id = item.id;\n const labelGroup = this.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