@antv/g2
Version:
the Grammar of Graphics in Javascript
112 lines • 3.56 kB
JavaScript
import { __extends } from "tslib";
import { each } from '@antv/util';
import TransformAction from './scale-transform';
/**
* 拖拽 Scale 的 Action
* @ignore
*/
var ScaleTranslate = /** @class */ (function (_super) {
__extends(ScaleTranslate, _super);
function ScaleTranslate() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.startPoint = null;
_this.starting = false;
_this.startCache = {};
return _this;
}
/**
* 开始
*/
ScaleTranslate.prototype.start = function () {
var _this = this;
this.startPoint = this.context.getCurrentPoint();
this.starting = true;
var dims = this.dims;
each(dims, function (dim) {
var scale = _this.getScale(dim);
var min = scale.min, max = scale.max, values = scale.values;
_this.startCache[dim] = { min: min, max: max, values: values };
});
};
// 平移分类的度量
// private translateCategory(dim, scale, normalPoint) {
// }
/**
* 结束
*/
ScaleTranslate.prototype.end = function () {
this.startPoint = null;
this.starting = false;
this.startCache = {};
};
/**
* 平移
*/
ScaleTranslate.prototype.translate = function () {
var _this = this;
if (!this.starting) {
return;
}
var startPoint = this.startPoint;
var coord = this.context.view.getCoordinate();
var currentPoint = this.context.getCurrentPoint();
var normalStart = coord.invert(startPoint);
var noramlCurrent = coord.invert(currentPoint);
var dx = noramlCurrent.x - normalStart.x;
var dy = noramlCurrent.y - normalStart.y;
var view = this.context.view;
var dims = this.dims;
each(dims, function (dim) {
_this.translateDim(dim, { x: dx * -1, y: dy * -1 });
});
view.render(true);
};
// 平移度量
ScaleTranslate.prototype.translateDim = function (dim, normalPoint) {
if (this.hasDim(dim)) {
var scale = this.getScale(dim);
if (scale.isLinear) {
this.translateLinear(dim, scale, normalPoint);
}
// else { // 暂时仅处理连续字段
// this.translateCategory(dim, scale, normalPoint);
// }
}
};
// linear 度量平移
ScaleTranslate.prototype.translateLinear = function (dim, scale, normalPoint) {
var view = this.context.view;
var _a = this.startCache[dim], min = _a.min, max = _a.max;
var range = max - min;
var d = normalPoint[dim] * range;
// 只有第一次缓存,否则无法回滚
if (!this.cacheScaleDefs[dim]) {
this.cacheScaleDefs[dim] = {
// @ts-ignore
nice: scale.nice,
min: min,
max: max,
};
}
view.scale(scale.field, {
// @ts-ignore
nice: false,
min: min + d,
max: max + d,
});
};
// 平移分类的度量
// private translateCategory(dim, scale, normalPoint) {
// }
/**
* 回滚
*/
ScaleTranslate.prototype.reset = function () {
_super.prototype.reset.call(this);
this.startPoint = null;
this.starting = false;
};
return ScaleTranslate;
}(TransformAction));
export default ScaleTranslate;
//# sourceMappingURL=scale-translate.js.map