695 lines
28 KiB
Java
695 lines
28 KiB
Java
![]() |
import { __assign, __extends } from "tslib";
|
|||
|
import { deepMix, each, get, isUndefined } from '@antv/util';
|
|||
|
import { COMPONENT_TYPE, DIRECTION, LAYER } from '../../constant';
|
|||
|
import { CircleAxis, CircleGrid, LineAxis, LineGrid } from '../../dependents';
|
|||
|
import { DEFAULT_ANIMATE_CFG } from '../../animate/';
|
|||
|
import { getAxisDirection, getAxisFactorByRegion, getAxisRegion, getAxisThemeCfg, getAxisTitleText, getCircleAxisCenterRadius } from '../../util/axis';
|
|||
|
import { getAxisOption } from '../../util/axis';
|
|||
|
import { getCircleGridItems, getGridThemeCfg, getLineGridItems, showGrid } from '../../util/grid';
|
|||
|
import { omit } from '../../util/helper';
|
|||
|
import { Controller } from './base';
|
|||
|
// update 组件的时候,忽略的数据更新
|
|||
|
var OMIT_CFG = ['container'];
|
|||
|
// 坐标轴默认动画配置
|
|||
|
var AXIS_DEFAULT_ANIMATE_CFG = __assign(__assign({}, DEFAULT_ANIMATE_CFG), { appear: null });
|
|||
|
/**
|
|||
|
* @ignore
|
|||
|
* G2 Axis controller, will:
|
|||
|
* - create component
|
|||
|
* - axis
|
|||
|
* - grid
|
|||
|
* - life circle
|
|||
|
*/
|
|||
|
var Axis = /** @class */ (function (_super) {
|
|||
|
__extends(Axis, _super);
|
|||
|
function Axis(view) {
|
|||
|
var _this = _super.call(this, view) || this;
|
|||
|
/** 使用 object 存储组件 */
|
|||
|
_this.cache = new Map();
|
|||
|
// 先创建 gridContainer,将 grid 放到 axis 底层
|
|||
|
_this.gridContainer = _this.view.getLayer(LAYER.BG).addGroup();
|
|||
|
_this.axisContainer = _this.view.getLayer(LAYER.BG).addGroup();
|
|||
|
return _this;
|
|||
|
}
|
|||
|
Object.defineProperty(Axis.prototype, "name", {
|
|||
|
get: function () {
|
|||
|
return 'axis';
|
|||
|
},
|
|||
|
enumerable: false,
|
|||
|
configurable: true
|
|||
|
});
|
|||
|
Axis.prototype.init = function () { };
|
|||
|
Axis.prototype.render = function () {
|
|||
|
this.option = this.view.getOptions().axes;
|
|||
|
this.createXAxes();
|
|||
|
this.createYAxes();
|
|||
|
};
|
|||
|
/**
|
|||
|
* 更新组件布局,位置大小
|
|||
|
*/
|
|||
|
Axis.prototype.layout = function () {
|
|||
|
var _this = this;
|
|||
|
var coordinate = this.view.getCoordinate();
|
|||
|
each(this.getComponents(), function (co) {
|
|||
|
var component = co.component, direction = co.direction, type = co.type, extra = co.extra;
|
|||
|
var dim = extra.dim, scale = extra.scale, alignTick = extra.alignTick;
|
|||
|
var updated;
|
|||
|
if (type === COMPONENT_TYPE.AXIS) {
|
|||
|
if (coordinate.isPolar) {
|
|||
|
if (dim === 'x') {
|
|||
|
updated = coordinate.isTransposed ? getAxisRegion(coordinate, direction) : getCircleAxisCenterRadius(coordinate);
|
|||
|
}
|
|||
|
else if (dim === 'y') {
|
|||
|
updated = coordinate.isTransposed ? getCircleAxisCenterRadius(coordinate) : getAxisRegion(coordinate, direction);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
updated = getAxisRegion(coordinate, direction);
|
|||
|
}
|
|||
|
}
|
|||
|
else if (type === COMPONENT_TYPE.GRID) {
|
|||
|
if (coordinate.isPolar) {
|
|||
|
var items = void 0;
|
|||
|
if (coordinate.isTransposed) {
|
|||
|
items = dim === 'x' ?
|
|||
|
getCircleGridItems(coordinate, _this.view.getYScales()[0], scale, alignTick, dim) :
|
|||
|
getLineGridItems(coordinate, scale, dim, alignTick);
|
|||
|
}
|
|||
|
else {
|
|||
|
items = dim === 'x' ?
|
|||
|
getLineGridItems(coordinate, scale, dim, alignTick) :
|
|||
|
getCircleGridItems(coordinate, _this.view.getXScale(), scale, alignTick, dim);
|
|||
|
}
|
|||
|
updated = {
|
|||
|
items: items,
|
|||
|
// coordinate 更新之后,center 也变化了
|
|||
|
center: _this.view.getCoordinate().getCenter(),
|
|||
|
};
|
|||
|
}
|
|||
|
else {
|
|||
|
updated = { items: getLineGridItems(coordinate, scale, dim, alignTick) };
|
|||
|
}
|
|||
|
}
|
|||
|
component.update(updated);
|
|||
|
});
|
|||
|
};
|
|||
|
/**
|
|||
|
* 更新 axis 组件
|
|||
|
*/
|
|||
|
Axis.prototype.update = function () {
|
|||
|
this.option = this.view.getOptions().axes;
|
|||
|
var updatedCache = new Map();
|
|||
|
this.updateXAxes(updatedCache);
|
|||
|
this.updateYAxes(updatedCache);
|
|||
|
// 处理完成之后,销毁删除的
|
|||
|
// 不在处理中的
|
|||
|
var newCache = new Map();
|
|||
|
this.cache.forEach(function (co, key) {
|
|||
|
if (updatedCache.has(key)) {
|
|||
|
newCache.set(key, co);
|
|||
|
}
|
|||
|
else {
|
|||
|
// 不存在,则是所有需要被销毁的组件
|
|||
|
co.component.destroy();
|
|||
|
}
|
|||
|
});
|
|||
|
// 更新缓存
|
|||
|
this.cache = newCache;
|
|||
|
};
|
|||
|
Axis.prototype.clear = function () {
|
|||
|
_super.prototype.clear.call(this);
|
|||
|
this.cache.clear();
|
|||
|
this.gridContainer.clear();
|
|||
|
this.axisContainer.clear();
|
|||
|
};
|
|||
|
Axis.prototype.destroy = function () {
|
|||
|
_super.prototype.destroy.call(this);
|
|||
|
this.gridContainer.remove(true);
|
|||
|
this.axisContainer.remove(true);
|
|||
|
};
|
|||
|
/**
|
|||
|
* @override
|
|||
|
*/
|
|||
|
Axis.prototype.getComponents = function () {
|
|||
|
var co = [];
|
|||
|
this.cache.forEach(function (value) {
|
|||
|
co.push(value);
|
|||
|
});
|
|||
|
return co;
|
|||
|
};
|
|||
|
/**
|
|||
|
* 更新 x axis
|
|||
|
* @param updatedCache
|
|||
|
*/
|
|||
|
Axis.prototype.updateXAxes = function (updatedCache) {
|
|||
|
// x axis
|
|||
|
var scale = this.view.getXScale();
|
|||
|
// @ts-ignore
|
|||
|
if (!scale || scale.isIdentity) {
|
|||
|
return;
|
|||
|
}
|
|||
|
var field = scale.field;
|
|||
|
var xAxisOption = getAxisOption(this.option, scale.field);
|
|||
|
if (xAxisOption === false) {
|
|||
|
return;
|
|||
|
}
|
|||
|
var coordinate = this.view.getCoordinate();
|
|||
|
var axisId = this.getId('axis', field);
|
|||
|
var gridId = this.getId('grid', field);
|
|||
|
var direction = getAxisDirection(xAxisOption, DIRECTION.BOTTOM);
|
|||
|
var layer = LAYER.BG;
|
|||
|
var dim = 'x';
|
|||
|
if (coordinate.isRect) {
|
|||
|
// 1. do axis update
|
|||
|
var axis = this.cache.get(axisId);
|
|||
|
// 存在则更新
|
|||
|
if (axis) {
|
|||
|
var cfg = this.getLineAxisCfg(scale, xAxisOption, direction);
|
|||
|
omit(cfg, OMIT_CFG);
|
|||
|
axis.component.update(cfg);
|
|||
|
updatedCache.set(axisId, axis);
|
|||
|
}
|
|||
|
else {
|
|||
|
// 不存在,则创建
|
|||
|
axis = this.createLineAxis(scale, xAxisOption, layer, direction, dim);
|
|||
|
this.cache.set(axisId, axis);
|
|||
|
updatedCache.set(axisId, axis);
|
|||
|
}
|
|||
|
// 2. do grid update
|
|||
|
var grid = this.cache.get(gridId);
|
|||
|
// 存在则更新
|
|||
|
if (grid) {
|
|||
|
var cfg = this.getLineGridCfg(scale, xAxisOption, direction, dim);
|
|||
|
omit(cfg, OMIT_CFG);
|
|||
|
grid.component.update(cfg);
|
|||
|
updatedCache.set(gridId, grid);
|
|||
|
}
|
|||
|
else {
|
|||
|
// 不存在则创建
|
|||
|
grid = this.createLineGrid(scale, xAxisOption, layer, direction, dim);
|
|||
|
if (grid) {
|
|||
|
this.cache.set(gridId, grid);
|
|||
|
updatedCache.set(gridId, grid);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else if (coordinate.isPolar) {
|
|||
|
// 1. do axis update
|
|||
|
var axis = this.cache.get(axisId);
|
|||
|
// 存在则更新
|
|||
|
if (axis) {
|
|||
|
var cfg = coordinate.isTransposed ?
|
|||
|
// @ts-ignore
|
|||
|
this.getLineAxisCfg(scale, xAxisOption, 'radius') :
|
|||
|
this.getCircleAxisCfg(scale, xAxisOption, direction);
|
|||
|
omit(cfg, OMIT_CFG);
|
|||
|
axis.component.update(cfg);
|
|||
|
updatedCache.set(axisId, axis);
|
|||
|
}
|
|||
|
else {
|
|||
|
// 不存在,则创建
|
|||
|
if (coordinate.isTransposed) {
|
|||
|
if (isUndefined(xAxisOption)) {
|
|||
|
// 默认不渲染转置极坐标下的坐标轴
|
|||
|
return;
|
|||
|
}
|
|||
|
else {
|
|||
|
// @ts-ignore
|
|||
|
axis = this.createLineAxis(scale, xAxisOption, layer, 'radius', dim);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
axis = this.createCircleAxis(scale, xAxisOption, layer, direction, dim);
|
|||
|
}
|
|||
|
this.cache.set(axisId, axis);
|
|||
|
updatedCache.set(axisId, axis);
|
|||
|
}
|
|||
|
// 2. do grid update
|
|||
|
var grid = this.cache.get(gridId);
|
|||
|
// 存在则更新
|
|||
|
if (grid) {
|
|||
|
var cfg = coordinate.isTransposed ?
|
|||
|
// @ts-ignore
|
|||
|
this.getCircleGridCfg(scale, xAxisOption, 'radius', dim) :
|
|||
|
// @ts-ignore
|
|||
|
this.getLineGridCfg(scale, xAxisOption, 'circle', dim);
|
|||
|
omit(cfg, OMIT_CFG);
|
|||
|
grid.component.update(cfg);
|
|||
|
updatedCache.set(gridId, grid);
|
|||
|
}
|
|||
|
else {
|
|||
|
// 不存在则创建
|
|||
|
if (coordinate.isTransposed) {
|
|||
|
if (isUndefined(xAxisOption)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
else {
|
|||
|
// @ts-ignore
|
|||
|
grid = this.createCircleGrid(scale, xAxisOption, layer, 'radius', dim);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
// @ts-ignore
|
|||
|
grid = this.createLineGrid(scale, xAxisOption, layer, 'circle', dim);
|
|||
|
}
|
|||
|
if (grid) {
|
|||
|
this.cache.set(gridId, grid);
|
|||
|
updatedCache.set(gridId, grid);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
// helix and other, do not draw axis
|
|||
|
}
|
|||
|
};
|
|||
|
Axis.prototype.updateYAxes = function (updatedCache) {
|
|||
|
var _this = this;
|
|||
|
// y axes
|
|||
|
var yScales = this.view.getYScales();
|
|||
|
each(yScales, function (scale, idx) {
|
|||
|
// @ts-ignore
|
|||
|
if (!scale || scale.isIdentity) {
|
|||
|
return;
|
|||
|
}
|
|||
|
var field = scale.field;
|
|||
|
var yAxisOption = getAxisOption(_this.option, field);
|
|||
|
if (yAxisOption !== false) {
|
|||
|
var layer = LAYER.BG;
|
|||
|
var dim = 'y';
|
|||
|
var axisId = _this.getId('axis', field);
|
|||
|
var gridId = _this.getId('grid', field);
|
|||
|
var coordinate = _this.view.getCoordinate();
|
|||
|
if (coordinate.isRect) {
|
|||
|
var direction = getAxisDirection(yAxisOption, idx === 0 ? DIRECTION.LEFT : DIRECTION.RIGHT);
|
|||
|
// 1. do axis update
|
|||
|
var axis = _this.cache.get(axisId);
|
|||
|
// 存在则更新
|
|||
|
if (axis) {
|
|||
|
var cfg = _this.getLineAxisCfg(scale, yAxisOption, direction);
|
|||
|
omit(cfg, OMIT_CFG);
|
|||
|
axis.component.update(cfg);
|
|||
|
updatedCache.set(axisId, axis);
|
|||
|
}
|
|||
|
else {
|
|||
|
// 不存在,则创建
|
|||
|
axis = _this.createLineAxis(scale, yAxisOption, layer, direction, dim);
|
|||
|
_this.cache.set(axisId, axis);
|
|||
|
updatedCache.set(axisId, axis);
|
|||
|
}
|
|||
|
// 2. do grid update
|
|||
|
var grid = _this.cache.get(gridId);
|
|||
|
// 存在则更新
|
|||
|
if (grid) {
|
|||
|
var cfg = _this.getLineGridCfg(scale, yAxisOption, direction, dim);
|
|||
|
omit(cfg, OMIT_CFG);
|
|||
|
grid.component.update(cfg);
|
|||
|
updatedCache.set(gridId, grid);
|
|||
|
}
|
|||
|
else {
|
|||
|
// 不存在则创建
|
|||
|
grid = _this.createLineGrid(scale, yAxisOption, layer, direction, dim);
|
|||
|
if (grid) {
|
|||
|
_this.cache.set(gridId, grid);
|
|||
|
updatedCache.set(gridId, grid);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else if (coordinate.isPolar) {
|
|||
|
// 1. do axis update
|
|||
|
var axis = _this.cache.get(axisId);
|
|||
|
// 存在则更新
|
|||
|
if (axis) {
|
|||
|
var cfg = coordinate.isTransposed ?
|
|||
|
// @ts-ignore
|
|||
|
_this.getCircleAxisCfg(scale, yAxisOption, 'circle') :
|
|||
|
// @ts-ignore
|
|||
|
_this.getLineAxisCfg(scale, yAxisOption, 'radius');
|
|||
|
// @ts-ignore
|
|||
|
omit(cfg, OMIT_CFG);
|
|||
|
axis.component.update(cfg);
|
|||
|
updatedCache.set(axisId, axis);
|
|||
|
}
|
|||
|
else {
|
|||
|
// 不存在,则创建
|
|||
|
if (coordinate.isTransposed) {
|
|||
|
if (isUndefined(yAxisOption)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
else {
|
|||
|
// @ts-ignore
|
|||
|
axis = _this.createCircleAxis(scale, yAxisOption, layer, 'circle', dim);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
// @ts-ignore
|
|||
|
axis = _this.createLineAxis(scale, yAxisOption, layer, 'radius', dim);
|
|||
|
}
|
|||
|
_this.cache.set(axisId, axis);
|
|||
|
updatedCache.set(axisId, axis);
|
|||
|
}
|
|||
|
// 2. do grid update
|
|||
|
var grid = _this.cache.get(gridId);
|
|||
|
// 存在则更新
|
|||
|
if (grid) {
|
|||
|
var cfg = coordinate.isTransposed ?
|
|||
|
// @ts-ignore
|
|||
|
_this.getLineGridCfg(scale, yAxisOption, 'circle', dim) :
|
|||
|
// @ts-ignore
|
|||
|
_this.getCircleGridCfg(scale, yAxisOption, 'radius', dim);
|
|||
|
omit(cfg, OMIT_CFG);
|
|||
|
grid.component.update(cfg);
|
|||
|
updatedCache.set(gridId, grid);
|
|||
|
}
|
|||
|
else {
|
|||
|
// 不存在则创建
|
|||
|
if (coordinate.isTransposed) {
|
|||
|
if (isUndefined(yAxisOption)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
else {
|
|||
|
// @ts-ignore
|
|||
|
grid = _this.createLineGrid(scale, yAxisOption, layer, 'circle', dim);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
// @ts-ignore
|
|||
|
grid = _this.createCircleGrid(scale, yAxisOption, layer, 'radius', dim);
|
|||
|
}
|
|||
|
if (grid) {
|
|||
|
_this.cache.set(gridId, grid);
|
|||
|
updatedCache.set(gridId, grid);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
// helix and other, do not draw axis
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
};
|
|||
|
/**
|
|||
|
* 创建 x axis 组件
|
|||
|
*/
|
|||
|
Axis.prototype.createXAxes = function () {
|
|||
|
// x axis
|
|||
|
var scale = this.view.getXScale();
|
|||
|
if (!scale || scale.isIdentity) {
|
|||
|
return;
|
|||
|
}
|
|||
|
var xAxisOption = getAxisOption(this.option, scale.field);
|
|||
|
if (xAxisOption !== false) {
|
|||
|
var direction = getAxisDirection(xAxisOption, DIRECTION.BOTTOM);
|
|||
|
var layer = LAYER.BG;
|
|||
|
var dim = 'x';
|
|||
|
var coordinate = this.view.getCoordinate();
|
|||
|
var axisId = this.getId('axis', scale.field);
|
|||
|
var gridId = this.getId('grid', scale.field);
|
|||
|
if (coordinate.isRect) {
|
|||
|
// axis
|
|||
|
var axis = this.createLineAxis(scale, xAxisOption, layer, direction, dim);
|
|||
|
this.cache.set(axisId, axis);
|
|||
|
// grid
|
|||
|
var grid = this.createLineGrid(scale, xAxisOption, layer, direction, dim);
|
|||
|
if (grid) {
|
|||
|
this.cache.set(gridId, grid);
|
|||
|
}
|
|||
|
}
|
|||
|
else if (coordinate.isPolar) {
|
|||
|
var axis = void 0;
|
|||
|
var grid = void 0;
|
|||
|
if (coordinate.isTransposed) {
|
|||
|
if (isUndefined(xAxisOption)) {
|
|||
|
// 默认不渲染转置极坐标的坐标轴
|
|||
|
return;
|
|||
|
}
|
|||
|
else {
|
|||
|
// 如果用户打开了隐藏的坐标轴 chart.axis(true)/chart.axis('x', true)
|
|||
|
// 那么对于转置了的极坐标,半径轴显示的是 x 轴对应的数据
|
|||
|
// @ts-ignore
|
|||
|
axis = this.createLineAxis(scale, xAxisOption, layer, 'radius', dim);
|
|||
|
// @ts-ignore
|
|||
|
grid = this.createCircleGrid(scale, xAxisOption, layer, 'radius', dim);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
axis = this.createCircleAxis(scale, xAxisOption, layer, direction, dim);
|
|||
|
// grid,极坐标下的 x 轴网格线沿着半径方向绘制
|
|||
|
// @ts-ignore
|
|||
|
grid = this.createLineGrid(scale, xAxisOption, layer, 'circle', dim);
|
|||
|
}
|
|||
|
this.cache.set(axisId, axis);
|
|||
|
if (grid) {
|
|||
|
this.cache.set(gridId, grid);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
// helix and other, do not draw axis
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
/**
|
|||
|
* create y axis
|
|||
|
*/
|
|||
|
Axis.prototype.createYAxes = function () {
|
|||
|
var _this = this;
|
|||
|
// y axes
|
|||
|
var yScales = this.view.getYScales();
|
|||
|
each(yScales, function (scale, idx) {
|
|||
|
// @ts-ignore
|
|||
|
if (!scale || scale.isIdentity) {
|
|||
|
return;
|
|||
|
}
|
|||
|
var field = scale.field;
|
|||
|
var yAxisOption = getAxisOption(_this.option, field);
|
|||
|
if (yAxisOption !== false) {
|
|||
|
var layer = LAYER.BG;
|
|||
|
var dim = 'y';
|
|||
|
var axisId = _this.getId('axis', field);
|
|||
|
var gridId = _this.getId('grid', field);
|
|||
|
var coordinate = _this.view.getCoordinate();
|
|||
|
if (coordinate.isRect) {
|
|||
|
var direction = getAxisDirection(yAxisOption, idx === 0 ? DIRECTION.LEFT : DIRECTION.RIGHT);
|
|||
|
// axis
|
|||
|
var axis = _this.createLineAxis(scale, yAxisOption, layer, direction, dim);
|
|||
|
_this.cache.set(axisId, axis);
|
|||
|
// grid
|
|||
|
var grid = _this.createLineGrid(scale, yAxisOption, layer, direction, dim);
|
|||
|
if (grid) {
|
|||
|
_this.cache.set(gridId, grid);
|
|||
|
}
|
|||
|
}
|
|||
|
else if (coordinate.isPolar) {
|
|||
|
var axis = void 0;
|
|||
|
var grid = void 0;
|
|||
|
if (coordinate.isTransposed) {
|
|||
|
if (isUndefined(yAxisOption)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
else {
|
|||
|
// @ts-ignore
|
|||
|
axis = _this.createCircleAxis(scale, yAxisOption, layer, 'circle', dim);
|
|||
|
// @ts-ignore
|
|||
|
grid = _this.createLineGrid(scale, yAxisOption, layer, 'circle', dim);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
// @ts-ignore
|
|||
|
axis = _this.createLineAxis(scale, yAxisOption, layer, 'radius', dim);
|
|||
|
// @ts-ignore
|
|||
|
grid = _this.createCircleGrid(scale, yAxisOption, layer, 'radius', dim);
|
|||
|
}
|
|||
|
_this.cache.set(_this.getId('axis', scale.field), axis);
|
|||
|
if (grid) {
|
|||
|
_this.cache.set(gridId, grid);
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
// helix and other, do not draw axis
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
};
|
|||
|
/**
|
|||
|
* 创建 line axis
|
|||
|
* @param scale
|
|||
|
* @param option
|
|||
|
* @param layer
|
|||
|
* @param direction
|
|||
|
* @param dim
|
|||
|
*/
|
|||
|
Axis.prototype.createLineAxis = function (scale, option, layer, direction, dim) {
|
|||
|
// axis
|
|||
|
var axis = {
|
|||
|
component: new LineAxis(this.getLineAxisCfg(scale, option, direction)),
|
|||
|
layer: layer,
|
|||
|
// @ts-ignore
|
|||
|
direction: direction === 'radius' ? DIRECTION.NONE : direction,
|
|||
|
type: COMPONENT_TYPE.AXIS,
|
|||
|
extra: { dim: dim, scale: scale },
|
|||
|
};
|
|||
|
axis.component.set('field', scale.field);
|
|||
|
axis.component.init();
|
|||
|
return axis;
|
|||
|
};
|
|||
|
Axis.prototype.createLineGrid = function (scale, option, layer, direction, dim) {
|
|||
|
var cfg = this.getLineGridCfg(scale, option, direction, dim);
|
|||
|
if (cfg) {
|
|||
|
var grid = {
|
|||
|
component: new LineGrid(cfg),
|
|||
|
layer: layer,
|
|||
|
direction: DIRECTION.NONE,
|
|||
|
type: COMPONENT_TYPE.GRID,
|
|||
|
extra: {
|
|||
|
dim: dim,
|
|||
|
scale: scale,
|
|||
|
alignTick: get(cfg, 'alignTick', true),
|
|||
|
},
|
|||
|
};
|
|||
|
grid.component.init();
|
|||
|
return grid;
|
|||
|
}
|
|||
|
};
|
|||
|
Axis.prototype.createCircleAxis = function (scale, option, layer, direction, dim) {
|
|||
|
var axis = {
|
|||
|
component: new CircleAxis(this.getCircleAxisCfg(scale, option, direction)),
|
|||
|
layer: layer,
|
|||
|
direction: direction,
|
|||
|
type: COMPONENT_TYPE.AXIS,
|
|||
|
extra: { dim: dim, scale: scale },
|
|||
|
};
|
|||
|
axis.component.set('field', scale.field);
|
|||
|
axis.component.init();
|
|||
|
return axis;
|
|||
|
};
|
|||
|
Axis.prototype.createCircleGrid = function (scale, option, layer, direction, dim) {
|
|||
|
var cfg = this.getCircleGridCfg(scale, option, direction, dim);
|
|||
|
if (cfg) {
|
|||
|
var grid = {
|
|||
|
component: new CircleGrid(cfg),
|
|||
|
layer: layer,
|
|||
|
direction: DIRECTION.NONE,
|
|||
|
type: COMPONENT_TYPE.GRID,
|
|||
|
extra: {
|
|||
|
dim: dim,
|
|||
|
scale: scale,
|
|||
|
alignTick: get(cfg, 'alignTick', true),
|
|||
|
},
|
|||
|
};
|
|||
|
grid.component.init();
|
|||
|
return grid;
|
|||
|
}
|
|||
|
};
|
|||
|
/**
|
|||
|
* generate line axis cfg
|
|||
|
* @param scale
|
|||
|
* @param axisOption
|
|||
|
* @param direction
|
|||
|
* @return line axis cfg
|
|||
|
*/
|
|||
|
Axis.prototype.getLineAxisCfg = function (scale, axisOption, direction) {
|
|||
|
var container = this.axisContainer;
|
|||
|
var coordinate = this.view.getCoordinate();
|
|||
|
var region = getAxisRegion(coordinate, direction);
|
|||
|
var titleText = getAxisTitleText(scale, axisOption);
|
|||
|
var axisThemeCfg = getAxisThemeCfg(this.view.getTheme(), direction);
|
|||
|
// the cfg order should be ensure
|
|||
|
var optionWithTitle = get(axisOption, ['title'])
|
|||
|
? deepMix({ title: { style: { text: titleText } } }, axisOption)
|
|||
|
: axisOption;
|
|||
|
var cfg = deepMix(__assign(__assign({ container: container }, region), { ticks: scale.getTicks().map(function (tick) { return ({ id: "" + tick.tickValue, name: tick.text, value: tick.value }); }), verticalFactor: coordinate.isPolar
|
|||
|
? getAxisFactorByRegion(region, coordinate.getCenter()) * -1
|
|||
|
: getAxisFactorByRegion(region, coordinate.getCenter()) }), axisThemeCfg, optionWithTitle);
|
|||
|
var _a = this.getAnimateCfg(cfg), animate = _a.animate, animateOption = _a.animateOption;
|
|||
|
cfg.animateOption = animateOption;
|
|||
|
cfg.animate = animate;
|
|||
|
return cfg;
|
|||
|
};
|
|||
|
/**
|
|||
|
* generate line grid cfg
|
|||
|
* @param scale
|
|||
|
* @param axisOption
|
|||
|
* @param direction
|
|||
|
* @param dim
|
|||
|
* @return line grid cfg
|
|||
|
*/
|
|||
|
Axis.prototype.getLineGridCfg = function (scale, axisOption, direction, dim) {
|
|||
|
if (!showGrid(getAxisThemeCfg(this.view.getTheme(), direction), axisOption)) {
|
|||
|
return undefined;
|
|||
|
}
|
|||
|
var gridThemeCfg = getGridThemeCfg(this.view.getTheme(), direction);
|
|||
|
// the cfg order should be ensure
|
|||
|
// grid 动画以 axis 为准
|
|||
|
var gridCfg = deepMix({
|
|||
|
container: this.gridContainer,
|
|||
|
}, gridThemeCfg, get(axisOption, 'grid'), this.getAnimateCfg(axisOption));
|
|||
|
gridCfg.items = getLineGridItems(this.view.getCoordinate(), scale, dim, get(gridCfg, 'alignTick', true));
|
|||
|
return gridCfg;
|
|||
|
};
|
|||
|
/**
|
|||
|
* generate circle axis cfg
|
|||
|
* @param scale
|
|||
|
* @param axisOption
|
|||
|
* @param direction
|
|||
|
* @return circle axis cfg
|
|||
|
*/
|
|||
|
Axis.prototype.getCircleAxisCfg = function (scale, axisOption, direction) {
|
|||
|
var container = this.axisContainer;
|
|||
|
var coordinate = this.view.getCoordinate();
|
|||
|
var ticks = scale.getTicks().map(function (tick) { return ({ id: "" + tick.tickValue, name: tick.text, value: tick.value }); });
|
|||
|
if (!scale.isCategory && Math.abs(coordinate.endAngle - coordinate.startAngle) === Math.PI * 2) {
|
|||
|
// x 轴对应的值如果是非 cat 类型,在整圆的情况下坐标轴第一个和最后一个文本会重叠,默认只展示第一个文本
|
|||
|
ticks.pop();
|
|||
|
}
|
|||
|
var titleText = getAxisTitleText(scale, axisOption);
|
|||
|
var axisThemeCfg = getAxisThemeCfg(this.view.getTheme(), 'circle');
|
|||
|
// the cfg order should be ensure
|
|||
|
var optionWithTitle = get(axisOption, ['title'])
|
|||
|
? deepMix({ title: { style: { text: titleText } } }, axisOption)
|
|||
|
: axisOption;
|
|||
|
var cfg = deepMix(__assign(__assign({ container: container }, getCircleAxisCenterRadius(this.view.getCoordinate())), { ticks: ticks, verticalFactor: 1 }), axisThemeCfg, optionWithTitle);
|
|||
|
var _a = this.getAnimateCfg(cfg), animate = _a.animate, animateOption = _a.animateOption;
|
|||
|
cfg.animate = animate;
|
|||
|
cfg.animateOption = animateOption;
|
|||
|
return cfg;
|
|||
|
};
|
|||
|
/**
|
|||
|
* generate circle grid cfg
|
|||
|
* @param scale
|
|||
|
* @param axisOption
|
|||
|
* @param direction
|
|||
|
* @return circle grid cfg
|
|||
|
*/
|
|||
|
Axis.prototype.getCircleGridCfg = function (scale, axisOption, direction, dim) {
|
|||
|
if (!showGrid(getAxisThemeCfg(this.view.getTheme(), direction), axisOption)) {
|
|||
|
return undefined;
|
|||
|
}
|
|||
|
// the cfg order should be ensure
|
|||
|
// grid 动画以 axis 为准
|
|||
|
// @ts-ignore
|
|||
|
var gridThemeCfg = getGridThemeCfg(this.view.getTheme(), 'radius');
|
|||
|
var gridCfg = deepMix({
|
|||
|
container: this.gridContainer,
|
|||
|
center: this.view.getCoordinate().getCenter(),
|
|||
|
}, gridThemeCfg, get(axisOption, 'grid'), this.getAnimateCfg(axisOption));
|
|||
|
var alignTick = get(gridCfg, 'alignTick', true);
|
|||
|
var verticalScale = dim === 'x' ? this.view.getYScales()[0] : this.view.getXScale();
|
|||
|
gridCfg.items = getCircleGridItems(this.view.getCoordinate(), verticalScale, scale, alignTick, dim);
|
|||
|
// the cfg order should be ensure
|
|||
|
// grid 动画以 axis 为准
|
|||
|
return gridCfg;
|
|||
|
};
|
|||
|
Axis.prototype.getId = function (name, key) {
|
|||
|
var coordinate = this.view.getCoordinate();
|
|||
|
// 坐标系类型也作为组件的 key
|
|||
|
return name + "-" + key + "-" + coordinate.type;
|
|||
|
};
|
|||
|
Axis.prototype.getAnimateCfg = function (cfg) {
|
|||
|
return {
|
|||
|
animate: this.view.getOptions().animate && get(cfg, 'animate'),
|
|||
|
animateOption: cfg && cfg.animateOption ? deepMix({}, AXIS_DEFAULT_ANIMATE_CFG, cfg.animateOption) : AXIS_DEFAULT_ANIMATE_CFG,
|
|||
|
};
|
|||
|
};
|
|||
|
return Axis;
|
|||
|
}(Controller));
|
|||
|
export default Axis;
|
|||
|
//# sourceMappingURL=axis.js.map
|