hefeihvac_java/node_modules/echarts-gl/lib/component/globe/GlobeModel.js

168 lines
4.9 KiB
JavaScript
Raw Permalink Normal View History

2024-04-07 18:15:00 +08:00
import * as echarts from 'echarts/lib/echarts';
import componentViewControlMixin from '../common/componentViewControlMixin';
import componentPostEffectMixin from '../common/componentPostEffectMixin';
import componentLightMixin from '../common/componentLightMixin';
import componentShadingMixin from '../common/componentShadingMixin';
function defaultId(option, idx) {
option.id = option.id || option.name || idx + '';
}
var GlobeModel = echarts.ComponentModel.extend({
type: 'globe',
layoutMode: 'box',
coordinateSystem: null,
init: function () {
GlobeModel.superApply(this, 'init', arguments);
echarts.util.each(this.option.layers, function (layerOption, idx) {
echarts.util.merge(layerOption, this.defaultLayerOption);
defaultId(layerOption, idx);
}, this);
},
mergeOption: function (option) {
// TODO test
var oldLayers = this.option.layers;
this.option.layers = null;
GlobeModel.superApply(this, 'mergeOption', arguments);
function createLayerMap(layers) {
return echarts.util.reduce(layers, function (obj, layerOption, idx) {
defaultId(layerOption, idx);
obj[layerOption.id] = layerOption;
return obj;
}, {});
}
if (oldLayers && oldLayers.length) {
var newLayerMap = createLayerMap(option.layers);
var oldLayerMap = createLayerMap(oldLayers);
for (var id in newLayerMap) {
if (oldLayerMap[id]) {
echarts.util.merge(oldLayerMap[id], newLayerMap[id], true);
} else {
oldLayers.push(option.layers[id]);
}
} // Copy back
this.option.layers = oldLayers;
} // else overwrite
// Set default
echarts.util.each(this.option.layers, function (layerOption) {
echarts.util.merge(layerOption, this.defaultLayerOption);
}, this);
},
optionUpdated: function () {
this.updateDisplacementHash();
},
defaultLayerOption: {
show: true,
type: 'overlay'
},
defaultOption: {
show: true,
zlevel: -10,
// Layout used for viewport
left: 0,
top: 0,
width: '100%',
height: '100%',
environment: 'auto',
baseColor: '#fff',
// Base albedo texture
baseTexture: '',
// Height texture for bump mapping and vertex displacement
heightTexture: '',
// Texture for vertex displacement, default use heightTexture
displacementTexture: '',
// Scale of vertex displacement, available only if displacementTexture is set.
displacementScale: 0,
// Detail of displacement. 'low', 'medium', 'high', 'ultra'
displacementQuality: 'medium',
// Globe radius
globeRadius: 100,
// Globe outer radius. Which is max of altitude.
globeOuterRadius: 150,
// Shading of globe
shading: 'lambert',
// Extend light
light: {
// Main sun light
main: {
// Time, default it will use system time
time: ''
}
},
// atmosphere
atmosphere: {
show: false,
offset: 5,
color: '#ffffff',
glowPower: 6.0,
innerGlowPower: 2.0
},
// light
// postEffect
// temporalSuperSampling
viewControl: {
autoRotate: true,
panSensitivity: 0,
targetCoord: null
},
// {
// show: true,
// name: 'cloud',
// type: 'overlay',
// shading: 'lambert',
// distance: 10,
// texture: ''
// }
// {
// type: 'blend',
// blendTo: 'albedo'
// blendType: 'source-over'
// }
layers: []
},
setDisplacementData: function (data, width, height) {
this.displacementData = data;
this.displacementWidth = width;
this.displacementHeight = height;
},
getDisplacementTexture: function () {
return this.get('displacementTexture') || this.get('heightTexture');
},
getDisplacemenScale: function () {
var displacementTexture = this.getDisplacementTexture();
var displacementScale = this.get('displacementScale');
if (!displacementTexture || displacementTexture === 'none') {
displacementScale = 0;
}
return displacementScale;
},
hasDisplacement: function () {
return this.getDisplacemenScale() > 0;
},
_displacementChanged: true,
_displacementScale: 0,
updateDisplacementHash: function () {
var displacementTexture = this.getDisplacementTexture();
var displacementScale = this.getDisplacemenScale();
this._displacementChanged = this._displacementTexture !== displacementTexture || this._displacementScale !== displacementScale;
this._displacementTexture = displacementTexture;
this._displacementScale = displacementScale;
},
isDisplacementChanged: function () {
return this._displacementChanged;
}
});
echarts.util.merge(GlobeModel.prototype, componentViewControlMixin);
echarts.util.merge(GlobeModel.prototype, componentPostEffectMixin);
echarts.util.merge(GlobeModel.prototype, componentLightMixin);
echarts.util.merge(GlobeModel.prototype, componentShadingMixin);
export default GlobeModel;