hefeihvac_java/node_modules/echarts-gl/lib/coord/grid3DCreator.js

170 lines
5.7 KiB
JavaScript
Raw Permalink Normal View History

2024-04-07 18:15:00 +08:00
import Cartesian3D from './grid3D/Cartesian3D';
import Axis3D from './grid3D/Axis3D';
import * as echarts from 'echarts/lib/echarts';
import { getLayoutRect } from 'echarts/lib/util/layout';
import ViewGL from '../core/ViewGL';
import retrieve from '../util/retrieve';
function resizeCartesian3D(grid3DModel, api) {
// Use left/top/width/height
var boxLayoutOption = grid3DModel.getBoxLayoutParams();
var viewport = getLayoutRect(boxLayoutOption, {
width: api.getWidth(),
height: api.getHeight()
}); // Flip Y
viewport.y = api.getHeight() - viewport.y - viewport.height;
this.viewGL.setViewport(viewport.x, viewport.y, viewport.width, viewport.height, api.getDevicePixelRatio());
var boxWidth = grid3DModel.get('boxWidth');
var boxHeight = grid3DModel.get('boxHeight');
var boxDepth = grid3DModel.get('boxDepth');
if (process.env.NODE_ENV !== 'production') {
['x', 'y', 'z'].forEach(function (dim) {
if (!this.getAxis(dim)) {
throw new Error('Grid' + grid3DModel.id + ' don\'t have ' + dim + 'Axis');
}
}, this);
}
this.getAxis('x').setExtent(-boxWidth / 2, boxWidth / 2); // From near to far
this.getAxis('y').setExtent(boxDepth / 2, -boxDepth / 2);
this.getAxis('z').setExtent(-boxHeight / 2, boxHeight / 2);
this.size = [boxWidth, boxHeight, boxDepth];
}
function updateCartesian3D(ecModel, api) {
var dataExtents = {};
function unionDataExtents(dim, extent) {
dataExtents[dim] = dataExtents[dim] || [Infinity, -Infinity];
dataExtents[dim][0] = Math.min(extent[0], dataExtents[dim][0]);
dataExtents[dim][1] = Math.max(extent[1], dataExtents[dim][1]);
} // Get data extents for scale.
ecModel.eachSeries(function (seriesModel) {
if (seriesModel.coordinateSystem !== this) {
return;
}
var data = seriesModel.getData();
['x', 'y', 'z'].forEach(function (coordDim) {
data.mapDimensionsAll(coordDim, true).forEach(function (dataDim) {
unionDataExtents(coordDim, data.getDataExtent(dataDim, true));
});
});
}, this);
['xAxis3D', 'yAxis3D', 'zAxis3D'].forEach(function (axisType) {
ecModel.eachComponent(axisType, function (axisModel) {
var dim = axisType.charAt(0);
var grid3DModel = axisModel.getReferringComponents('grid3D').models[0];
var cartesian3D = grid3DModel.coordinateSystem;
if (cartesian3D !== this) {
return;
}
var axis = cartesian3D.getAxis(dim);
if (axis) {
if (process.env.NODE_ENV !== 'production') {
console.warn('Can\'t have two %s in one grid3D', axisType);
}
return;
}
var scale = echarts.helper.createScale(dataExtents[dim] || [Infinity, -Infinity], axisModel);
axis = new Axis3D(dim, scale);
axis.type = axisModel.get('type');
var isCategory = axis.type === 'category';
axis.onBand = isCategory && axisModel.get('boundaryGap');
axis.inverse = axisModel.get('inverse');
axisModel.axis = axis;
axis.model = axisModel; // override `echarts/coord/Axis#getLabelModel`
axis.getLabelModel = function () {
return axisModel.getModel('axisLabel', grid3DModel.getModel('axisLabel'));
}; // override `echarts/coord/Axis#getTickModel`
axis.getTickModel = function () {
return axisModel.getModel('axisTick', grid3DModel.getModel('axisTick'));
};
cartesian3D.addAxis(axis);
}, this);
}, this);
this.resize(this.model, api);
}
var grid3DCreator = {
dimensions: Cartesian3D.prototype.dimensions,
create: function (ecModel, api) {
var cartesian3DList = [];
ecModel.eachComponent('grid3D', function (grid3DModel) {
// FIXME
grid3DModel.__viewGL = grid3DModel.__viewGL || new ViewGL();
var cartesian3D = new Cartesian3D();
cartesian3D.model = grid3DModel;
cartesian3D.viewGL = grid3DModel.__viewGL;
grid3DModel.coordinateSystem = cartesian3D;
cartesian3DList.push(cartesian3D); // Inject resize and update
cartesian3D.resize = resizeCartesian3D;
cartesian3D.update = updateCartesian3D;
});
var axesTypes = ['xAxis3D', 'yAxis3D', 'zAxis3D'];
function findAxesModels(seriesModel, ecModel) {
return axesTypes.map(function (axisType) {
var axisModel = seriesModel.getReferringComponents(axisType).models[0];
if (axisModel == null) {
axisModel = ecModel.getComponent(axisType);
}
if (process.env.NODE_ENV !== 'production') {
if (!axisModel) {
throw new Error(axisType + ' "' + retrieve.firstNotNull(seriesModel.get(axisType + 'Index'), seriesModel.get(axisType + 'Id'), 0) + '" not found');
}
}
return axisModel;
});
}
ecModel.eachSeries(function (seriesModel) {
if (seriesModel.get('coordinateSystem') !== 'cartesian3D') {
return;
}
var firstGridModel = seriesModel.getReferringComponents('grid3D').models[0];
if (firstGridModel == null) {
var axesModels = findAxesModels(seriesModel, ecModel);
var firstGridModel = axesModels[0].getCoordSysModel();
axesModels.forEach(function (axisModel) {
var grid3DModel = axisModel.getCoordSysModel();
if (process.env.NODE_ENV !== 'production') {
if (!grid3DModel) {
throw new Error('grid3D "' + retrieve.firstNotNull(axisModel.get('gridIndex'), axisModel.get('gridId'), 0) + '" not found');
}
if (grid3DModel !== firstGridModel) {
throw new Error('xAxis3D, yAxis3D, zAxis3D must use the same grid');
}
}
});
}
var coordSys = firstGridModel.coordinateSystem;
seriesModel.coordinateSystem = coordSys;
});
return cartesian3DList;
}
};
export default grid3DCreator;