You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/10/12 12:07:54 UTC
[echarts] branch optimize-progressive updated: fix(zlevel):
optimize zlevel allocate for effect series
This is an automated email from the ASF dual-hosted git repository.
shenyi pushed a commit to branch optimize-progressive
in repository https://gitbox.apache.org/repos/asf/echarts.git
The following commit(s) were added to refs/heads/optimize-progressive by this push:
new 3cae99e fix(zlevel): optimize zlevel allocate for effect series
3cae99e is described below
commit 3cae99ee7ea4f8d2308dd5ff4a3098b78cfa41c4
Author: pissang <bm...@gmail.com>
AuthorDate: Tue Oct 12 20:06:43 2021 +0800
fix(zlevel): optimize zlevel allocate for effect series
---
src/chart/lines/LinesSeries.ts | 7 +++-
src/chart/scatter/ScatterSeries.ts | 6 ++-
src/core/echarts.ts | 78 ++++++++++++++++++++++----------------
src/model/Component.ts | 9 ++++-
4 files changed, 61 insertions(+), 39 deletions(-)
diff --git a/src/chart/lines/LinesSeries.ts b/src/chart/lines/LinesSeries.ts
index bd782ff..09304c6 100644
--- a/src/chart/lines/LinesSeries.ts
+++ b/src/chart/lines/LinesSeries.ts
@@ -372,10 +372,13 @@ class LinesSeriesModel extends SeriesModel<LinesSeriesOption> {
return progressiveThreshold;
}
- needsSeparateZLevel() {
+ getZLevelKey() {
const effectModel = this.getModel('effect');
+ const trailLength = effectModel.get('trailLength');
return this.getData().count() > this.getProgressiveThreshold()
- || (effectModel.get('show') && effectModel.get('trailLength') > 0);
+ // Each progressive series has individual key.
+ ? this.id
+ : (effectModel.get('show') && trailLength > 0 ? trailLength + '' : '');
}
static defaultOption: LinesSeriesOption = {
diff --git a/src/chart/scatter/ScatterSeries.ts b/src/chart/scatter/ScatterSeries.ts
index 6eada31..129b88c 100644
--- a/src/chart/scatter/ScatterSeries.ts
+++ b/src/chart/scatter/ScatterSeries.ts
@@ -115,8 +115,10 @@ class ScatterSeriesModel extends SeriesModel<ScatterSeriesOption> {
return selectors.point(data.getItemLayout(dataIndex));
}
- needsSeparateZLevel() {
- return this.getData().count() > this.getProgressiveThreshold();
+ getZLevelKey() {
+ // Each progressive series has individual key.
+ return this.getData().count() > this.getProgressiveThreshold()
+ ? this.id : '';
}
diff --git a/src/core/echarts.ts b/src/core/echarts.ts
index 740f632..c279f16 100644
--- a/src/core/echarts.ts
+++ b/src/core/echarts.ts
@@ -291,7 +291,6 @@ let flushPendingActions: (this: ECharts, silent: boolean) => void;
let triggerUpdatedEvent: (this: ECharts, silent: boolean) => void;
let bindRenderedEvent: (zr: zrender.ZRenderType, ecIns: ECharts) => void;
let bindMouseEvent: (zr: zrender.ZRenderType, ecIns: ECharts) => void;
-let clearColorPalette: (ecModel: GlobalModel) => void;
let render: (
ecIns: ECharts, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload, updateParams: UpdateLifecycleParams
) => void;
@@ -2000,61 +1999,74 @@ class ECharts extends Eventful<ECEventDefinition> {
});
};
- clearColorPalette = function (ecModel: GlobalModel): void {
+ function clearColorPalette(ecModel: GlobalModel): void {
ecModel.clearColorPalette();
ecModel.eachSeries(function (seriesModel) {
seriesModel.clearColorPalette();
});
};
- // Allocate zlevels
+ // Allocate zlevels for series and components
function allocateZlevels(ecModel: GlobalModel) {
interface ZLevelItem {
z: number,
+ zlevel: number,
idx: number,
- type: string
+ type: string,
+ key: string
};
const componentZLevels: ZLevelItem[] = [];
const seriesZLevels: ZLevelItem[] = [];
- let lastSeriesZLevel: number;
- let isLastSeriesNeedsSeparate: boolean;
+ let hasSeperateZLevel = false;
ecModel.eachComponent(function (componentType, componentModel) {
const zlevel = componentModel.get('zlevel') || 0;
+ const z = componentModel.get('z') || 0;
+ const zlevelKey = componentModel.getZLevelKey();
+ hasSeperateZLevel = hasSeperateZLevel || !!zlevelKey;
(componentType === 'series' ? seriesZLevels : componentZLevels).push({
- z: zlevel,
+ zlevel,
+ z,
idx: componentModel.componentIndex,
- type: componentType
+ type: componentType,
+ key: zlevelKey
});
});
- // Series after component
- const zLevels: ZLevelItem[] = componentZLevels.concat(seriesZLevels);
+ if (hasSeperateZLevel) {
+ // Series after component
+ const zLevels: ZLevelItem[] = componentZLevels.concat(seriesZLevels);
+ let lastSeriesZLevel: number;
+ let lastSeriesKey: string;
- timsort(zLevels, (a, b) => {
- return a.z - b.z;
- });
- each(zLevels, item => {
- const componentModel = ecModel.getComponent(item.type, item.idx);
- let zlevel = item.z;
- if (lastSeriesZLevel != null) {
- zlevel = Math.max(lastSeriesZLevel, zlevel);
- }
- if (componentModel.needsSeparateZLevel()) {
- if (zlevel === lastSeriesZLevel) {
- zlevel++;
+ timsort(zLevels, (a, b) => {
+ if (a.zlevel === b.zlevel) {
+ return a.z - b.z;
}
- isLastSeriesNeedsSeparate = true;
- }
- else if (isLastSeriesNeedsSeparate) {
- if (zlevel === lastSeriesZLevel) {
- zlevel++;
+ return a.zlevel - b.zlevel;
+ });
+ each(zLevels, item => {
+ const componentModel = ecModel.getComponent(item.type, item.idx);
+ let zlevel = item.zlevel;
+ const key = item.key;
+ if (lastSeriesZLevel != null) {
+ zlevel = Math.max(lastSeriesZLevel, zlevel);
}
- isLastSeriesNeedsSeparate = false;
- }
- lastSeriesZLevel = zlevel;
- componentModel.setZLevel(zlevel);
- });
-
+ if (key) {
+ if (zlevel === lastSeriesZLevel && key !== lastSeriesKey) {
+ zlevel++;
+ }
+ lastSeriesKey = key;
+ }
+ else if (lastSeriesKey) {
+ if (zlevel === lastSeriesZLevel) {
+ zlevel++;
+ }
+ lastSeriesKey = '';
+ }
+ lastSeriesZLevel = zlevel;
+ componentModel.setZLevel(zlevel);
+ });
+ }
}
render = (
diff --git a/src/model/Component.ts b/src/model/Component.ts
index e18fb61..e7728f0 100644
--- a/src/model/Component.ts
+++ b/src/model/Component.ts
@@ -311,8 +311,13 @@ class ComponentModel<Opt extends ComponentOption = ComponentOption> extends Mode
};
}
- needsSeparateZLevel() {
- return false;
+ /**
+ * Get key for zlevel.
+ * If developers don't configure zlevel. We will assign zlevel to series based on the key.
+ * For example, lines with trail effect and progressive series will in an individual zlevel.
+ */
+ getZLevelKey(): string {
+ return '';
}
setZLevel(zlevel: number) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org