GraphView.js 3.4 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 44 45 46

            lineDraw.updateData(
                data.graph.edgeData,
                seriesModel, api, false
            );

L
lang 已提交
47 48 49 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
            // 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 已提交
89
            data.eachItemGraphicEl(function (el, idx) {
L
lang 已提交
90 91 92 93 94 95 96 97
                el.attr('scale', invScale);
            });

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

L
lang 已提交
101 102 103 104
        updateLayout: function (seriesModel, ecModel) {
            this._symbolDraw.updateLayout();
            this._lineDraw.updateLayout();
        },
L
lang 已提交
105

L
lang 已提交
106 107 108
        remove: function (ecModel, api) {
            this._symbolDraw.remove();
            this._lineDraw.remove();
L
lang 已提交
109 110 111
        }
    });
});