123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- import { assign, isEmpty, isFunction, isNil, isNumber, isObject, isString, map } from '@antv/util';
- import { getTickMethod } from './tick-method/register';
- var Scale = /** @class */ (function () {
- function Scale(cfg) {
- /**
- * 度量的类型
- */
- this.type = 'base';
- /**
- * 是否分类类型的度量
- */
- this.isCategory = false;
- /**
- * 是否线性度量,有linear, time 度量
- */
- this.isLinear = false;
- /**
- * 是否连续类型的度量,linear,time,log, pow, quantile, quantize 都支持
- */
- this.isContinuous = false;
- /**
- * 是否是常量的度量,传入和传出一致
- */
- this.isIdentity = false;
- this.values = [];
- this.range = [0, 1];
- this.ticks = [];
- this.__cfg__ = cfg;
- this.initCfg();
- this.init();
- }
- // 对于原始值的必要转换,如分类、时间字段需转换成数值,用transform/map命名可能更好
- Scale.prototype.translate = function (v) {
- return v;
- };
- /** 重新初始化 */
- Scale.prototype.change = function (cfg) {
- // 覆盖配置项,而不替代
- assign(this.__cfg__, cfg);
- this.init();
- };
- Scale.prototype.clone = function () {
- return this.constructor(this.__cfg__);
- };
- /** 获取坐标轴需要的ticks */
- Scale.prototype.getTicks = function () {
- var _this = this;
- return map(this.ticks, function (tick, idx) {
- if (isObject(tick)) {
- // 仅当符合Tick类型时才有意义
- return tick;
- }
- return {
- text: _this.getText(tick, idx),
- tickValue: tick,
- value: _this.scale(tick),
- };
- });
- };
- /** 获取Tick的格式化结果 */
- Scale.prototype.getText = function (value, key) {
- var formatter = this.formatter;
- var res = formatter ? formatter(value, key) : value;
- if (isNil(res) || !isFunction(res.toString)) {
- return '';
- }
- return res.toString();
- };
- // 获取配置项中的值,当前 scale 上的值可能会被修改
- Scale.prototype.getConfig = function (key) {
- return this.__cfg__[key];
- };
- // scale初始化
- Scale.prototype.init = function () {
- assign(this, this.__cfg__);
- this.setDomain();
- if (isEmpty(this.getConfig('ticks'))) {
- this.ticks = this.calculateTicks();
- }
- };
- // 子类上覆盖某些属性,不能直接在类上声明,否则会被覆盖
- Scale.prototype.initCfg = function () { };
- Scale.prototype.setDomain = function () { };
- Scale.prototype.calculateTicks = function () {
- var tickMethod = this.tickMethod;
- var ticks = [];
- if (isString(tickMethod)) {
- var method = getTickMethod(tickMethod);
- if (!method) {
- throw new Error('There is no method to to calculate ticks!');
- }
- ticks = method(this);
- }
- else if (isFunction(tickMethod)) {
- ticks = tickMethod(this);
- }
- return ticks;
- };
- // range 的最小值
- Scale.prototype.rangeMin = function () {
- return this.range[0];
- };
- // range 的最大值
- Scale.prototype.rangeMax = function () {
- return this.range[1];
- };
- /** 定义域转 0~1 */
- Scale.prototype.calcPercent = function (value, min, max) {
- if (isNumber(value)) {
- return (value - min) / (max - min);
- }
- return NaN;
- };
- /** 0~1转定义域 */
- Scale.prototype.calcValue = function (percent, min, max) {
- return min + percent * (max - min);
- };
- return Scale;
- }());
- export default Scale;
- //# sourceMappingURL=base.js.map
|