Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"changes": [
{
"comment": "feat: support filterBeforeOverlap in label\n\n",
"type": "none",
"packageName": "@visactor/vrender-components"
}
],
"packageName": "@visactor/vrender-components",
"email": "lixuef1313@163.com"
}
22 changes: 18 additions & 4 deletions packages/vrender-components/src/label/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ import {
isNil,
isArray,
isObject,
pointInRect
pointInRect,
isBoolean
} from '@visactor/vutils';
import type { PointLocationCfg } from '../core/type';
import { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/label-smartInvert';
Expand Down Expand Up @@ -212,17 +213,30 @@ export class LabelBase<T extends BaseLabelAttrs> extends AnimateComponent<T> {
labels = this._layout(labels);
}

const filteredLabels: (IText | IRichText)[] = [];
const overlapLabels: (IText | IRichText)[] = labels;
if (!isBoolean(overlap) && isFunction(overlap.filterBeforeOverlap)) {
const getRelatedGraphic = this.getRelatedGraphic.bind(this);
labels.forEach(label => {
if (overlap.filterBeforeOverlap(label, getRelatedGraphic, this)) {
overlapLabels.push(label);
} else {
filteredLabels.push(label);
}
});
}

if (isFunction(customOverlapFunc)) {
labels = customOverlapFunc(
labels as Text[],
overlapLabels as Text[],
this.getRelatedGraphic.bind(this),
this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null,
this
);
).concat(filteredLabels);
} else {
// 防重叠逻辑
if (overlap !== false) {
labels = this._overlapping(labels);
labels = this._overlapping(overlapLabels).concat(filteredLabels);
}
}

Expand Down
25 changes: 25 additions & 0 deletions packages/vrender-components/src/label/type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,19 @@ export interface BaseLabelAttrs extends IGroupGraphicAttribute {
getRelatedPoint: ((data: LabelItem) => IPointLike) | null | undefined,
labelComponent: IGroup
) => void;

/**
* 防重叠计算前的回调函数
* 返回true的标签会被计算防重叠
* 返回false的标签会被直接跳过防重叠计算
* @since 1.19.16
*/
filterBeforeOverlap?: (
label: IText | IRichText,
getRelatedGraphic: (data: LabelItem) => IGraphic,
labelComponent: IGroup
) => boolean;

/**
* 关闭交互效果
* @default false
Expand Down Expand Up @@ -225,6 +238,18 @@ export interface OverlapAttrs {
* @returns number 数值越大,权重越高。权重越高的标签越优先被布局。
*/
priority?: (labelItem: LabelItem) => number;

/**
* 防重叠计算前的回调函数
* 返回true的标签会被计算防重叠
* 返回false的标签会被直接跳过防重叠计算
* @since 1.0.24
*/
filterBeforeOverlap?: (
label: IText | IRichText,
getRelatedGraphic: (data: LabelItem) => IGraphic,
labelComponent: IGroup
) => boolean;
}

export interface SmartInvertAttrs {
Expand Down
Loading