{"version":3,"file":"hide-overlap.js","sourceRoot":"","sources":["../../../../src/geometry/label/layout/hide-overlap.ts"],"names":[],"mappings":"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","sourcesContent":["import { get, each } from '@antv/util';\nimport { BBox, IGroup, IShape } from '../../../dependents';\nimport { intersect } from '../../../util/collision-detect';\nimport { LabelItem } from '../interface';\nimport { getLabelBackgroundInfo } from '../util';\nimport { createWorker } from '../util/createWorker';\nimport { code as layoutCode } from './worker/hide-overlap';\n\ntype Item = {\n x: number;\n y: number;\n width: number;\n height: number;\n rotation?: number;\n visible?: boolean;\n};\n\nconst layout = (items: Item[]): Item[] => {\n const boxes = items.slice();\n for (let i = 0; i < boxes.length; i++) {\n const box1 = boxes[i];\n if (box1.visible) {\n for (let j = i + 1; j < boxes.length; j++) {\n const box2 = boxes[j];\n if (box1 !== box2 && box2.visible) {\n if (intersect(box1, box2)) {\n box2.visible = false;\n }\n }\n }\n }\n }\n return boxes;\n};\n\nconst cache: Map = new Map();\nconst worker = createWorker(layoutCode);\n\n/**\n * label 防遮挡布局:在不改变 label 位置的情况下对相互重叠的 label 进行隐藏(非移除)\n * 不同于 'overlap' 类型的布局,该布局不会对 label 的位置进行偏移调整。\n * @param labels 参与布局调整的 label 数组集合\n */\nexport async function hideOverlap(\n labelItems: LabelItem[],\n labels: IGroup[],\n shapes: IShape[] | IGroup[],\n region: BBox\n) {\n const boxes = labels.map((d, idx) => ({\n ...getLabelBackgroundInfo(d, labelItems[idx], get(labelItems[idx], 'background.padding')),\n visible: true,\n }));\n const memoKey = JSON.stringify(boxes);\n const cb = (items: Item[]) => {\n cache.set(memoKey, items);\n each(items, ({ visible }, idx) => {\n const labelShape = labels[idx];\n if (visible) {\n labelShape?.show();\n } else {\n labelShape?.hide();\n }\n });\n return items;\n };\n if (cache.get(memoKey)) {\n cb(cache.get(memoKey));\n } else if (worker) {\n // Do layout in worker.\n try {\n const params = JSON.stringify({ type: 'hide-overlap', items: boxes });\n const res = await worker.post(params, () => cb(layout(boxes)));\n cb(Array.isArray(res.data) ? res.data : []);\n } catch (e) {\n console.error(e);\n cb(layout(boxes));\n }\n } else {\n // Normal layout in main thread.\n cb(layout(boxes));\n }\n}\n"]}