UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

117 lines (116 loc) 4.36 kB
import { __extends } from "../../../tslib/tslib.es6.mjs"; import { map } from "../../../zrender/lib/core/util.mjs"; import Scale from "./Scale.mjs"; import { round, quantity, getPrecision } from "../util/number.mjs"; import { contain, normalize, scale } from "./helper.mjs"; import IntervalScale from "./Interval.mjs"; var scaleProto = Scale.prototype; var intervalScaleProto = IntervalScale.prototype; var roundingErrorFix = round; var mathFloor = Math.floor; var mathCeil = Math.ceil; var mathPow = Math.pow; var mathLog = Math.log; var LogScale = function(_super) { __extends(LogScale2, _super); function LogScale2() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = "log"; _this.base = 10; _this._originalScale = new IntervalScale(); _this._interval = 0; return _this; } LogScale2.prototype.getTicks = function(expandToNicedExtent) { var originalScale = this._originalScale; var extent = this._extent; var originalExtent = originalScale.getExtent(); var ticks = intervalScaleProto.getTicks.call(this, expandToNicedExtent); return map(ticks, function(tick) { var val = tick.value; var powVal = round(mathPow(this.base, val)); powVal = val === extent[0] && this._fixMin ? fixRoundingError(powVal, originalExtent[0]) : powVal; powVal = val === extent[1] && this._fixMax ? fixRoundingError(powVal, originalExtent[1]) : powVal; return { value: powVal }; }, this); }; LogScale2.prototype.setExtent = function(start, end) { var base = mathLog(this.base); start = mathLog(Math.max(0, start)) / base; end = mathLog(Math.max(0, end)) / base; intervalScaleProto.setExtent.call(this, start, end); }; LogScale2.prototype.getExtent = function() { var base = this.base; var extent = scaleProto.getExtent.call(this); extent[0] = mathPow(base, extent[0]); extent[1] = mathPow(base, extent[1]); var originalScale = this._originalScale; var originalExtent = originalScale.getExtent(); this._fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0])); this._fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1])); return extent; }; LogScale2.prototype.unionExtent = function(extent) { this._originalScale.unionExtent(extent); var base = this.base; extent[0] = mathLog(extent[0]) / mathLog(base); extent[1] = mathLog(extent[1]) / mathLog(base); scaleProto.unionExtent.call(this, extent); }; LogScale2.prototype.unionExtentFromData = function(data, dim) { this.unionExtent(data.getApproximateExtent(dim)); }; LogScale2.prototype.calcNiceTicks = function(approxTickNum) { approxTickNum = approxTickNum || 10; var extent = this._extent; var span = extent[1] - extent[0]; if (span === Infinity || span <= 0) { return; } var interval = quantity(span); var err = approxTickNum / span * interval; if (err <= 0.5) { interval *= 10; } while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) { interval *= 10; } var niceExtent = [round(mathCeil(extent[0] / interval) * interval), round(mathFloor(extent[1] / interval) * interval)]; this._interval = interval; this._niceExtent = niceExtent; }; LogScale2.prototype.calcNiceExtent = function(opt) { intervalScaleProto.calcNiceExtent.call(this, opt); this._fixMin = opt.fixMin; this._fixMax = opt.fixMax; }; LogScale2.prototype.parse = function(val) { return val; }; LogScale2.prototype.contain = function(val) { val = mathLog(val) / mathLog(this.base); return contain(val, this._extent); }; LogScale2.prototype.normalize = function(val) { val = mathLog(val) / mathLog(this.base); return normalize(val, this._extent); }; LogScale2.prototype.scale = function(val) { val = scale(val, this._extent); return mathPow(this.base, val); }; LogScale2.type = "log"; return LogScale2; }(Scale); var proto = LogScale.prototype; proto.getMinorTicks = intervalScaleProto.getMinorTicks; proto.getLabel = intervalScaleProto.getLabel; function fixRoundingError(val, originalVal) { return roundingErrorFix(val, getPrecision(originalVal)); } Scale.registerClass(LogScale); var LogScale$1 = LogScale; export { LogScale$1 as default };