diff --git a/src/chart/sunburst/SunburstSeries.ts b/src/chart/sunburst/SunburstSeries.ts index f7d801c0a9..344cbc6e4d 100644 --- a/src/chart/sunburst/SunburstSeries.ts +++ b/src/chart/sunburst/SunburstSeries.ts @@ -94,6 +94,17 @@ export interface SunburstSeriesNodeItemOption extends } export interface SunburstSeriesLevelOption extends SunburstStateOption, StatesOptionMixin { + + radius?: (number | string)[] + /** + * @deprecated use radius instead + */ + r?: number | string + /** + * @deprecated use radius instead + */ + r0?: number | string + highlight?: { itemStyle?: SunburstItemStyleOption label?: SunburstLabelOption @@ -152,6 +163,7 @@ class SunburstSeriesModel extends SeriesModel { ignoreStyleOnData = true; private _viewRoot: TreeNode; + private _levelModels: Model[]; getInitialData(option: SunburstSeriesOption, ecModel: GlobalModel) { // Create a virtual root. @@ -159,9 +171,10 @@ class SunburstSeriesModel extends SeriesModel { completeTreeValue(root); - const levelModels = zrUtil.map(option.levels || [], function (levelDefine) { - return new Model(levelDefine, this, ecModel); - }, this); + const levelModels = this._levelModels + = zrUtil.map(option.levels || [], function (levelDefine) { + return new Model(levelDefine, this, ecModel); + }, this); // Make sure always a new tree is created when setOption, // in TreemapView, we check whether oldTree === newTree @@ -195,6 +208,10 @@ class SunburstSeriesModel extends SeriesModel { return params; } + getLevelModel(node: TreeNode) { + return this._levelModels && this._levelModels[node.depth]; + } + static defaultOption: SunburstSeriesOption = { zlevel: 0, z: 2, diff --git a/src/chart/sunburst/sunburstLayout.ts b/src/chart/sunburst/sunburstLayout.ts index b2a15e86c5..5578eadc9d 100644 --- a/src/chart/sunburst/sunburstLayout.ts +++ b/src/chart/sunburst/sunburstLayout.ts @@ -23,6 +23,7 @@ import GlobalModel from '../../model/Global'; import ExtensionAPI from '../../core/ExtensionAPI'; import SunburstSeriesModel, { SunburstSeriesNodeItemOption, SunburstSeriesOption } from './SunburstSeries'; import { TreeNode } from '../../data/Tree'; +import SeriesModel from '../../model/Series'; // let PI2 = Math.PI * 2; const RADIAN = Math.PI / 180; @@ -119,16 +120,19 @@ export default function sunburstLayout( let rStart = r0 + rPerLevel * depth; let rEnd = r0 + rPerLevel * (depth + 1); - const itemModel = node.getModel(); - // @ts-ignore. TODO this is not provided to developer yet. Rename it. - if (itemModel.get('r0') != null) { - // @ts-ignore - rStart = parsePercent(itemModel.get('r0'), size / 2); - } - // @ts-ignore - if (itemModel.get('r') != null) { - // @ts-ignore - rEnd = parsePercent(itemModel.get('r'), size / 2); + const levelModel = seriesModel.getLevelModel(node); + if (levelModel) { + let r0 = levelModel.get('r0', true); + let r = levelModel.get('r', true); + let radius = levelModel.get('radius', true); + + if (radius != null) { + r0 = radius[0]; + r = radius[1]; + } + + (r0 != null) && (rStart = parsePercent(r0, size / 2)); + (r != null) && (rEnd = parsePercent(r, size / 2)); } node.setLayout({