You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
6.9 KiB
210 lines
6.9 KiB
1 month ago
|
|
||
|
/*
|
||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||
|
* or more contributor license agreements. See the NOTICE file
|
||
|
* distributed with this work for additional information
|
||
|
* regarding copyright ownership. The ASF licenses this file
|
||
|
* to you under the Apache License, Version 2.0 (the
|
||
|
* "License"); you may not use this file except in compliance
|
||
|
* with the License. You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing,
|
||
|
* software distributed under the License is distributed on an
|
||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||
|
* KIND, either express or implied. See the License for the
|
||
|
* specific language governing permissions and limitations
|
||
|
* under the License.
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||
|
* or more contributor license agreements. See the NOTICE file
|
||
|
* distributed with this work for additional information
|
||
|
* regarding copyright ownership. The ASF licenses this file
|
||
|
* to you under the Apache License, Version 2.0 (the
|
||
|
* "License"); you may not use this file except in compliance
|
||
|
* with the License. You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing,
|
||
|
* software distributed under the License is distributed on an
|
||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||
|
* KIND, either express or implied. See the License for the
|
||
|
* specific language governing permissions and limitations
|
||
|
* under the License.
|
||
|
*/
|
||
|
/**
|
||
|
* Single coordinates system.
|
||
|
*/
|
||
|
import SingleAxis from './SingleAxis.js';
|
||
|
import * as axisHelper from '../axisHelper.js';
|
||
|
import { getLayoutRect } from '../../util/layout.js';
|
||
|
import { each } from 'zrender/lib/core/util.js';
|
||
|
export var singleDimensions = ['single'];
|
||
|
/**
|
||
|
* Create a single coordinates system.
|
||
|
*/
|
||
|
var Single = /** @class */function () {
|
||
|
function Single(axisModel, ecModel, api) {
|
||
|
this.type = 'single';
|
||
|
this.dimension = 'single';
|
||
|
/**
|
||
|
* Add it just for draw tooltip.
|
||
|
*/
|
||
|
this.dimensions = singleDimensions;
|
||
|
this.axisPointerEnabled = true;
|
||
|
this.model = axisModel;
|
||
|
this._init(axisModel, ecModel, api);
|
||
|
}
|
||
|
/**
|
||
|
* Initialize single coordinate system.
|
||
|
*/
|
||
|
Single.prototype._init = function (axisModel, ecModel, api) {
|
||
|
var dim = this.dimension;
|
||
|
var axis = new SingleAxis(dim, axisHelper.createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisModel.get('position'));
|
||
|
var isCategory = axis.type === 'category';
|
||
|
axis.onBand = isCategory && axisModel.get('boundaryGap');
|
||
|
axis.inverse = axisModel.get('inverse');
|
||
|
axis.orient = axisModel.get('orient');
|
||
|
axisModel.axis = axis;
|
||
|
axis.model = axisModel;
|
||
|
axis.coordinateSystem = this;
|
||
|
this._axis = axis;
|
||
|
};
|
||
|
/**
|
||
|
* Update axis scale after data processed
|
||
|
*/
|
||
|
Single.prototype.update = function (ecModel, api) {
|
||
|
ecModel.eachSeries(function (seriesModel) {
|
||
|
if (seriesModel.coordinateSystem === this) {
|
||
|
var data_1 = seriesModel.getData();
|
||
|
each(data_1.mapDimensionsAll(this.dimension), function (dim) {
|
||
|
this._axis.scale.unionExtentFromData(data_1, dim);
|
||
|
}, this);
|
||
|
axisHelper.niceScaleExtent(this._axis.scale, this._axis.model);
|
||
|
}
|
||
|
}, this);
|
||
|
};
|
||
|
/**
|
||
|
* Resize the single coordinate system.
|
||
|
*/
|
||
|
Single.prototype.resize = function (axisModel, api) {
|
||
|
this._rect = getLayoutRect({
|
||
|
left: axisModel.get('left'),
|
||
|
top: axisModel.get('top'),
|
||
|
right: axisModel.get('right'),
|
||
|
bottom: axisModel.get('bottom'),
|
||
|
width: axisModel.get('width'),
|
||
|
height: axisModel.get('height')
|
||
|
}, {
|
||
|
width: api.getWidth(),
|
||
|
height: api.getHeight()
|
||
|
});
|
||
|
this._adjustAxis();
|
||
|
};
|
||
|
Single.prototype.getRect = function () {
|
||
|
return this._rect;
|
||
|
};
|
||
|
Single.prototype._adjustAxis = function () {
|
||
|
var rect = this._rect;
|
||
|
var axis = this._axis;
|
||
|
var isHorizontal = axis.isHorizontal();
|
||
|
var extent = isHorizontal ? [0, rect.width] : [0, rect.height];
|
||
|
var idx = axis.inverse ? 1 : 0;
|
||
|
axis.setExtent(extent[idx], extent[1 - idx]);
|
||
|
this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y);
|
||
|
};
|
||
|
Single.prototype._updateAxisTransform = function (axis, coordBase) {
|
||
|
var axisExtent = axis.getExtent();
|
||
|
var extentSum = axisExtent[0] + axisExtent[1];
|
||
|
var isHorizontal = axis.isHorizontal();
|
||
|
axis.toGlobalCoord = isHorizontal ? function (coord) {
|
||
|
return coord + coordBase;
|
||
|
} : function (coord) {
|
||
|
return extentSum - coord + coordBase;
|
||
|
};
|
||
|
axis.toLocalCoord = isHorizontal ? function (coord) {
|
||
|
return coord - coordBase;
|
||
|
} : function (coord) {
|
||
|
return extentSum - coord + coordBase;
|
||
|
};
|
||
|
};
|
||
|
/**
|
||
|
* Get axis.
|
||
|
*/
|
||
|
Single.prototype.getAxis = function () {
|
||
|
return this._axis;
|
||
|
};
|
||
|
/**
|
||
|
* Get axis, add it just for draw tooltip.
|
||
|
*/
|
||
|
Single.prototype.getBaseAxis = function () {
|
||
|
return this._axis;
|
||
|
};
|
||
|
Single.prototype.getAxes = function () {
|
||
|
return [this._axis];
|
||
|
};
|
||
|
Single.prototype.getTooltipAxes = function () {
|
||
|
return {
|
||
|
baseAxes: [this.getAxis()],
|
||
|
// Empty otherAxes
|
||
|
otherAxes: []
|
||
|
};
|
||
|
};
|
||
|
/**
|
||
|
* If contain point.
|
||
|
*/
|
||
|
Single.prototype.containPoint = function (point) {
|
||
|
var rect = this.getRect();
|
||
|
var axis = this.getAxis();
|
||
|
var orient = axis.orient;
|
||
|
if (orient === 'horizontal') {
|
||
|
return axis.contain(axis.toLocalCoord(point[0])) && point[1] >= rect.y && point[1] <= rect.y + rect.height;
|
||
|
} else {
|
||
|
return axis.contain(axis.toLocalCoord(point[1])) && point[0] >= rect.y && point[0] <= rect.y + rect.height;
|
||
|
}
|
||
|
};
|
||
|
Single.prototype.pointToData = function (point) {
|
||
|
var axis = this.getAxis();
|
||
|
return [axis.coordToData(axis.toLocalCoord(point[axis.orient === 'horizontal' ? 0 : 1]))];
|
||
|
};
|
||
|
/**
|
||
|
* Convert the series data to concrete point.
|
||
|
* Can be [val] | val
|
||
|
*/
|
||
|
Single.prototype.dataToPoint = function (val) {
|
||
|
var axis = this.getAxis();
|
||
|
var rect = this.getRect();
|
||
|
var pt = [];
|
||
|
var idx = axis.orient === 'horizontal' ? 0 : 1;
|
||
|
if (val instanceof Array) {
|
||
|
val = val[0];
|
||
|
}
|
||
|
pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val));
|
||
|
pt[1 - idx] = idx === 0 ? rect.y + rect.height / 2 : rect.x + rect.width / 2;
|
||
|
return pt;
|
||
|
};
|
||
|
Single.prototype.convertToPixel = function (ecModel, finder, value) {
|
||
|
var coordSys = getCoordSys(finder);
|
||
|
return coordSys === this ? this.dataToPoint(value) : null;
|
||
|
};
|
||
|
Single.prototype.convertFromPixel = function (ecModel, finder, pixel) {
|
||
|
var coordSys = getCoordSys(finder);
|
||
|
return coordSys === this ? this.pointToData(pixel) : null;
|
||
|
};
|
||
|
return Single;
|
||
|
}();
|
||
|
function getCoordSys(finder) {
|
||
|
var seriesModel = finder.seriesModel;
|
||
|
var singleModel = finder.singleAxisModel;
|
||
|
return singleModel && singleModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem;
|
||
|
}
|
||
|
export default Single;
|