93 lines
3.4 KiB
Java
93 lines
3.4 KiB
Java
![]() |
import { __extends } from "tslib";
|
|||
|
import { FIELD_ORIGIN } from '../constant';
|
|||
|
import Geometry from './base';
|
|||
|
import Element from './element';
|
|||
|
/** 引入对应的 ShapeFactory */
|
|||
|
import './shape/line';
|
|||
|
import { isModelChange } from './util/is-model-change';
|
|||
|
/**
|
|||
|
* Path 几何标记。
|
|||
|
* 用于绘制路径图等。
|
|||
|
*/
|
|||
|
var Path = /** @class */ (function (_super) {
|
|||
|
__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;
|
|||
|
_this.connectNulls = connectNulls;
|
|||
|
return _this;
|
|||
|
}
|
|||
|
/**
|
|||
|
* 创建所有的 Element 实例,对于 Path、Line、Area,一组数据对应一个 Element。
|
|||
|
* @param mappingData
|
|||
|
* @param [isUpdate]
|
|||
|
* @returns elements
|
|||
|
*/
|
|||
|
Path.prototype.createElements = function (mappingData, index, isUpdate) {
|
|||
|
if (isUpdate === void 0) { isUpdate = false; }
|
|||
|
// Path 的每个 element 对应一组数据
|
|||
|
var _a = this, lastElementsMap = _a.lastElementsMap, elementsMap = _a.elementsMap, elements = _a.elements, container = _a.container;
|
|||
|
var elementId = this.getElementId(mappingData);
|
|||
|
var shapeCfg = this.getShapeInfo(mappingData);
|
|||
|
var result = lastElementsMap[elementId];
|
|||
|
if (!result) {
|
|||
|
var shapeFactory = this.getShapeFactory();
|
|||
|
result = new Element({
|
|||
|
shapeFactory: shapeFactory,
|
|||
|
container: container,
|
|||
|
offscreenGroup: this.getOffscreenGroup(),
|
|||
|
});
|
|||
|
result.geometry = this;
|
|||
|
result.animate = this.animateOption;
|
|||
|
result.draw(shapeCfg, isUpdate); // 绘制 shape
|
|||
|
}
|
|||
|
else {
|
|||
|
// element 已经创建
|
|||
|
var preShapeCfg = result.getModel();
|
|||
|
if (this.isCoordinateChanged || isModelChange(preShapeCfg, shapeCfg)) {
|
|||
|
result.animate = this.animateOption;
|
|||
|
// 通过绘制数据的变更来判断是否需要更新,因为用户有可能会修改图形属性映射
|
|||
|
result.update(shapeCfg); // 更新对应的 element
|
|||
|
}
|
|||
|
delete lastElementsMap[elementId];
|
|||
|
}
|
|||
|
elements.push(result);
|
|||
|
elementsMap[elementId] = result;
|
|||
|
return elements;
|
|||
|
};
|
|||
|
/**
|
|||
|
* 获取组成一条线(一组数据)的所有点以及数据
|
|||
|
* @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[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;
|
|||
|
return shapeCfg;
|
|||
|
};
|
|||
|
return Path;
|
|||
|
}(Geometry));
|
|||
|
export default Path;
|
|||
|
//# sourceMappingURL=path.js.map
|