UNPKG

6.36 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var tslib_1 = require("tslib");
4var constant_1 = require("../constant");
5var base_1 = tslib_1.__importDefault(require("./base"));
6var element_1 = tslib_1.__importDefault(require("./element"));
7/** 引入对应的 ShapeFactory */
8require("./shape/line");
9var is_model_change_1 = require("./util/is-model-change");
10var diff_1 = require("./util/diff");
11/**
12 * Path 几何标记。
13 * 用于绘制路径图等。
14 */
15var Path = /** @class */ (function (_super) {
16 tslib_1.__extends(Path, _super);
17 function Path(cfg) {
18 var _this = _super.call(this, cfg) || this;
19 _this.type = 'path';
20 _this.shapeType = 'line';
21 var _a = cfg.connectNulls, connectNulls = _a === void 0 ? false : _a, _b = cfg.showSinglePoint, showSinglePoint = _b === void 0 ? true : _b;
22 _this.connectNulls = connectNulls;
23 _this.showSinglePoint = showSinglePoint;
24 return _this;
25 }
26 /**
27 * 创建所有的 Element 实例,对于 Path、Line、Area,一组数据对应一个 Element。
28 * @param mappingData
29 * @param [isUpdate]
30 * @returns elements
31 */
32 Path.prototype.updateElements = function (mappingDataArray, isUpdate) {
33 var e_1, _a, e_2, _b, e_3, _c;
34 if (isUpdate === void 0) { isUpdate = false; }
35 // Path 的每个 element 对应一组数据
36 var keyData = new Map();
37 var keyIndex = new Map();
38 var keys = [];
39 var index = 0;
40 for (var i = 0; i < mappingDataArray.length; i++) {
41 var mappingData = mappingDataArray[i];
42 var key = this.getElementId(mappingData);
43 keys.push(key);
44 keyData.set(key, mappingData);
45 keyIndex.set(key, index);
46 index++;
47 }
48 this.elements = new Array(index);
49 var _d = (0, diff_1.diff)(this.lastElementsMap, keys), added = _d.added, updated = _d.updated, removed = _d.removed;
50 try {
51 for (var added_1 = tslib_1.__values(added), added_1_1 = added_1.next(); !added_1_1.done; added_1_1 = added_1.next()) {
52 var key = added_1_1.value;
53 var mappingData = keyData.get(key);
54 var shapeFactory = this.getShapeFactory();
55 var shapeCfg = this.getShapeInfo(mappingData);
56 var i = keyIndex.get(key);
57 var element = new element_1.default({
58 shapeFactory: shapeFactory,
59 container: this.container,
60 offscreenGroup: this.getOffscreenGroup(),
61 elementIndex: i,
62 });
63 element.geometry = this;
64 element.animate = this.animateOption;
65 element.draw(shapeCfg, isUpdate); // 绘制 shape
66 this.elementsMap[key] = element;
67 this.elements[i] = element;
68 }
69 }
70 catch (e_1_1) { e_1 = { error: e_1_1 }; }
71 finally {
72 try {
73 if (added_1_1 && !added_1_1.done && (_a = added_1.return)) _a.call(added_1);
74 }
75 finally { if (e_1) throw e_1.error; }
76 }
77 try {
78 for (var updated_1 = tslib_1.__values(updated), updated_1_1 = updated_1.next(); !updated_1_1.done; updated_1_1 = updated_1.next()) {
79 var key = updated_1_1.value;
80 var mappingData = keyData.get(key);
81 var element = this.lastElementsMap[key];
82 var i = keyIndex.get(key);
83 var shapeCfg = this.getShapeInfo(mappingData);
84 var preShapeCfg = element.getModel();
85 if (this.isCoordinateChanged || (0, is_model_change_1.isModelChange)(preShapeCfg, shapeCfg)) {
86 element.animate = this.animateOption;
87 // 通过绘制数据的变更来判断是否需要更新,因为用户有可能会修改图形属性映射
88 element.update(shapeCfg); // 更新对应的 element
89 }
90 this.elementsMap[key] = element;
91 this.elements[i] = element;
92 }
93 }
94 catch (e_2_1) { e_2 = { error: e_2_1 }; }
95 finally {
96 try {
97 if (updated_1_1 && !updated_1_1.done && (_b = updated_1.return)) _b.call(updated_1);
98 }
99 finally { if (e_2) throw e_2.error; }
100 }
101 try {
102 for (var removed_1 = tslib_1.__values(removed), removed_1_1 = removed_1.next(); !removed_1_1.done; removed_1_1 = removed_1.next()) {
103 var key = removed_1_1.value;
104 var element = this.lastElementsMap[key];
105 // 更新动画配置,用户有可能在更新之前有对动画进行配置操作
106 element.animate = this.animateOption;
107 element.destroy();
108 }
109 }
110 catch (e_3_1) { e_3 = { error: e_3_1 }; }
111 finally {
112 try {
113 if (removed_1_1 && !removed_1_1.done && (_c = removed_1.return)) _c.call(removed_1);
114 }
115 finally { if (e_3) throw e_3.error; }
116 }
117 };
118 /**
119 * 获取组成一条线(一组数据)的所有点以及数据
120 * @param mappingData 映射后的数组
121 */
122 Path.prototype.getPointsAndData = function (mappingData) {
123 var points = [];
124 var data = [];
125 for (var i = 0, len = mappingData.length; i < len; i++) {
126 var obj = mappingData[i];
127 points.push({
128 x: obj.x,
129 y: obj.y,
130 });
131 data.push(obj[constant_1.FIELD_ORIGIN]);
132 }
133 return {
134 points: points,
135 data: data,
136 };
137 };
138 Path.prototype.getShapeInfo = function (mappingData) {
139 var shapeCfg = this.getDrawCfg(mappingData[0]);
140 var _a = this.getPointsAndData(mappingData), points = _a.points, data = _a.data;
141 shapeCfg.mappingData = mappingData;
142 shapeCfg.data = data;
143 shapeCfg.isStack = !!this.getAdjust('stack');
144 shapeCfg.points = points;
145 shapeCfg.connectNulls = this.connectNulls;
146 shapeCfg.showSinglePoint = this.showSinglePoint;
147 return shapeCfg;
148 };
149 return Path;
150}(base_1.default));
151exports.default = Path;
152//# sourceMappingURL=path.js.map
\No newline at end of file