181 lines
17 KiB
Java
181 lines
17 KiB
Java
![]() |
"use strict";
|
|||
|
|
|||
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|||
|
|
|||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|||
|
|
|||
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|||
|
|
|||
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|||
|
|
|||
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|||
|
|
|||
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|||
|
|
|||
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|||
|
|
|||
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|||
|
|
|||
|
function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
|
|||
|
|
|||
|
function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
|
|||
|
|
|||
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|||
|
|
|||
|
/**
|
|||
|
* @fileOverview the class of Helix Coordinate
|
|||
|
* @author sima.zhang
|
|||
|
*/
|
|||
|
var MatrixUtil = require('@antv/util/lib/matrix/');
|
|||
|
|
|||
|
var isNumberEqual = require('@antv/util/lib/math/is-number-equal');
|
|||
|
|
|||
|
var mix = require('@antv/util/lib/mix');
|
|||
|
|
|||
|
var Base = require('./base');
|
|||
|
|
|||
|
var vec2 = MatrixUtil.vec2;
|
|||
|
|
|||
|
var Helix =
|
|||
|
/*#__PURE__*/
|
|||
|
function (_Base) {
|
|||
|
_inherits(Helix, _Base);
|
|||
|
|
|||
|
_createClass(Helix, [{
|
|||
|
key: "getDefaultCfg",
|
|||
|
value: function getDefaultCfg() {
|
|||
|
var cfg = _get(_getPrototypeOf(Helix.prototype), "getDefaultCfg", this).call(this);
|
|||
|
|
|||
|
return mix({}, cfg, {
|
|||
|
startAngle: 1.25 * Math.PI,
|
|||
|
endAngle: 7.25 * Math.PI,
|
|||
|
innerRadius: 0,
|
|||
|
type: 'helix',
|
|||
|
isHelix: true
|
|||
|
});
|
|||
|
}
|
|||
|
}]);
|
|||
|
|
|||
|
function Helix(cfg) {
|
|||
|
var _this;
|
|||
|
|
|||
|
_classCallCheck(this, Helix);
|
|||
|
|
|||
|
_this = _possibleConstructorReturn(this, _getPrototypeOf(Helix).call(this, cfg));
|
|||
|
|
|||
|
_this._init();
|
|||
|
|
|||
|
return _this;
|
|||
|
}
|
|||
|
|
|||
|
_createClass(Helix, [{
|
|||
|
key: "_init",
|
|||
|
value: function _init() {
|
|||
|
var width = this.width;
|
|||
|
var height = this.height;
|
|||
|
var radius = this.radius;
|
|||
|
var innerRadius = this.innerRadius;
|
|||
|
var startAngle = this.startAngle;
|
|||
|
var endAngle = this.endAngle;
|
|||
|
var index = (endAngle - startAngle) / (2 * Math.PI) + 1; // 螺线圈数
|
|||
|
|
|||
|
var maxRadius = Math.min(width, height) / 2;
|
|||
|
|
|||
|
if (radius && radius >= 0 && radius <= 1) {
|
|||
|
maxRadius = maxRadius * radius;
|
|||
|
}
|
|||
|
|
|||
|
var d = Math.floor(maxRadius * (1 - innerRadius) / index);
|
|||
|
var a = d / (Math.PI * 2); // 螺线系数
|
|||
|
|
|||
|
var x = {
|
|||
|
start: startAngle,
|
|||
|
end: endAngle
|
|||
|
};
|
|||
|
var y = {
|
|||
|
start: innerRadius * maxRadius,
|
|||
|
end: innerRadius * maxRadius + d * 0.99
|
|||
|
};
|
|||
|
this.a = a;
|
|||
|
this.d = d;
|
|||
|
this.x = x;
|
|||
|
this.y = y;
|
|||
|
}
|
|||
|
}, {
|
|||
|
key: "getCenter",
|
|||
|
value: function getCenter() {
|
|||
|
return this.center;
|
|||
|
}
|
|||
|
/**
|
|||
|
* 将百分比数据变成屏幕坐标
|
|||
|
* @param {Object} point 归一化的点坐标
|
|||
|
* @return {Object} 返回对应的屏幕坐标
|
|||
|
*/
|
|||
|
|
|||
|
}, {
|
|||
|
key: "convertPoint",
|
|||
|
value: function convertPoint(point) {
|
|||
|
var a = this.a;
|
|||
|
var center = this.center;
|
|||
|
var x;
|
|||
|
var y;
|
|||
|
|
|||
|
if (this.isTransposed) {
|
|||
|
x = point.y;
|
|||
|
y = point.x;
|
|||
|
} else {
|
|||
|
x = point.x;
|
|||
|
y = point.y;
|
|||
|
}
|
|||
|
|
|||
|
var thi = this.convertDim(x, 'x');
|
|||
|
var r = a * thi;
|
|||
|
var newY = this.convertDim(y, 'y');
|
|||
|
return {
|
|||
|
x: center.x + Math.cos(thi) * (r + newY),
|
|||
|
y: center.y + Math.sin(thi) * (r + newY)
|
|||
|
};
|
|||
|
}
|
|||
|
/**
|
|||
|
* 将屏幕坐标点还原成百分比数据
|
|||
|
* @param {Object} point 屏幕坐标
|
|||
|
* @return {Object} 返回对应的归一化后的数据
|
|||
|
*/
|
|||
|
|
|||
|
}, {
|
|||
|
key: "invertPoint",
|
|||
|
value: function invertPoint(point) {
|
|||
|
var center = this.center;
|
|||
|
var a = this.a;
|
|||
|
var d = this.d + this.y.start;
|
|||
|
var v = vec2.subtract([], [point.x, point.y], [center.x, center.y]);
|
|||
|
var thi = vec2.angleTo(v, [1, 0], true);
|
|||
|
var rMin = thi * a; // 坐标与原点的连线在第一圈上的交点,最小r值
|
|||
|
|
|||
|
if (vec2.length(v) < rMin) {
|
|||
|
// 坐标与原点的连线不可能小于最小r值,但不排除因小数计算产生的略小于rMin的情况
|
|||
|
rMin = vec2.length(v);
|
|||
|
}
|
|||
|
|
|||
|
var index = Math.floor((vec2.length(v) - rMin) / d); // 当前点位于第index圈
|
|||
|
|
|||
|
thi = 2 * index * Math.PI + thi;
|
|||
|
var r = a * thi;
|
|||
|
var newY = vec2.length(v) - r;
|
|||
|
newY = isNumberEqual(newY, 0) ? 0 : newY;
|
|||
|
var x = this.invertDim(thi, 'x');
|
|||
|
var y = this.invertDim(newY, 'y');
|
|||
|
x = isNumberEqual(x, 0) ? 0 : x;
|
|||
|
y = isNumberEqual(y, 0) ? 0 : y;
|
|||
|
var rst = {};
|
|||
|
rst.x = this.isTransposed ? y : x;
|
|||
|
rst.y = this.isTransposed ? x : y;
|
|||
|
return rst;
|
|||
|
}
|
|||
|
}]);
|
|||
|
|
|||
|
return Helix;
|
|||
|
}(Base);
|
|||
|
|
|||
|
module.exports = Helix;
|
|||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxpeC5qcyJdLCJuYW1lcyI6WyJNYXRyaXhVdGlsIiwicmVxdWlyZSIsImlzTnVtYmVyRXF1YWwiLCJtaXgiLCJCYXNlIiwidmVjMiIsIkhlbGl4IiwiY2ZnIiwic3RhcnRBbmdsZSIsIk1hdGgiLCJQSSIsImVuZEFuZ2xlIiwiaW5uZXJSYWRpdXMiLCJ0eXBlIiwiaXNIZWxpeCIsIl9pbml0Iiwid2lkdGgiLCJoZWlnaHQiLCJyYWRpdXMiLCJpbmRleCIsIm1heFJhZGl1cyIsIm1pbiIsImQiLCJmbG9vciIsImEiLCJ4Iiwic3RhcnQiLCJlbmQiLCJ5IiwiY2VudGVyIiwicG9pbnQiLCJpc1RyYW5zcG9zZWQiLCJ0aGkiLCJjb252ZXJ0RGltIiwiciIsIm5ld1kiLCJjb3MiLCJzaW4iLCJ2Iiwic3VidHJhY3QiLCJhbmdsZVRvIiwick1pbiIsImxlbmd0aCIsImludmVydERpbSIsInJzdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBSUEsSUFBTUEsVUFBVSxHQUFHQyxPQUFPLENBQUMsd0JBQUQsQ0FBMUI7O0FBQ0EsSUFBTUMsYUFBYSxHQUFHRCxPQUFPLENBQUMscUNBQUQsQ0FBN0I7O0FBQ0EsSUFBTUUsR0FBRyxHQUFHRixPQUFPLENBQUMsb0JBQUQsQ0FBbkI7O0FBQ0EsSUFBTUcsSUFBSSxHQUFHSCxPQUFPLENBQUMsUUFBRCxDQUFwQjs7QUFFQSxJQUFNSSxJQUFJLEdBQUdMLFVBQVUsQ0FBQ0ssSUFBeEI7O0lBRU1DLEs7Ozs7Ozs7b0NBRVk7QUFDZCxVQUFNQyxHQUFHLDJFQUFUOztBQUNBLGFBQU9KLEdBQUcsQ0FBQyxFQUFELEVBQUtJLEdBQUwsRUFBVTtBQUNsQkMsUUFBQUEsVUFBVSxFQUFFLE9BQU9DLElBQUksQ0FBQ0MsRUFETjtBQUVsQkMsUUFBQUEsUUFBUSxFQUFFLE9BQU9GLElBQUksQ0FBQ0MsRUFGSjtBQUdsQkUsUUFBQUEsV0FBVyxF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
|