| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942 | define('echarts/chart/radar', [    'require',    './base',    'zrender/shape/Polygon',    '../component/polar',    '../config',    '../util/ecData',    'zrender/tool/util',    'zrender/tool/color',    '../util/accMath',    '../chart'], function (require) {    var ChartBase = require('./base');    var PolygonShape = require('zrender/shape/Polygon');    require('../component/polar');    var ecConfig = require('../config');    ecConfig.radar = {        zlevel: 0,        z: 2,        clickable: true,        legendHoverLink: true,        polarIndex: 0,        itemStyle: {            normal: {                label: { show: false },                lineStyle: {                    width: 2,                    type: 'solid'                }            },            emphasis: { label: { show: false } }        },        symbolSize: 2    };    var ecData = require('../util/ecData');    var zrUtil = require('zrender/tool/util');    var zrColor = require('zrender/tool/color');    function Radar(ecTheme, messageCenter, zr, option, myChart) {        ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);        this.refresh(option);    }    Radar.prototype = {        type: ecConfig.CHART_TYPE_RADAR,        _buildShape: function () {            this.selectedMap = {};            this._symbol = this.option.symbolList;            this._queryTarget;            this._dropBoxList = [];            this._radarDataCounter = 0;            var series = this.series;            var legend = this.component.legend;            var serieName;            for (var i = 0, l = series.length; i < l; i++) {                if (series[i].type === ecConfig.CHART_TYPE_RADAR) {                    this.serie = this.reformOption(series[i]);                    this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;                    serieName = this.serie.name || '';                    this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;                    if (this.selectedMap[serieName]) {                        this._queryTarget = [                            this.serie,                            this.option                        ];                        if (this.deepQuery(this._queryTarget, 'calculable')) {                            this._addDropBox(i);                        }                        this._buildSingleRadar(i);                        this.buildMark(i);                    }                }            }            this.addShapeList();        },        _buildSingleRadar: function (index) {            var legend = this.component.legend;            var iconShape;            var data = this.serie.data;            var defaultColor;            var name;            var pointList;            var calculable = this.deepQuery(this._queryTarget, 'calculable');            for (var i = 0; i < data.length; i++) {                name = data[i].name || '';                this.selectedMap[name] = legend ? legend.isSelected(name) : true;                if (!this.selectedMap[name]) {                    continue;                }                if (legend) {                    defaultColor = legend.getColor(name);                    iconShape = legend.getItemShape(name);                    if (iconShape) {                        iconShape.style.brushType = this.deepQuery([                            data[i],                            this.serie                        ], 'itemStyle.normal.areaStyle') ? 'both' : 'stroke';                        legend.setItemShape(name, iconShape);                    }                } else {                    defaultColor = this.zr.getColor(i);                }                pointList = this._getPointList(this.serie.polarIndex, data[i]);                this._addSymbol(pointList, defaultColor, i, index, this.serie.polarIndex);                this._addDataShape(pointList, defaultColor, data[i], index, i, calculable);                this._radarDataCounter++;            }        },        _getPointList: function (polarIndex, dataArr) {            var pointList = [];            var vector;            var polar = this.component.polar;            var value;            for (var i = 0, l = dataArr.value.length; i < l; i++) {                value = this.getDataFromOption(dataArr.value[i]);                vector = value != '-' ? polar.getVector(polarIndex, i, value) : false;                if (vector) {                    pointList.push(vector);                }            }            return pointList;        },        _addSymbol: function (pointList, defaultColor, dataIndex, seriesIndex, polarIndex) {            var series = this.series;            var itemShape;            var polar = this.component.polar;            for (var i = 0, l = pointList.length; i < l; i++) {                itemShape = this.getSymbolShape(this.deepMerge([                    series[seriesIndex].data[dataIndex],                    series[seriesIndex]                ]), seriesIndex, series[seriesIndex].data[dataIndex].value[i], i, polar.getIndicatorText(polarIndex, i), pointList[i][0], pointList[i][1], this._symbol[this._radarDataCounter % this._symbol.length], defaultColor, '#fff', 'vertical');                itemShape.zlevel = this.getZlevelBase();                itemShape.z = this.getZBase() + 1;                ecData.set(itemShape, 'data', series[seriesIndex].data[dataIndex]);                ecData.set(itemShape, 'value', series[seriesIndex].data[dataIndex].value);                ecData.set(itemShape, 'dataIndex', dataIndex);                ecData.set(itemShape, 'special', i);                this.shapeList.push(itemShape);            }        },        _addDataShape: function (pointList, defaultColor, data, seriesIndex, dataIndex, calculable) {            var series = this.series;            var queryTarget = [                data,                this.serie            ];            var nColor = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), seriesIndex, dataIndex, data);            var nLineWidth = this.deepQuery(queryTarget, 'itemStyle.normal.lineStyle.width');            var nLineType = this.deepQuery(queryTarget, 'itemStyle.normal.lineStyle.type');            var nAreaColor = this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle.color');            var nIsAreaFill = this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle');            var shape = {                zlevel: this.getZlevelBase(),                z: this.getZBase(),                style: {                    pointList: pointList,                    brushType: nIsAreaFill ? 'both' : 'stroke',                    color: nAreaColor || nColor || (typeof defaultColor === 'string' ? zrColor.alpha(defaultColor, 0.5) : defaultColor),                    strokeColor: nColor || defaultColor,                    lineWidth: nLineWidth,                    lineType: nLineType                },                highlightStyle: {                    brushType: this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle') || nIsAreaFill ? 'both' : 'stroke',                    color: this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle.color') || nAreaColor || nColor || (typeof defaultColor === 'string' ? zrColor.alpha(defaultColor, 0.5) : defaultColor),                    strokeColor: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), seriesIndex, dataIndex, data) || nColor || defaultColor,                    lineWidth: this.deepQuery(queryTarget, 'itemStyle.emphasis.lineStyle.width') || nLineWidth,                    lineType: this.deepQuery(queryTarget, 'itemStyle.emphasis.lineStyle.type') || nLineType                }            };            ecData.pack(shape, series[seriesIndex], seriesIndex, data, dataIndex, data.name, this.component.polar.getIndicator(series[seriesIndex].polarIndex));            if (calculable) {                shape.draggable = true;                this.setCalculable(shape);            }            shape = new PolygonShape(shape);            this.shapeList.push(shape);        },        _addDropBox: function (index) {            var series = this.series;            var polarIndex = this.deepQuery(this._queryTarget, 'polarIndex');            if (!this._dropBoxList[polarIndex]) {                var shape = this.component.polar.getDropBox(polarIndex);                shape.zlevel = this.getZlevelBase();                shape.z = this.getZBase();                this.setCalculable(shape);                ecData.pack(shape, series, index, undefined, -1);                this.shapeList.push(shape);                this._dropBoxList[polarIndex] = true;            }        },        ondragend: function (param, status) {            var series = this.series;            if (!this.isDragend || !param.target) {                return;            }            var target = param.target;            var seriesIndex = ecData.get(target, 'seriesIndex');            var dataIndex = ecData.get(target, 'dataIndex');            this.component.legend && this.component.legend.del(series[seriesIndex].data[dataIndex].name);            series[seriesIndex].data.splice(dataIndex, 1);            status.dragOut = true;            status.needRefresh = true;            this.isDragend = false;            return;        },        ondrop: function (param, status) {            var series = this.series;            if (!this.isDrop || !param.target) {                return;            }            var target = param.target;            var dragged = param.dragged;            var seriesIndex = ecData.get(target, 'seriesIndex');            var dataIndex = ecData.get(target, 'dataIndex');            var data;            var legend = this.component.legend;            var value;            if (dataIndex === -1) {                data = {                    value: ecData.get(dragged, 'value'),                    name: ecData.get(dragged, 'name')                };                series[seriesIndex].data.push(data);                legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);            } else {                var accMath = require('../util/accMath');                data = series[seriesIndex].data[dataIndex];                legend && legend.del(data.name);                data.name += this.option.nameConnector + ecData.get(dragged, 'name');                value = ecData.get(dragged, 'value');                for (var i = 0; i < value.length; i++) {                    data.value[i] = accMath.accAdd(data.value[i], value[i]);                }                legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);            }            status.dragIn = status.dragIn || true;            this.isDrop = false;            return;        },        refresh: function (newOption) {            if (newOption) {                this.option = newOption;                this.series = newOption.series;            }            this.backupShapeList();            this._buildShape();        }    };    zrUtil.inherits(Radar, ChartBase);    require('../chart').define('radar', Radar);    return Radar;});define('echarts/component/polar', [    'require',    './base',    'zrender/shape/Text',    'zrender/shape/Line',    'zrender/shape/Polygon',    'zrender/shape/Circle',    'zrender/shape/Ring',    '../config',    'zrender/tool/util',    '../util/coordinates',    '../util/accMath',    '../util/smartSteps',    '../component'], function (require) {    var Base = require('./base');    var TextShape = require('zrender/shape/Text');    var LineShape = require('zrender/shape/Line');    var PolygonShape = require('zrender/shape/Polygon');    var Circle = require('zrender/shape/Circle');    var Ring = require('zrender/shape/Ring');    var ecConfig = require('../config');    ecConfig.polar = {        zlevel: 0,        z: 0,        center: [            '50%',            '50%'        ],        radius: '75%',        startAngle: 90,        boundaryGap: [            0,            0        ],        splitNumber: 5,        name: {            show: true,            textStyle: { color: '#333' }        },        axisLine: {            show: true,            lineStyle: {                color: '#ccc',                width: 1,                type: 'solid'            }        },        axisLabel: {            show: false,            textStyle: { color: '#333' }        },        splitArea: {            show: true,            areaStyle: {                color: [                    'rgba(250,250,250,0.3)',                    'rgba(200,200,200,0.3)'                ]            }        },        splitLine: {            show: true,            lineStyle: {                width: 1,                color: '#ccc'            }        },        type: 'polygon'    };    var zrUtil = require('zrender/tool/util');    var ecCoordinates = require('../util/coordinates');    function Polar(ecTheme, messageCenter, zr, option, myChart) {        Base.call(this, ecTheme, messageCenter, zr, option, myChart);        this.refresh(option);    }    Polar.prototype = {        type: ecConfig.COMPONENT_TYPE_POLAR,        _buildShape: function () {            for (var i = 0; i < this.polar.length; i++) {                this._index = i;                this.reformOption(this.polar[i]);                this._queryTarget = [                    this.polar[i],                    this.option                ];                this._createVector(i);                this._buildSpiderWeb(i);                this._buildText(i);                this._adjustIndicatorValue(i);                this._addAxisLabel(i);            }            for (var i = 0; i < this.shapeList.length; i++) {                this.zr.addShape(this.shapeList[i]);            }        },        _createVector: function (index) {            var item = this.polar[index];            var indicator = this.deepQuery(this._queryTarget, 'indicator');            var length = indicator.length;            var startAngle = item.startAngle;            var dStep = 2 * Math.PI / length;            var radius = this._getRadius();            var __ecIndicator = item.__ecIndicator = [];            var vector;            for (var i = 0; i < length; i++) {                vector = ecCoordinates.polar2cartesian(radius, startAngle * Math.PI / 180 + dStep * i);                __ecIndicator.push({                    vector: [                        vector[1],                        -vector[0]                    ]                });            }        },        _getRadius: function () {            var item = this.polar[this._index];            return this.parsePercent(item.radius, Math.min(this.zr.getWidth(), this.zr.getHeight()) / 2);        },        _buildSpiderWeb: function (index) {            var item = this.polar[index];            var __ecIndicator = item.__ecIndicator;            var splitArea = item.splitArea;            var splitLine = item.splitLine;            var center = this.getCenter(index);            var splitNumber = item.splitNumber;            var strokeColor = splitLine.lineStyle.color;            var lineWidth = splitLine.lineStyle.width;            var show = splitLine.show;            var axisLine = this.deepQuery(this._queryTarget, 'axisLine');            this._addArea(__ecIndicator, splitNumber, center, splitArea, strokeColor, lineWidth, show);            axisLine.show && this._addLine(__ecIndicator, center, axisLine);        },        _addAxisLabel: function (index) {            var accMath = require('../util/accMath');            var item = this.polar[index];            var indicator = this.deepQuery(this._queryTarget, 'indicator');            var __ecIndicator = item.__ecIndicator;            var axisLabel;            var vector;            var style;            var newStyle;            var splitNumber = this.deepQuery(this._queryTarget, 'splitNumber');            var center = this.getCenter(index);            var vector;            var value;            var text;            var theta;            var offset;            var interval;            for (var i = 0; i < indicator.length; i++) {                axisLabel = this.deepQuery([                    indicator[i],                    item,                    this.option                ], 'axisLabel');                if (axisLabel.show) {                    var textStyle = this.deepQuery([                        axisLabel,                        item,                        this.option                    ], 'textStyle');                    var formatter = this.deepQuery([                        axisLabel,                        item                    ], 'formatter');                    style = {};                    style.textFont = this.getFont(textStyle);                    style.color = textStyle.color;                    style = zrUtil.merge(style, axisLabel);                    style.lineWidth = style.width;                    vector = __ecIndicator[i].vector;                    value = __ecIndicator[i].value;                    theta = i / indicator.length * 2 * Math.PI;                    offset = axisLabel.offset || 10;                    interval = axisLabel.interval || 0;                    if (!value) {                        return;                    }                    for (var j = 1; j <= splitNumber; j += interval + 1) {                        newStyle = zrUtil.merge({}, style);                        text = accMath.accAdd(value.min, accMath.accMul(value.step, j));                        if (typeof formatter === 'function') {                            text = formatter(text);                        } else if (typeof formatter === 'string') {                            text = formatter.replace('{a}', '{a0}').replace('{a0}', text);                        } else {                            text = this.numAddCommas(text);                        }                        newStyle.text = text;                        newStyle.x = j * vector[0] / splitNumber + Math.cos(theta) * offset + center[0];                        newStyle.y = j * vector[1] / splitNumber + Math.sin(theta) * offset + center[1];                        this.shapeList.push(new TextShape({                            zlevel: this.getZlevelBase(),                            z: this.getZBase(),                            style: newStyle,                            draggable: false,                            hoverable: false                        }));                    }                }            }        },        _buildText: function (index) {            var item = this.polar[index];            var __ecIndicator = item.__ecIndicator;            var vector;            var indicator = this.deepQuery(this._queryTarget, 'indicator');            var center = this.getCenter(index);            var style;            var textAlign;            var name;            var rotation;            var x = 0;            var y = 0;            var margin;            var textStyle;            for (var i = 0; i < indicator.length; i++) {                name = this.deepQuery([                    indicator[i],                    item,                    this.option                ], 'name');                if (!name.show) {                    continue;                }                textStyle = this.deepQuery([                    name,                    item,                    this.option                ], 'textStyle');                style = {};                style.textFont = this.getFont(textStyle);                style.color = textStyle.color;                if (typeof name.formatter == 'function') {                    style.text = name.formatter.call(this.myChart, indicator[i].text, i);                } else if (typeof name.formatter == 'string') {                    style.text = name.formatter.replace('{value}', indicator[i].text);                } else {                    style.text = indicator[i].text;                }                __ecIndicator[i].text = style.text;                vector = __ecIndicator[i].vector;                if (Math.round(vector[0]) > 0) {                    textAlign = 'left';                } else if (Math.round(vector[0]) < 0) {                    textAlign = 'right';                } else {                    textAlign = 'center';                }                if (name.margin == null) {                    vector = this._mapVector(vector, center, 1.1);                } else {                    margin = name.margin;                    x = vector[0] > 0 ? margin : -margin;                    y = vector[1] > 0 ? margin : -margin;                    x = vector[0] === 0 ? 0 : x;                    y = vector[1] === 0 ? 0 : y;                    vector = this._mapVector(vector, center, 1);                }                style.textAlign = textAlign;                style.x = vector[0] + x;                style.y = vector[1] + y;                if (name.rotate) {                    rotation = [                        name.rotate / 180 * Math.PI,                        vector[0],                        vector[1]                    ];                } else {                    rotation = [                        0,                        0,                        0                    ];                }                this.shapeList.push(new TextShape({                    zlevel: this.getZlevelBase(),                    z: this.getZBase(),                    style: style,                    draggable: false,                    hoverable: false,                    rotation: rotation                }));            }        },        getIndicatorText: function (polarIndex, indicatorIndex) {            return this.polar[polarIndex] && this.polar[polarIndex].__ecIndicator[indicatorIndex] && this.polar[polarIndex].__ecIndicator[indicatorIndex].text;        },        getDropBox: function (index) {            var index = index || 0;            var item = this.polar[index];            var center = this.getCenter(index);            var __ecIndicator = item.__ecIndicator;            var len = __ecIndicator.length;            var pointList = [];            var vector;            var shape;            var type = item.type;            if (type == 'polygon') {                for (var i = 0; i < len; i++) {                    vector = __ecIndicator[i].vector;                    pointList.push(this._mapVector(vector, center, 1.2));                }                shape = this._getShape(pointList, 'fill', 'rgba(0,0,0,0)', '', 1);            } else if (type == 'circle') {                shape = this._getCircle('', 1, 1.2, center, 'fill', 'rgba(0,0,0,0)');            }            return shape;        },        _addArea: function (__ecIndicator, splitNumber, center, splitArea, strokeColor, lineWidth, show) {            var shape;            var scale;            var scale1;            var pointList;            var type = this.deepQuery(this._queryTarget, 'type');            for (var i = 0; i < splitNumber; i++) {                scale = (splitNumber - i) / splitNumber;                if (show) {                    if (type == 'polygon') {                        pointList = this._getPointList(__ecIndicator, scale, center);                        shape = this._getShape(pointList, 'stroke', '', strokeColor, lineWidth);                    } else if (type == 'circle') {                        shape = this._getCircle(strokeColor, lineWidth, scale, center, 'stroke');                    }                    this.shapeList.push(shape);                }                if (splitArea.show) {                    scale1 = (splitNumber - i - 1) / splitNumber;                    this._addSplitArea(__ecIndicator, splitArea, scale, scale1, center, i);                }            }        },        _getCircle: function (strokeColor, lineWidth, scale, center, brushType, color) {            var radius = this._getRadius();            return new Circle({                zlevel: this.getZlevelBase(),                z: this.getZBase(),                style: {                    x: center[0],                    y: center[1],                    r: radius * scale,                    brushType: brushType,                    strokeColor: strokeColor,                    lineWidth: lineWidth,                    color: color                },                hoverable: false,                draggable: false            });        },        _getRing: function (color, scale0, scale1, center) {            var radius = this._getRadius();            return new Ring({                zlevel: this.getZlevelBase(),                z: this.getZBase(),                style: {                    x: center[0],                    y: center[1],                    r: scale0 * radius,                    r0: scale1 * radius,                    color: color,                    brushType: 'fill'                },                hoverable: false,                draggable: false            });        },        _getPointList: function (__ecIndicator, scale, center) {            var pointList = [];            var len = __ecIndicator.length;            var vector;            for (var i = 0; i < len; i++) {                vector = __ecIndicator[i].vector;                pointList.push(this._mapVector(vector, center, scale));            }            return pointList;        },        _getShape: function (pointList, brushType, color, strokeColor, lineWidth) {            return new PolygonShape({                zlevel: this.getZlevelBase(),                z: this.getZBase(),                style: {                    pointList: pointList,                    brushType: brushType,                    color: color,                    strokeColor: strokeColor,                    lineWidth: lineWidth                },                hoverable: false,                draggable: false            });        },        _addSplitArea: function (__ecIndicator, splitArea, scale, scale1, center, colorInd) {            var indLen = __ecIndicator.length;            var color;            var colorArr = splitArea.areaStyle.color;            var colorLen;            var vector;            var vector1;            var pointList = [];            var indLen = __ecIndicator.length;            var shape;            var type = this.deepQuery(this._queryTarget, 'type');            if (typeof colorArr == 'string') {                colorArr = [colorArr];            }            colorLen = colorArr.length;            color = colorArr[colorInd % colorLen];            if (type == 'polygon') {                for (var i = 0; i < indLen; i++) {                    pointList = [];                    vector = __ecIndicator[i].vector;                    vector1 = __ecIndicator[(i + 1) % indLen].vector;                    pointList.push(this._mapVector(vector, center, scale));                    pointList.push(this._mapVector(vector, center, scale1));                    pointList.push(this._mapVector(vector1, center, scale1));                    pointList.push(this._mapVector(vector1, center, scale));                    shape = this._getShape(pointList, 'fill', color, '', 1);                    this.shapeList.push(shape);                }            } else if (type == 'circle') {                shape = this._getRing(color, scale, scale1, center);                this.shapeList.push(shape);            }        },        _mapVector: function (vector, center, scale) {            return [                vector[0] * scale + center[0],                vector[1] * scale + center[1]            ];        },        getCenter: function (index) {            var index = index || 0;            return this.parseCenter(this.zr, this.polar[index].center);        },        _addLine: function (__ecIndicator, center, axisLine) {            var indLen = __ecIndicator.length;            var line;            var vector;            var lineStyle = axisLine.lineStyle;            var strokeColor = lineStyle.color;            var lineWidth = lineStyle.width;            var lineType = lineStyle.type;            for (var i = 0; i < indLen; i++) {                vector = __ecIndicator[i].vector;                line = this._getLine(center[0], center[1], vector[0] + center[0], vector[1] + center[1], strokeColor, lineWidth, lineType);                this.shapeList.push(line);            }        },        _getLine: function (xStart, yStart, xEnd, yEnd, strokeColor, lineWidth, lineType) {            return new LineShape({                zlevel: this.getZlevelBase(),                z: this.getZBase(),                style: {                    xStart: xStart,                    yStart: yStart,                    xEnd: xEnd,                    yEnd: yEnd,                    strokeColor: strokeColor,                    lineWidth: lineWidth,                    lineType: lineType                },                hoverable: false            });        },        _adjustIndicatorValue: function (index) {            var item = this.polar[index];            var indicator = this.deepQuery(this._queryTarget, 'indicator');            var len = indicator.length;            var __ecIndicator = item.__ecIndicator;            var max;            var min;            var data = this._getSeriesData(index);            var boundaryGap = item.boundaryGap;            var splitNumber = item.splitNumber;            var scale = item.scale;            var opts;            var smartSteps = require('../util/smartSteps');            for (var i = 0; i < len; i++) {                if (typeof indicator[i].max == 'number') {                    max = indicator[i].max;                    min = indicator[i].min || 0;                    opts = {                        max: max,                        min: min                    };                } else {                    var value = this._findValue(data, i, splitNumber, boundaryGap);                    min = value.min;                    max = value.max;                }                if (!scale && min >= 0 && max >= 0) {                    min = 0;                }                if (!scale && min <= 0 && max <= 0) {                    max = 0;                }                var stepOpt = smartSteps(min, max, splitNumber, opts);                __ecIndicator[i].value = {                    min: stepOpt.min,                    max: stepOpt.max,                    step: stepOpt.step                };            }        },        _getSeriesData: function (index) {            var data = [];            var serie;            var serieData;            var legend = this.component.legend;            var polarIndex;            for (var i = 0; i < this.series.length; i++) {                serie = this.series[i];                if (serie.type != ecConfig.CHART_TYPE_RADAR) {                    continue;                }                serieData = serie.data || [];                for (var j = 0; j < serieData.length; j++) {                    polarIndex = this.deepQuery([                        serieData[j],                        serie,                        this.option                    ], 'polarIndex') || 0;                    if (polarIndex == index && (!legend || legend.isSelected(serieData[j].name))) {                        data.push(serieData[j]);                    }                }            }            return data;        },        _findValue: function (data, index, splitNumber, boundaryGap) {            var max;            var min;            var one;            if (!data || data.length === 0) {                return;            }            function _compare(item) {                (item > max || max === undefined) && (max = item);                (item < min || min === undefined) && (min = item);            }            if (data.length == 1) {                min = 0;            }            if (data.length != 1) {                for (var i = 0; i < data.length; i++) {                    _compare(this.getDataFromOption(data[i].value[index]));                }            } else {                one = data[0];                for (var i = 0; i < one.value.length; i++) {                    _compare(this.getDataFromOption(one.value[i]));                }            }            var gap = Math.abs(max - min);            min = min - Math.abs(gap * boundaryGap[0]);            max = max + Math.abs(gap * boundaryGap[1]);            if (min === max) {                if (max === 0) {                    max = 1;                } else if (max > 0) {                    min = max / splitNumber;                } else {                    max = max / splitNumber;                }            }            return {                max: max,                min: min            };        },        getVector: function (polarIndex, indicatorIndex, value) {            polarIndex = polarIndex || 0;            indicatorIndex = indicatorIndex || 0;            var __ecIndicator = this.polar[polarIndex].__ecIndicator;            if (indicatorIndex >= __ecIndicator.length) {                return;            }            var indicator = this.polar[polarIndex].__ecIndicator[indicatorIndex];            var center = this.getCenter(polarIndex);            var vector = indicator.vector;            var max = indicator.value.max;            var min = indicator.value.min;            var alpha;            if (typeof value == 'undefined') {                return center;            }            switch (value) {            case 'min':                value = min;                break;            case 'max':                value = max;                break;            case 'center':                value = (max + min) / 2;                break;            }            if (max != min) {                alpha = (value - min) / (max - min);            } else {                alpha = 0.5;            }            return this._mapVector(vector, center, alpha);        },        isInside: function (vector) {            var polar = this.getNearestIndex(vector);            if (polar) {                return polar.polarIndex;            }            return -1;        },        getNearestIndex: function (vector) {            var item;            var center;            var radius;            var polarVector;            var startAngle;            var indicator;            var len;            var angle;            var finalAngle;            for (var i = 0; i < this.polar.length; i++) {                item = this.polar[i];                center = this.getCenter(i);                if (vector[0] == center[0] && vector[1] == center[1]) {                    return {                        polarIndex: i,                        valueIndex: 0                    };                }                radius = this._getRadius();                startAngle = item.startAngle;                indicator = item.indicator;                len = indicator.length;                angle = 2 * Math.PI / len;                polarVector = ecCoordinates.cartesian2polar(vector[0] - center[0], center[1] - vector[1]);                if (vector[0] - center[0] < 0) {                    polarVector[1] += Math.PI;                }                if (polarVector[1] < 0) {                    polarVector[1] += 2 * Math.PI;                }                finalAngle = polarVector[1] - startAngle / 180 * Math.PI + Math.PI * 2;                if (Math.abs(Math.cos(finalAngle % (angle / 2))) * radius > polarVector[0]) {                    return {                        polarIndex: i,                        valueIndex: Math.floor((finalAngle + angle / 2) / angle) % len                    };                }            }        },        getIndicator: function (index) {            var index = index || 0;            return this.polar[index].indicator;        },        refresh: function (newOption) {            if (newOption) {                this.option = newOption;                this.polar = this.option.polar;                this.series = this.option.series;            }            this.clear();            this._buildShape();        }    };    zrUtil.inherits(Polar, Base);    require('../component').define('polar', Polar);    return Polar;});define('echarts/util/coordinates', [    'require',    'zrender/tool/math'], function (require) {    var zrMath = require('zrender/tool/math');    function polar2cartesian(r, theta) {        return [            r * zrMath.sin(theta),            r * zrMath.cos(theta)        ];    }    function cartesian2polar(x, y) {        return [            Math.sqrt(x * x + y * y),            Math.atan(y / x)        ];    }    return {        polar2cartesian: polar2cartesian,        cartesian2polar: cartesian2polar    };});
 |