1 line
18 KiB
Plaintext
1 line
18 KiB
Plaintext
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/component/labels.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMzD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAYtD;;GAEG;AACH;IAcE,gBAAY,GAAmB;QAJ/B,mCAAmC;QAC5B,cAAS,GAA2B,EAAE,CAAC;QACtC,kBAAa,GAA2B,EAAE,CAAC;QAGzC,IAAA,MAAM,GAAgB,GAAG,OAAnB,EAAE,SAAS,GAAK,GAAG,UAAR,CAAS;QAElC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,uBAAM,GAAb,UAAc,KAAkB,EAAE,MAAuC,EAAE,QAAyB;QAApG,iBA8FC;QA9F0E,yBAAA,EAAA,gBAAyB;QAClG,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS;QAC7D,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,yBAAyB;YACzB,+BAA+B;YAC/B,KAAmB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;gBAArB,IAAM,IAAI,cAAA;gBACb,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;iBACxC;aACF;YACD,yBAAyB;YACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC7B,uBAAuB;YACvB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC5B,6BAA6B;YAC7B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACzB;QAED,eAAe;QACf,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,UAAC,KAAK,EAAE,EAAE;YACxB,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,8BAA8B;gBAC9B,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;aACtB;iBAAM;gBACL,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE;oBACrB,SAAS;oBACT,IAAM,MAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC/B,IAAM,QAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACnC,IAAM,YAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC3C,IAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB;oBACzD,IAAM,mBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAClD,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,MAAI,CAAC,CAAC;oBAC/B,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAM,CAAC,CAAC;oBACnC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,mBAAiB,CAAC,CAAC;oBAClD,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,YAAU,CAAC,CAAC;oBAE3C,IAAM,kBAAgB,GAAG,GAAG,CAAC,mBAAiB,EAAE,QAAQ,CAAC,CAAC;oBAC1D,IAAM,iBAAe,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;oBACnD,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK;wBACnC,IAAM,YAAY,GAAG,iBAAe,CAAC,KAAK,CAAW,CAAC;wBACtD,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,MAAI,CAAC,CAAC;wBAC/B,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAM,CAAC,CAAC;wBACnC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,mBAAiB,CAAC,CAAC;wBAClD,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,YAAU,CAAC,CAAC;wBAE3C,IAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;wBACtD,IAAI,kBAAgB,EAAE;4BACpB,SAAS,CAAC,YAAY,EAAE,kBAAgB,EAAE;gCACxC,OAAO,EAAE,QAAQ;gCACjB,UAAU,cAAA;6BACX,CAAC,CAAC;yBACJ;6BAAM;4BACL,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;yBAC7B;oBACH,CAAC,CAAC,CAAC;oBAEH,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,OAAO;iBAC3C;qBAAM;oBACL,aAAa;oBACb,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAErB,IAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAC/E,IAAI,UAAU,EAAE;wBACd,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE;4BAC3B,OAAO,eACF,KAAK,CAAC,IAAI,EAAE,CAChB;4BACD,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;yBACpC,CAAC,CAAC;qBACJ;iBACF;gBACD,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;QAEH,KAAK;QACL,IAAI,CAAC,aAAa,EAAE,UAAC,WAAW;YAC9B,IAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/D,IAAI,UAAU,EAAE;gBACd,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE;oBACjC,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;iBAC1C,CAAC,CAAC;aACJ;iBAAM;gBACL,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;aAChC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,cAAc,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,kBAAkB;IACX,sBAAK,GAAZ;QACE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,SAAS;IACF,wBAAO,GAAd;QACE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEO,4BAAW,GAAnB,UAAoB,GAAc,EAAE,SAAiB;QAC3C,IAAA,EAAE,GAAsD,GAAG,GAAzD,EAAE,IAAI,GAAgD,GAAG,KAAnD,EAAE,WAAW,GAAmC,GAAG,YAAtC,EAAE,UAAU,GAAuB,GAAG,WAA1B,EAAE,OAAO,GAAc,GAAG,QAAjB,EAAE,OAAO,GAAK,GAAG,QAAR,CAAS;QACpE,IAAM,cAAc,GAAG;YACrB,EAAE,IAAA;YACF,IAAI,MAAA;YACJ,MAAM,EAAE,WAAW;YACnB,UAAU,YAAA;SACX,CAAC;QACF,IAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,YACnC,IAAI,EAAE,OAAO;YACb,6EAA6E;YAC7E,UAAU,EACR,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAC3G,cAAc,EACjB,CAAC;QACH,IAAI,UAAU,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,EAAG;YACrF,mEAAmE;YAC7D,IAAA,KAAoB,OAAO,CAAC,aAAa,EAAE,EAAzC,KAAK,WAAA,EAAE,MAAM,YAA4B,CAAC;YAClD,IAAM,SAAS,GAAG,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAEhD,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACd,IAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAE/B,IAAI,SAAS,KAAK,QAAQ,EAAE;gBAC1B,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;aACrB;iBAAM,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE;gBACvD,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACf;YAED,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,yBAAyB;YACnD,UAAU,GAAG,OAAO,CAAC;YACrB,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACzB;aAAM;YACL,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,aACrC,KAAK,aACH,CAAC,EAAE,GAAG,CAAC,CAAC,EACR,CAAC,EAAE,GAAG,CAAC,CAAC,EACR,SAAS,EAAE,GAAG,CAAC,SAAS,EACxB,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,EAChD,IAAI,EAAE,GAAG,CAAC,OAAO,IACd,GAAG,CAAC,KAAK,KAEX,cAAc,EACjB,CAAC;SACJ;QAED,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;SAChC;QACD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,iBAAiB;IACT,yBAAQ,GAAhB,UAAiB,KAAkB,EAAE,MAAuC;QAA5E,iBAiBC;QAhBC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnE,IAAI,CAAC,OAAO,EAAE,UAAC,MAA8B;gBAC3C,IAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;gBACjE,IAAI,QAAQ,EAAE;oBACZ,IAAM,aAAW,GAAG,EAAE,CAAC;oBACvB,IAAM,gBAAc,GAAG,EAAE,CAAC;oBAC1B,IAAI,CAAC,KAAI,CAAC,SAAS,EAAE,UAAC,UAAU,EAAE,EAAE;wBAClC,aAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC7B,gBAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClC,CAAC,CAAC,CAAC;oBAEH,QAAQ,CAAC,KAAK,EAAE,aAAW,EAAE,gBAAc,EAAE,KAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBACvE;YACH,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,gCAAe,GAAvB,UAAwB,UAAuB;QAA/C,iBAoCC;QAnCC,IAAI,CAAC,UAAU,EAAE,UAAC,SAAS;YACzB,IAAI,CAAC,SAAS,EAAE;gBACd,OAAO;aACR;YACD,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;gBACxB,iDAAiD;gBACjD,OAAO;aACR;YACD,IAAM,YAAY,GAAG,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YACrD,IAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;YACxB,IAAI,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,IAAI,EAAE;gBACT,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;gBAC9B,IAAI,GAAG;oBACL,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;oBACvB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;iBAChC,CAAC;aACH;YACD,IAAM,UAAU,GAAG,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;gBACzB,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE;oBAC1B,OAAO,EAAE,KAAK;oBACd,KAAK,aACH,IAAI,MAAA,EACJ,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EACrF,IAAI,EAAE,IAAI,IACP,YAAY,CAAC,KAAK,CACtB;oBACD,EAAE,IAAA;oBACF,MAAM,EAAE,SAAS,CAAC,WAAW;oBAC7B,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,UAAU,EAAE,SAAS,CAAC,UAAU;iBACjC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qCAAoB,GAA5B;QACE,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAM,UAAU,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,YAAY;QACzD,IAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,4BAAW,GAAnB,UAAoB,KAAkB;QAAtC,iBAkBC;QAjBC,IAAI,CAAC,KAAK,EAAE,UAAC,IAAI;YACf,IAAI,IAAI,EAAE;gBACR,IAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAM,UAAU,GAAG,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACtC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;oBACzB,IAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,MAAM,EAA1B,CAA0B,CAAC,CAAC;oBACtE,IAAI,UAAU,EAAE;wBACd,IAAI,IAAI,CAAC,OAAO,EAAE;4BAChB,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;yBAC3D;wBACD,IAAI,IAAI,CAAC,OAAO,EAAE;4BAChB,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;yBAC3D;qBACF;iBACF;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACH,aAAC;AAAD,CAAC,AA/QD,IA+QC","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"]} |