UNPKG

@antv/f2

Version:

Charts for mobile visualization.

216 lines (215 loc) 5.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _util = require("@antv/util"); function transposedRect(_a) { var xMin = _a.xMin, xMax = _a.xMax, yMin = _a.yMin, yMax = _a.yMax; return { xMin: yMin, xMax: yMax, yMin: xMin, yMax: xMax }; } function convertRect(_a) { var x = _a.x, y = _a.y, size = _a.size, y0 = _a.y0; var xMin; var xMax; if ((0, _util.isArray)(x)) { xMin = x[0]; xMax = x[1]; } else { xMin = x - size / 2; xMax = x + size / 2; } var yMin; var yMax; if ((0, _util.isArray)(y)) { if (y[0] === y[1]) { yMin = y[0]; yMax = y[1]; } else { yMin = Math.min(y[0], y[1]); yMax = Math.max(y[0], y[1]); } } else { yMin = Math.min(y0, y); yMax = Math.max(y0, y); } return { xMin: xMin, xMax: xMax, yMin: yMin, yMax: yMax }; } /** * 直角坐标系 * convert相关的方法,涉及将标准坐标系映射到实际坐标系内 * transform相关的方法,是仅将某一种关键点转换成另一种关键点 (比如将x/y/size/y0转换成yMin/yMax/..) */ var Base = /** @class */function () { function Base(option) { this.left = 0; this.top = 0; this.width = 0; this.height = 0; // x y 调换 this.transposed = false; // x,y 的值域,在极坐标中对应的就是弧度和半径 this.x = [0, 1]; this.y = [0, 1]; this.update(option); } Base.prototype.update = function (option) { (0, _util.mix)(this, option); var _a = this, left = _a.left, top = _a.top, width = _a.width, height = _a.height; this.right = left + width; this.bottom = top + height; this.center = { x: left + width / 2, y: top + height / 2 }; return this; }; // 是循环, 比如极坐标是以 2π 循环的 Base.prototype.isCyclic = function () { return false; }; Base.prototype._zoomVal = function (val, func) { return (0, _util.isArray)(val) ? val.map(function (v) { return func(v); }) : func(val); }; /** * 把归一后的值映射到对应的定义域 * @param point */ Base.prototype.convert = function (point) { var _a = this, transposed = _a.transposed, x = _a.x, y = _a.y; var xDim = transposed ? 'y' : 'x'; var yDim = transposed ? 'x' : 'y'; var pointX = point[xDim]; var pointY = point[yDim]; // 超出边界不绘制 if (pointX < 0 || pointX > 1 || pointY < 0 || pointY > 1) { return { x: NaN, y: NaN }; } return { x: this._zoomVal(point[xDim], function (v) { return x[0] + (x[1] - x[0]) * v; }), y: this._zoomVal(point[yDim], function (v) { return y[0] + (y[1] - y[0]) * v; }) }; }; /** * convert 的反处理,把定义域的值,反处理到归一的值 */ Base.prototype.invert = function (point) { var _a; var _b = this, transposed = _b.transposed, x = _b.x, y = _b.y; var xDim = transposed ? 'y' : 'x'; var yDim = transposed ? 'x' : 'y'; return _a = {}, _a[xDim] = this._zoomVal(point.x, function (v) { return (v - x[0]) / (x[1] - x[0]); }), _a[yDim] = this._zoomVal(point.y, function (v) { return (v - y[0]) / (y[1] - y[0]); }), _a; }; /** * 把归一化的值映射到 canvas 的坐标点 * @param point * @returns */ Base.prototype.convertPoint = function (point) { return this.convert(point); }; /** * 把canvas坐标的点位映射回归一的值 */ Base.prototype.invertPoint = function (point) { return this.invert(point); }; // 将标准坐标系下的矩形绘制关键点映射成实际绘制的坐标点 Base.prototype.convertRect = function (rectPoint) { var _a = this, xRange = _a.x, yRange = _a.y, transposed = _a.transposed; var xStart = xRange[0], xEnd = xRange[1]; var yStart = yRange[0], yEnd = yRange[1]; var rect = convertRect(rectPoint); var _b = transposed ? transposedRect(rect) : rect, xMin = _b.xMin, xMax = _b.xMax, yMin = _b.yMin, yMax = _b.yMax; var x0 = xStart + (xEnd - xStart) * xMin; var x1 = xStart + (xEnd - xStart) * xMax; var y0 = yStart + (yEnd - yStart) * yMin; var y1 = yStart + (yEnd - yStart) * yMax; return { xMin: Math.min(x0, x1), xMax: Math.max(x0, x1), yMin: Math.min(y0, y1), yMax: Math.max(y0, y1) }; }; // 将已经映射好的矩形绘制关键点转换成实际绘制的坐标点 Base.prototype.transformToRect = function (rectPoint) { var x = rectPoint.x, y = rectPoint.y, y0 = rectPoint.y0, size = rectPoint.size; var coordOrigin = this.convertPoint({ x: 0, y: y0 }); var transposed = this.transposed; var _rectPoint = { size: size, x: transposed ? y : x, y: transposed ? x : y, y0: transposed ? coordOrigin.x : coordOrigin.y }; var rect = convertRect(_rectPoint); var _a = transposed ? transposedRect(rect) : rect, xMin = _a.xMin, xMax = _a.xMax, yMin = _a.yMin, yMax = _a.yMax; return { xMin: xMin, xMax: xMax, yMin: yMin, yMax: yMax }; }; return Base; }(); var _default = exports.default = Base;