blob: c8df4c963f1c9ceef58645e9a12e471849e4a050 [file] [log] [blame]
import * as echarts from '../../echarts';
import * as zrUtil from 'zrender/src/core/util';
import * as visualSolution from '../../visual/visualSolution';
import VisualMapping from '../../visual/VisualMapping';
echarts.registerVisual(echarts.PRIORITY.VISUAL.COMPONENT, function (ecModel) {
ecModel.eachComponent('visualMap', function (visualMapModel) {
processSingleVisualMap(visualMapModel, ecModel);
});
prepareVisualMeta(ecModel);
});
function processSingleVisualMap(visualMapModel, ecModel) {
visualMapModel.eachTargetSeries(function (seriesModel) {
var data = seriesModel.getData();
visualSolution.applyVisual(visualMapModel.stateList, visualMapModel.targetVisuals, data, visualMapModel.getValueState, visualMapModel, visualMapModel.getDataDimension(data));
});
} // Only support color.
function prepareVisualMeta(ecModel) {
ecModel.eachSeries(function (seriesModel) {
var data = seriesModel.getData();
var visualMetaList = [];
ecModel.eachComponent('visualMap', function (visualMapModel) {
if (visualMapModel.isTargetSeries(seriesModel)) {
var visualMeta = visualMapModel.getVisualMeta(zrUtil.bind(getColorVisual, null, seriesModel, visualMapModel)) || {
stops: [],
outerColors: []
};
visualMeta.dimension = visualMapModel.getDataDimension(data);
visualMetaList.push(visualMeta);
}
}); // console.log(JSON.stringify(visualMetaList.map(a => a.stops)));
seriesModel.getData().setVisual('visualMeta', visualMetaList);
});
} // FIXME
// performance and export for heatmap?
// value can be Infinity or -Infinity
function getColorVisual(seriesModel, visualMapModel, value, valueState) {
var mappings = visualMapModel.targetVisuals[valueState];
var visualTypes = VisualMapping.prepareVisualTypes(mappings);
var resultVisual = {
color: seriesModel.getData().getVisual('color') // default color.
};
for (var i = 0, len = visualTypes.length; i < len; i++) {
var type = visualTypes[i];
var mapping = mappings[type === 'opacity' ? '__alphaForOpacity' : type];
mapping && mapping.applyVisual(value, getVisual, setVisual);
}
return resultVisual.color;
function getVisual(key) {
return resultVisual[key];
}
function setVisual(key, value) {
resultVisual[key] = value;
}
}