"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var constant_1 = require("../constant"); var base_1 = (0, tslib_1.__importDefault)(require("./base")); var element_1 = (0, tslib_1.__importDefault)(require("./element")); /** 引入对应的 ShapeFactory */ require("./shape/line"); var is_model_change_1 = require("./util/is-model-change"); var diff_1 = require("./util/diff"); /** * Path 几何标记。 * 用于绘制路径图等。 */ var Path = /** @class */ (function (_super) { (0, tslib_1.__extends)(Path, _super); function Path(cfg) { var _this = _super.call(this, cfg) || this; _this.type = 'path'; _this.shapeType = 'line'; var _a = cfg.connectNulls, connectNulls = _a === void 0 ? false : _a, _b = cfg.showSinglePoint, showSinglePoint = _b === void 0 ? true : _b; _this.connectNulls = connectNulls; _this.showSinglePoint = showSinglePoint; return _this; } /** * 创建所有的 Element 实例,对于 Path、Line、Area,一组数据对应一个 Element。 * @param mappingData * @param [isUpdate] * @returns elements */ Path.prototype.updateElements = function (mappingDataArray, isUpdate) { if (isUpdate === void 0) { isUpdate = false; } // Path 的每个 element 对应一组数据 var keyData = new Map(); var keyIndex = new Map(); var keys = []; var index = 0; for (var i = 0; i < mappingDataArray.length; i++) { var mappingData = mappingDataArray[i]; var key = this.getElementId(mappingData); keys.push(key); keyData.set(key, mappingData); keyIndex.set(key, index); index++; } this.elements = new Array(index); var _a = (0, diff_1.diff)(this.lastElementsMap, keys), added = _a.added, updated = _a.updated, removed = _a.removed; for (var _i = 0, added_1 = added; _i < added_1.length; _i++) { var key = added_1[_i]; var mappingData = keyData.get(key); var shapeFactory = this.getShapeFactory(); var shapeCfg = this.getShapeInfo(mappingData); var i = keyIndex.get(key); var element = new element_1.default({ shapeFactory: shapeFactory, container: this.container, offscreenGroup: this.getOffscreenGroup(), }); element.geometry = this; element.animate = this.animateOption; element.draw(shapeCfg, isUpdate); // 绘制 shape this.elementsMap[key] = element; this.elements[i] = element; } for (var _b = 0, updated_1 = updated; _b < updated_1.length; _b++) { var key = updated_1[_b]; var mappingData = keyData.get(key); var element = this.lastElementsMap[key]; var i = keyIndex.get(key); var shapeCfg = this.getShapeInfo(mappingData); var preShapeCfg = element.getModel(); if (this.isCoordinateChanged || (0, is_model_change_1.isModelChange)(preShapeCfg, shapeCfg)) { element.animate = this.animateOption; // 通过绘制数据的变更来判断是否需要更新,因为用户有可能会修改图形属性映射 element.update(shapeCfg); // 更新对应的 element } this.elementsMap[key] = element; this.elements[i] = element; } for (var _c = 0, removed_1 = removed; _c < removed_1.length; _c++) { var key = removed_1[_c]; var element = this.lastElementsMap[key]; // 更新动画配置,用户有可能在更新之前有对动画进行配置操作 element.animate = this.animateOption; element.destroy(); } }; /** * 获取组成一条线(一组数据)的所有点以及数据 * @param mappingData 映射后的数组 */ Path.prototype.getPointsAndData = function (mappingData) { var points = []; var data = []; for (var i = 0, len = mappingData.length; i < len; i++) { var obj = mappingData[i]; points.push({ x: obj.x, y: obj.y, }); data.push(obj[constant_1.FIELD_ORIGIN]); } return { points: points, data: data, }; }; Path.prototype.getShapeInfo = function (mappingData) { var shapeCfg = this.getDrawCfg(mappingData[0]); var _a = this.getPointsAndData(mappingData), points = _a.points, data = _a.data; shapeCfg.mappingData = mappingData; shapeCfg.data = data; shapeCfg.isStack = !!this.getAdjust('stack'); shapeCfg.points = points; shapeCfg.connectNulls = this.connectNulls; shapeCfg.showSinglePoint = this.showSinglePoint; return shapeCfg; }; return Path; }(base_1.default)); exports.default = Path; //# sourceMappingURL=path.js.map