12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = require("tslib");
- var util_1 = require("@antv/util");
- var constant_1 = require("../constant");
- var base_1 = require("./base");
- var Path = /** @class */ (function (_super) {
- tslib_1.__extends(Path, _super);
- function Path() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.type = 'path';
- _this.canFill = true;
- _this.canStroke = true;
- return _this;
- }
- Path.prototype.getDefaultAttrs = function () {
- var attrs = _super.prototype.getDefaultAttrs.call(this);
- return tslib_1.__assign(tslib_1.__assign({}, attrs), { startArrow: false, endArrow: false });
- };
- Path.prototype.createPath = function (context, targetAttrs) {
- var _this = this;
- var attrs = this.attr();
- var el = this.get('el');
- util_1.each(targetAttrs || attrs, function (value, attr) {
- if (attr === 'path' && util_1.isArray(value)) {
- el.setAttribute('d', _this._formatPath(value));
- }
- else if (attr === 'startArrow' || attr === 'endArrow') {
- if (value) {
- var id = util_1.isObject(value)
- ? context.addArrow(attrs, constant_1.SVG_ATTR_MAP[attr])
- : context.getDefaultArrow(attrs, constant_1.SVG_ATTR_MAP[attr]);
- el.setAttribute(constant_1.SVG_ATTR_MAP[attr], "url(#" + id + ")");
- }
- else {
- el.removeAttribute(constant_1.SVG_ATTR_MAP[attr]);
- }
- }
- else if (constant_1.SVG_ATTR_MAP[attr]) {
- el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);
- }
- });
- };
- Path.prototype._formatPath = function (value) {
- var newValue = value
- .map(function (path) {
- return path.join(' ');
- })
- .join('');
- if (~newValue.indexOf('NaN')) {
- return '';
- }
- return newValue;
- };
- /**
- * Get total length of path
- * 尽管通过浏览器的 SVGPathElement.getTotalLength() 接口获取的 path 长度,
- * 与 Canvas 版本通过数学计算的方式得到的长度有一些细微差异,但最大误差在个位数像素,精度上可以能接受
- * @return {number} length
- */
- Path.prototype.getTotalLength = function () {
- var el = this.get('el');
- return el ? el.getTotalLength() : null;
- };
- /**
- * Get point according to ratio
- * @param {number} ratio
- * @return {Point} point
- */
- Path.prototype.getPoint = function (ratio) {
- var el = this.get('el');
- var totalLength = this.getTotalLength();
- // @see https://github.com/antvis/g/issues/634
- if (totalLength === 0) {
- return null;
- }
- var point = el ? el.getPointAtLength(ratio * totalLength) : null;
- return point
- ? {
- x: point.x,
- y: point.y,
- }
- : null;
- };
- return Path;
- }(base_1.default));
- exports.default = Path;
- //# sourceMappingURL=path.js.map
|