echarts RadarModel 源码
echarts RadarModel 代码
文件路径:/src/coord/radar/RadarModel.ts
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import * as zrUtil from 'zrender/src/core/util';
import axisDefault from '../axisDefault';
import Model from '../../model/Model';
import {AxisModelCommonMixin} from '../axisModelCommonMixin';
import ComponentModel from '../../model/Component';
import {
ComponentOption,
CircleLayoutOptionMixin,
LabelOption,
ColorString
} from '../../util/types';
import { AxisBaseOption, CategoryAxisBaseOption, ValueAxisBaseOption } from '../axisCommonTypes';
import { AxisBaseModel } from '../AxisBaseModel';
import Radar from './Radar';
import {CoordinateSystemHostModel} from '../../coord/CoordinateSystem';
const valueAxisDefault = axisDefault.value;
function defaultsShow(opt: object, show: boolean) {
return zrUtil.defaults({
show: show
}, opt);
}
export interface RadarIndicatorOption {
name?: string
/**
* @deprecated Use `name` instead.
*/
text?: string
min?: number
max?: number
color?: ColorString
axisType?: 'value' | 'log'
}
export interface RadarOption extends ComponentOption, CircleLayoutOptionMixin {
mainType?: 'radar'
startAngle?: number
shape?: 'polygon' | 'circle'
// TODO. axisType seems to have issue.
// axisType?: 'value' | 'log'
axisLine?: AxisBaseOption['axisLine']
axisTick?: AxisBaseOption['axisTick']
axisLabel?: AxisBaseOption['axisLabel']
splitLine?: AxisBaseOption['splitLine']
splitArea?: AxisBaseOption['splitArea']
// TODO Use axisName?
axisName?: {
show?: boolean
formatter?: string | ((name?: string, indicatorOpt?: InnerIndicatorAxisOption) => string)
} & LabelOption
axisNameGap?: number
triggerEvent?: boolean
scale?: boolean
splitNumber?: number
boundaryGap?: CategoryAxisBaseOption['boundaryGap']
| ValueAxisBaseOption['boundaryGap']
indicator?: RadarIndicatorOption[]
}
export type InnerIndicatorAxisOption = AxisBaseOption & {
// TODO Use type?
// axisType?: 'value' | 'log'
showName?: boolean
};
class RadarModel extends ComponentModel<RadarOption> implements CoordinateSystemHostModel {
static readonly type = 'radar';
readonly type = RadarModel.type;
coordinateSystem: Radar;
private _indicatorModels: AxisBaseModel<InnerIndicatorAxisOption>[];
optionUpdated() {
const boundaryGap = this.get('boundaryGap');
const splitNumber = this.get('splitNumber');
const scale = this.get('scale');
const axisLine = this.get('axisLine');
const axisTick = this.get('axisTick');
// let axisType = this.get('axisType');
const axisLabel = this.get('axisLabel');
const nameTextStyle = this.get('axisName');
const showName = this.get(['axisName', 'show']);
const nameFormatter = this.get(['axisName', 'formatter']);
const nameGap = this.get('axisNameGap');
const triggerEvent = this.get('triggerEvent');
const indicatorModels = zrUtil.map(this.get('indicator') || [], function (indicatorOpt) {
// PENDING
if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) {
indicatorOpt.min = 0;
}
else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) {
indicatorOpt.max = 0;
}
let iNameTextStyle = nameTextStyle;
if (indicatorOpt.color != null) {
iNameTextStyle = zrUtil.defaults({
color: indicatorOpt.color
}, nameTextStyle);
}
// Use same configuration
const innerIndicatorOpt: InnerIndicatorAxisOption = zrUtil.merge(zrUtil.clone(indicatorOpt), {
boundaryGap: boundaryGap,
splitNumber: splitNumber,
scale: scale,
axisLine: axisLine,
axisTick: axisTick,
// axisType: axisType,
axisLabel: axisLabel,
// Compatible with 2 and use text
name: indicatorOpt.text,
showName: showName,
nameLocation: 'end',
nameGap: nameGap,
// min: 0,
nameTextStyle: iNameTextStyle,
triggerEvent: triggerEvent
} as InnerIndicatorAxisOption, false);
if (zrUtil.isString(nameFormatter)) {
const indName = innerIndicatorOpt.name;
innerIndicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : '');
}
else if (zrUtil.isFunction(nameFormatter)) {
innerIndicatorOpt.name = nameFormatter(
innerIndicatorOpt.name, innerIndicatorOpt
);
}
const model = new Model(innerIndicatorOpt, null, this.ecModel) as AxisBaseModel<InnerIndicatorAxisOption>;
zrUtil.mixin(model, AxisModelCommonMixin.prototype);
// For triggerEvent.
model.mainType = 'radar';
model.componentIndex = this.componentIndex;
return model;
}, this);
this._indicatorModels = indicatorModels;
}
getIndicatorModels() {
return this._indicatorModels;
}
static defaultOption: RadarOption = {
// zlevel: 0,
z: 0,
center: ['50%', '50%'],
radius: '75%',
startAngle: 90,
axisName: {
show: true
// formatter: null
// textStyle: {}
},
boundaryGap: [0, 0],
splitNumber: 5,
axisNameGap: 15,
scale: false,
// Polygon or circle
shape: 'polygon',
axisLine: zrUtil.merge(
{
lineStyle: {
color: '#bbb'
}
},
valueAxisDefault.axisLine
),
axisLabel: defaultsShow(valueAxisDefault.axisLabel, false),
axisTick: defaultsShow(valueAxisDefault.axisTick, false),
// axisType: 'value',
splitLine: defaultsShow(valueAxisDefault.splitLine, true),
splitArea: defaultsShow(valueAxisDefault.splitArea, true),
// {text, min, max}
indicator: []
};
}
export default RadarModel;
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦