pie.js 1.6 KB
Newer Older
L
Add pie  
lang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
// TODO minAngle

define(function (require) {

    var numberUtil = require('../util/number');
    var parsePercent = numberUtil.parsePercent;

    return function (seriesType, ecModel, api) {
        ecModel.eachSeriesByType(seriesType, function (seriesModel) {
            var center = seriesModel.get('center');
            var radius = seriesModel.get('radius');

            var width = api.getWidth();
            var height = api.getHeight();
            var size = Math.min(width, height);
            var cx = parsePercent(center[0], width);
            var cy = parsePercent(center[1], height);
            var r0 = parsePercent(radius[0], size) / 2;
            var r = parsePercent(radius[1], size) / 2;

            var data = seriesModel.getData();

            var startAngle = -seriesModel.get('startAngle') * Math.PI / 180;

            var sum = data.getSum('x');
            if (sum === 0) {
                sum = data.count();
            }
            var radianPerVal = Math.PI / sum * 2;

            var clockWise = seriesModel.get('clockWise');

            data.each('x', function (value, idx) {
                var angle = sum === 0 ? radianPerVal : (value * radianPerVal);
                var endAngle = startAngle + angle;
                data.setItemLayout(idx, {
                    startAngle: startAngle,
                    endAngle: endAngle,
                    clockwise: clockWise,
                    cx: cx,
                    cy: cy,
                    r0: r0,
                    r: r
                });

                startAngle = endAngle;
            }, true);
        });
    }
});