ScatterView.js 3.8 KB
Newer Older
S
sushuang 已提交
1
import * as echarts from '../../echarts';
S
sushuang 已提交
2 3
import SymbolDraw from '../helper/SymbolDraw';
import LargeSymbolDraw from '../helper/LargeSymbolDraw';
P
pissang 已提交
4
import * as matrix from 'zrender/src/core/matrix';
L
lang 已提交
5

S
sushuang 已提交
6
echarts.extendChartView({
L
lang 已提交
7

S
sushuang 已提交
8
    type: 'scatter',
L
lang 已提交
9

S
sushuang 已提交
10 11
    render: function (seriesModel, ecModel, api) {
        var data = seriesModel.getData();
P
pissang 已提交
12
        this._removeRoamTransformInPoints(seriesModel, 0, data.count());
P
pissang 已提交
13
        this._updateGroupTransform(seriesModel);
P
pissang 已提交
14

S
sushuang 已提交
15
        var symbolDraw = this._updateSymbolDraw(data, seriesModel);
S
sushuang 已提交
16
        symbolDraw.updateData(data);
P
pissang 已提交
17 18

        this._finished = true;
S
sushuang 已提交
19
    },
S
tweak.  
sushuang 已提交
20

S
sushuang 已提交
21
    incrementalPrepareRender: function (seriesModel, ecModel, api) {
P
pissang 已提交
22 23
        this._updateGroupTransform(seriesModel);

S
sushuang 已提交
24 25
        var data = seriesModel.getData();
        var symbolDraw = this._updateSymbolDraw(data, seriesModel);
P
pissang 已提交
26

S
sushuang 已提交
27
        symbolDraw.incrementalPrepareUpdate(data);
P
pissang 已提交
28 29

        this._finished = false;
S
sushuang 已提交
30
    },
L
lang 已提交
31

S
sushuang 已提交
32
    incrementalRender: function (taskParams, seriesModel, ecModel) {
P
pissang 已提交
33
        this._removeRoamTransformInPoints(seriesModel, taskParams.start, taskParams.end);
S
sushuang 已提交
34
        this._symbolDraw.incrementalUpdate(taskParams, seriesModel.getData());
P
pissang 已提交
35 36

        this._finished = taskParams.end === seriesModel.getData().count();
S
sushuang 已提交
37
    },
L
lang 已提交
38

P
pissang 已提交
39 40
    updateTransform: function (seriesModel, ecModel, api) {
        var coordSys = seriesModel.coordinateSystem;
P
pissang 已提交
41
        var update = true;
P
pissang 已提交
42 43 44
        // Must mark group dirty and make sure the incremental layer will be cleared
        // PENDING
        this.group.dirty();
P
pissang 已提交
45 46 47
        if (coordSys.getRoamTransform) {
            update = false;
            this._updateGroupTransform(seriesModel);
P
pissang 已提交
48
        }
P
pissang 已提交
49 50

        if (update || !this._finished || !this._symbolDraw.isPersistent()) {
P
pissang 已提交
51 52 53 54 55 56
            return {
                update: true
            };
        }
    },

P
pissang 已提交
57 58 59 60 61 62 63 64
    _updateGroupTransform: function (seriesModel) {
        var coordSys = seriesModel.coordinateSystem;
        if (coordSys && coordSys.getRoamTransform) {
            this.group.transform = matrix.clone(coordSys.getRoamTransform());
            this.group.decomposeTransform();
        }
    },

P
pissang 已提交
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
    _removeRoamTransformInPoints: function (seriesModel, start, end) {
        var coordSys = seriesModel.coordinateSystem;
        if (coordSys && coordSys.removeRoamTransformInPoint) {
            var data = seriesModel.getData();
            var pt = [];
            if (seriesModel.get('large')) {
                var points = data.getLayout('symbolPoints');
                if (points) {
                    for (var i = 0; i < points.length; i += 2) {
                        pt[0] = points[i];
                        pt[1] = points[i + 1];
                        coordSys.removeRoamTransformInPoint(pt);
                        points[i] = pt[0];
                        points[i + 1] = pt[1];
                    }
                }
            }
            else {
                for (var i = start; i < end; i++) {
                    var pt = data.getItemLayout(i);
                    coordSys.removeRoamTransformInPoint(pt);
                }
            }
        }
    },

S
sushuang 已提交
91 92 93
    _updateSymbolDraw: function (data, seriesModel) {
        var symbolDraw = this._symbolDraw;
        var pipelineContext = seriesModel.pipelineContext;
S
sushuang 已提交
94
        var isLargeDraw = pipelineContext.large;
S
sushuang 已提交
95 96 97 98 99 100 101

        if (!symbolDraw || isLargeDraw !== this._isLargeDraw) {
            symbolDraw && symbolDraw.remove();
            symbolDraw = this._symbolDraw = isLargeDraw
                ? new LargeSymbolDraw()
                : new SymbolDraw();
            this._isLargeDraw = isLargeDraw;
S
sushuang 已提交
102
            this.group.removeAll();
S
sushuang 已提交
103 104 105 106 107
        }

        this.group.add(symbolDraw.group);

        return symbolDraw;
S
tweak.  
sushuang 已提交
108 109
    },

S
sushuang 已提交
110
    remove: function (ecModel, api) {
S
sushuang 已提交
111
        this._symbolDraw && this._symbolDraw.remove(true);
S
sushuang 已提交
112
        this._symbolDraw = null;
S
sushuang 已提交
113
    },
114

S
sushuang 已提交
115
    dispose: function () {}
L
lang 已提交
116
});