GraphView.js 3.5 KB
Newer Older
L
lang 已提交
1 2
define(function (require) {

L
lang 已提交
3 4
    var SymbolDraw = require('../helper/SymbolDraw');
    var LineDraw = require('../helper/LineDraw');
L
lang 已提交
5
    var RoamController = require('../../component/helper/RoamController');
L
lang 已提交
6 7 8 9 10

    require('../../echarts').extendChartView({

        type: 'graph',

L
lang 已提交
11
        init: function (ecModel, api) {
L
lang 已提交
12
            var symbolDraw = new SymbolDraw();
L
lang 已提交
13
            var lineDraw = new LineDraw();
L
lang 已提交
14
            var group = this.group;
L
lang 已提交
15

L
lang 已提交
16 17
            group.add(symbolDraw.group);
            group.add(lineDraw.group);
L
lang 已提交
18

L
lang 已提交
19
            this._symbolDraw = symbolDraw;
L
lang 已提交
20
            this._lineDraw = lineDraw;
L
lang 已提交
21 22

            this._controller = new RoamController(api.getZr(), group);
L
lang 已提交
23 24 25
        },

        render: function (seriesModel, ecModel, api) {
L
lang 已提交
26 27 28 29 30 31
            var coordSys = seriesModel.coordinateSystem;
            // Only support view and geo coordinate system
            if (coordSys.type !== 'geo' && coordSys.type !== 'view') {
                return;
            }

L
lang 已提交
32
            var data = seriesModel.getData();
L
lang 已提交
33
            this._model = seriesModel;
L
lang 已提交
34

L
lang 已提交
35 36 37 38
            var symbolDraw = this._symbolDraw;
            var lineDraw = this._lineDraw;

            symbolDraw.updateData(
L
lang 已提交
39 40
                data, seriesModel, api, false
            );
L
lang 已提交
41 42 43

            lineDraw.updateData(
                data.graph.edgeData,
L
lang 已提交
44 45 46 47
                seriesModel, api, false,
                function (idx) {
                    return data.graph.edges[idx].dataIndex >= 0;
                }
L
lang 已提交
48 49
            );

L
lang 已提交
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
            // Save the original lineWidth
            data.graph.eachEdge(function (edge) {
                edge.__lineWidth = edge.getModel('lineStyle.normal').get('width');
            });

            var group = this.group;
            group.attr({
                position: coordSys.position,
                scale: coordSys.scale
            });

            this._nodeScaleRatio = seriesModel.get('nodeScaleRatio');
            this._edgeScaleRatio = seriesModel.get('edgeScaleRatio');

            this._updateNodeAndLinkScale();

            var controller = this._controller;
            controller.rect = coordSys.getViewRect();

            controller.disable();
            seriesModel.get('roam') && controller.enable();
            controller.on('zoom', this._updateNodeAndLinkScale, this);
        },

        _updateNodeAndLinkScale: function () {
            var seriesModel = this._model;
            var data = seriesModel.getData();

            var group = this.group;
            var nodeScaleRatio = this._nodeScaleRatio;
            var edgeScaleRatio = this._edgeScaleRatio;

            // Assume scale aspect is 1
            var groupScale = group.scale[0];

            var nodeScale = (groupScale - 1) * nodeScaleRatio + 1;
            var edgeScale = (groupScale - 1) * edgeScaleRatio + 1;
            var invScale = [
                nodeScale / groupScale,
                nodeScale / groupScale
            ];

L
lang 已提交
92
            data.eachItemGraphicEl(function (el, idx) {
L
lang 已提交
93 94 95 96 97 98 99 100
                el.attr('scale', invScale);
            });

            data.graph.eachEdge(function (edge) {
                edge.getGraphicEl().setStyle(
                    'lineWidth',
                    edge.__lineWidth * edgeScale / groupScale
                );
L
lang 已提交
101
            });
L
lang 已提交
102 103
        },

L
lang 已提交
104 105 106 107
        updateLayout: function (seriesModel, ecModel) {
            this._symbolDraw.updateLayout();
            this._lineDraw.updateLayout();
        },
L
lang 已提交
108

L
lang 已提交
109 110 111
        remove: function (ecModel, api) {
            this._symbolDraw.remove();
            this._lineDraw.remove();
L
lang 已提交
112 113 114
        }
    });
});