NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/scale/lib/linear.js
2023-09-14 14:47:11 +08:00

226 lines
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
/**
* @fileOverview The measurement of linear data scale function
* @author dxq613@gmail.com
*/
var isNil = require('@antv/util/lib/type/is-nil');
var each = require('@antv/util/lib/each');
var Base = require('./base');
var numberAuto = require('./auto/number');
/**
* 线性度量
* @class Scale.Linear
*/
var Linear = /*#__PURE__*/function (_Base) {
_inheritsLoose(Linear, _Base);
function Linear() {
return _Base.apply(this, arguments) || this;
}
var _proto = Linear.prototype;
_proto._initDefaultCfg = function _initDefaultCfg() {
_Base.prototype._initDefaultCfg.call(this);
var self = this;
self.type = 'linear';
self.isLinear = true;
/**
* 是否为了用户习惯优化min,max和ticks如果进行优化则会根据生成的ticks调整min,max否则舍弃(min,max)范围之外的ticks
* @type {Boolean}
* @default false
*/
self.nice = false;
/**
* min value of the scale
* @type {Number}
* @default null
*/
self.min = null;
/**
* min value limitted of the scale
* @type {Number}
* @default null
*/
self.minLimit = null;
/**
* max value of the scale
* @type {Number}
* @default null
*/
self.max = null;
/**
* max value limitted of the scale
* @type {Number}
* @default null
*/
self.maxLimit = null;
/**
* 自动生成标记时的个数
* @type {Number}
* @default null
*/
self.tickCount = null;
/**
* 坐标轴点之间的间距,指的是真实数据的差值
* @type {Number}
* @default null
*/
self.tickInterval = null;
/**
* 坐标轴点之间的最小间距,指的是真实数据的差值
* @type {Number}
* @default null
*/
self.minTickInterval = null;
/**
* 用于计算坐标点时逼近的数组
* @type {Array}
*/
self.snapArray = null;
}
/**
* @protected
* @override
*/
;
_proto.init = function init() {
var self = this;
if (!self.ticks) {
self.min = self.translate(self.min);
self.max = self.translate(self.max);
self.initTicks();
} else {
var ticks = self.ticks;
var firstValue = self.translate(ticks[0]);
var lastValue = self.translate(ticks[ticks.length - 1]);
if (isNil(self.min) || self.min > firstValue) {
self.min = firstValue;
}
if (isNil(self.max) || self.max < lastValue) {
self.max = lastValue;
}
}
}
/**
* 计算坐标点
* @protected
* @return {Array} 计算完成的坐标点
*/
;
_proto.calculateTicks = function calculateTicks() {
var min = this.min,
max = this.max,
minLimit = this.minLimit,
maxLimit = this.maxLimit,
tickCount = this.tickCount,
tickInterval = this.tickInterval,
minTickInterval = this.minTickInterval,
snapArray = this.snapArray;
if (tickCount === 1) {
throw new Error('linear scale\'tickCount should not be 1');
}
if (max < min) {
throw new Error("max: " + max + " should not be less than min: " + min);
}
var tmp = numberAuto({
min: min,
max: max,
minLimit: minLimit,
maxLimit: maxLimit,
minCount: tickCount,
maxCount: tickCount,
interval: tickInterval,
minTickInterval: minTickInterval,
snapArray: snapArray
});
return tmp.ticks;
} // 初始化ticks
;
_proto.initTicks = function initTicks() {
var self = this;
var calTicks = self.calculateTicks();
if (self.nice) {
// 如果需要优化显示的tick
self.ticks = calTicks;
self.min = calTicks[0];
self.max = calTicks[calTicks.length - 1];
} else {
var ticks = [];
each(calTicks, function (tick) {
if (tick >= self.min && tick <= self.max) {
ticks.push(tick);
}
}); // 如果 ticks 为空,直接输入最小值、最大值
if (!ticks.length) {
ticks.push(self.min);
ticks.push(self.max);
}
self.ticks = ticks;
}
}
/**
* @override
*/
;
_proto.scale = function scale(value) {
if (isNil(value)) {
return NaN;
}
var max = this.max;
var min = this.min;
if (max === min) {
return 0;
}
var percent = (value - min) / (max - min);
var rangeMin = this.rangeMin();
var rangeMax = this.rangeMax();
return rangeMin + percent * (rangeMax - rangeMin);
}
/**
* @override
*/
;
_proto.invert = function invert(value) {
var percent = (value - this.rangeMin()) / (this.rangeMax() - this.rangeMin());
return this.min + percent * (this.max - this.min);
};
return Linear;
}(Base);
Base.Linear = Linear;
module.exports = Linear;