From 4645df26cb14439077c82f31695fc373578f229f Mon Sep 17 00:00:00 2001 From: xiaoluoHe Date: Fri, 20 Dec 2024 16:02:14 +0800 Subject: [PATCH 1/2] fix: overlapPadding not work in shiftY --- packages/vrender-components/src/label/base.ts | 10 +++++----- .../vrender-components/src/label/overlap/place.ts | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/vrender-components/src/label/base.ts b/packages/vrender-components/src/label/base.ts index 470fc1e7d..918a90e5e 100644 --- a/packages/vrender-components/src/label/base.ts +++ b/packages/vrender-components/src/label/base.ts @@ -554,7 +554,7 @@ export class LabelBase extends AbstractComponent { bitmap.setRange(range); } else { if (clampForce) { - const placedAfterClampForce = this._processClampForce(text as IText, bmpTool, bitmap); + const placedAfterClampForce = this._processClampForce(text as IText, bmpTool, bitmap, overlapPadding); if (placedAfterClampForce) { continue; } @@ -569,11 +569,11 @@ export class LabelBase extends AbstractComponent { return result; } - protected _processClampForce(text: IText, bmpTool: BitmapTool, bitmap: Bitmap) { + protected _processClampForce(text: IText, bmpTool: BitmapTool, bitmap: Bitmap, overlapPadding = 0) { const { dy = 0, dx = 0 } = clampText(text as IText, bmpTool.width, bmpTool.height, bmpTool.padding); if (dx === 0 && dy === 0) { - if (canPlace(bmpTool, bitmap, text.AABBBounds)) { - // xy方向偏移都为0,意味着不考虑 overlapPadding 时,实际上可以放得下 + // 再次检查,若不考虑边界,仍然可以放得下,代表当前 text 没有与其他 text 重叠 + if (canPlace(bmpTool, bitmap, text.AABBBounds, false, overlapPadding)) { bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true)); return true; } @@ -689,7 +689,7 @@ export class LabelBase extends AbstractComponent { // 尝试向内挤压 if (!hasPlace && clampForce) { - const placedAfterClampForce = this._processClampForce(text as IText, bmpTool, bitmap); + const placedAfterClampForce = this._processClampForce(text as IText, bmpTool, bitmap, overlapPadding); if (placedAfterClampForce) { result.push(text); continue; diff --git a/packages/vrender-components/src/label/overlap/place.ts b/packages/vrender-components/src/label/overlap/place.ts index c8b1e2bb9..aa9f3260f 100644 --- a/packages/vrender-components/src/label/overlap/place.ts +++ b/packages/vrender-components/src/label/overlap/place.ts @@ -191,17 +191,17 @@ export function clampText( let dy = 0; // x 方向 - if (minX < minXWithPadding && maxX - minX <= width) { + if (minX < minXWithPadding) { dx = -minX; - } else if (maxX > maxXWithPadding && minX - (maxX - width) >= minXWithPadding) { - dx = width - maxX; + } else if (maxX > maxXWithPadding) { + dx = maxXWithPadding - maxX; } // y 方向 - if (minY < minYWithPadding && maxY - minY <= height) { + if (minY < minYWithPadding) { dy = -minY; - } else if (maxY > maxYWithPadding && minY - (maxY - height) >= minYWithPadding) { - dy = height - maxY; + } else if (maxY > maxYWithPadding) { + dy = maxYWithPadding - maxY; } return { dx, dy }; From 2740f75d0263fe0bdee5d462e766bb6dec13d836 Mon Sep 17 00:00:00 2001 From: xiaoluoHe Date: Fri, 20 Dec 2024 17:09:15 +0800 Subject: [PATCH 2/2] docs: add changelog --- .../fix-overlapPadding-not-work_2024-12-20-09-08.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 common/changes/@visactor/vrender-components/fix-overlapPadding-not-work_2024-12-20-09-08.json diff --git a/common/changes/@visactor/vrender-components/fix-overlapPadding-not-work_2024-12-20-09-08.json b/common/changes/@visactor/vrender-components/fix-overlapPadding-not-work_2024-12-20-09-08.json new file mode 100644 index 000000000..73908f66d --- /dev/null +++ b/common/changes/@visactor/vrender-components/fix-overlapPadding-not-work_2024-12-20-09-08.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@visactor/vrender-components", + "comment": "fix: label overlapPadding not work correctly", + "type": "none" + } + ], + "packageName": "@visactor/vrender-components" +} \ No newline at end of file