UNPKG

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