@antv/f2
Version:
Charts for mobile visualization.
241 lines (240 loc) • 7.21 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _layout = _interopRequireDefault(require("../base/layout"));
var _util = require("@antv/util");
function transposedRect(_ref) {
var xMin = _ref.xMin,
xMax = _ref.xMax,
yMin = _ref.yMin,
yMax = _ref.yMax;
return {
xMin: yMin,
xMax: yMax,
yMin: xMin,
yMax: xMax
};
}
function _convertRect(_ref2) {
var x = _ref2.x,
y = _ref2.y,
size = _ref2.size,
y0 = _ref2.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)) {
yMin = y[0];
yMax = 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 = /*#__PURE__*/function (_Layout) {
(0, _inherits2.default)(Base, _Layout);
var _super = (0, _createSuper2.default)(Base);
function Base(option) {
var _this;
(0, _classCallCheck2.default)(this, Base);
_this = _super.call(this, option);
// x y 调换
_this.transposed = false;
// x,y 的值域,在极坐标中对应的就是弧度和半径
_this.x = [0, 1];
_this.y = [0, 1];
_this.update(option);
return _this;
}
(0, _createClass2.default)(Base, [{
key: "update",
value: function update(option) {
(0, _get2.default)((0, _getPrototypeOf2.default)(Base.prototype), "update", this).call(this, option);
var left = this.left,
top = this.top,
width = this.width,
height = this.height;
var center = option.center;
var coordCenter = center ? (0, _util.isFunction)(center) ? center(width, height) : center : [width / 2, height / 2];
this.center = {
x: left + coordCenter[0],
y: top + coordCenter[1]
};
return this;
}
// 是循环, 比如极坐标是以 2π 循环的
}, {
key: "isCyclic",
value: function isCyclic() {
return false;
}
}, {
key: "_zoomVal",
value: function _zoomVal(val, func) {
return (0, _util.isArray)(val) ? val.map(function (v) {
return func(v);
}) : func(val);
}
/**
* 把归一后的值映射到对应的定义域
* @param point
*/
}, {
key: "convert",
value: function convert(point) {
var transposed = this.transposed,
x = this.x,
y = this.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 的反处理,把定义域的值,反处理到归一的值
*/
}, {
key: "invert",
value: function invert(point) {
var _ref3;
var transposed = this.transposed,
x = this.x,
y = this.y;
var xDim = transposed ? 'y' : 'x';
var yDim = transposed ? 'x' : 'y';
return _ref3 = {}, (0, _defineProperty2.default)(_ref3, xDim, this._zoomVal(point.x, function (v) {
return (v - x[0]) / (x[1] - x[0]);
})), (0, _defineProperty2.default)(_ref3, yDim, this._zoomVal(point.y, function (v) {
return (v - y[0]) / (y[1] - y[0]);
})), _ref3;
}
/**
* 把归一化的值映射到 canvas 的坐标点
* @param point
* @returns
*/
}, {
key: "convertPoint",
value: function convertPoint(point) {
return this.convert(point);
}
/**
* 把canvas坐标的点位映射回归一的值
*/
}, {
key: "invertPoint",
value: function invertPoint(point) {
return this.invert(point);
}
// 将标准坐标系下的矩形绘制关键点映射成实际绘制的坐标点
}, {
key: "convertRect",
value: function convertRect(rectPoint) {
var xRange = this.x,
yRange = this.y,
transposed = this.transposed;
var _xRange = (0, _slicedToArray2.default)(xRange, 2),
xStart = _xRange[0],
xEnd = _xRange[1];
var _yRange = (0, _slicedToArray2.default)(yRange, 2),
yStart = _yRange[0],
yEnd = _yRange[1];
var rect = _convertRect(rectPoint);
var _ref4 = transposed ? transposedRect(rect) : rect,
xMin = _ref4.xMin,
xMax = _ref4.xMax,
yMin = _ref4.yMin,
yMax = _ref4.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)
};
}
// 将已经映射好的矩形绘制关键点转换成实际绘制的坐标点
}, {
key: "transformToRect",
value: function transformToRect(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 _ref5 = transposed ? transposedRect(rect) : rect,
xMin = _ref5.xMin,
xMax = _ref5.xMax,
yMin = _ref5.yMin,
yMax = _ref5.yMax;
return {
xMin: xMin,
xMax: xMax,
yMin: yMin,
yMax: yMax
};
}
}]);
return Base;
}(_layout.default);
var _default = Base;
exports.default = _default;