Files
ThirdParty-6/ParaView-5.0.1/VTK/Web/JavaScript/Widgets/CatalystBrowser/vtkweb-composite-worker.js

116 lines
2.9 KiB
JavaScript

var layerVisibility = {},
orderMappping = {},
layerCount = {},
requestMap = {
'_': updateVisibility,
'w': processComposites,
'd': registerData,
's': updatePixelCount
},
compositeData = {},
needToUpdateOrderTable = true,
missingOrderKeys = true,
nbPixels = 100;
// ------------------------------------------------------------------
function updatePixelCount(nbPixelsSTR) {
nbPixels = Number(nbPixelsSTR);
}
// ------------------------------------------------------------------
function updateVisibility(query) {
var count = query.length;
for(var idx = 0; idx < count; idx += 2) {
layerVisibility[query[idx]] = (query[idx+1] != '_');
layerCount[query[idx]] = 0;
}
needToUpdateOrderTable = true;
}
// ------------------------------------------------------------------
function getLayer(order) {
var count = order.length;
for(var i = 0; i < count; ++i) {
if(layerVisibility[order[i]]) {
return order[i];
}
}
return '+';
}
// ------------------------------------------------------------------
function registerData(dataStr) {
var id_fields_data = dataStr.split('|');
compositeData[id_fields_data[0]] = { fields: JSON.parse(id_fields_data[1]), order: JSON.parse(id_fields_data[2]) };
missingOrderKeys = true;
}
// ------------------------------------------------------------------
function updateOrderKeys() {
if(missingOrderKeys) {
missingOrderKeys = false;
needToUpdateOrderTable = true;
for(var id in compositeData) {
var composite = compositeData[id].order;
for(var order in composite) {
orderMappping[order] = '+';
}
}
}
}
// ------------------------------------------------------------------
function computeOrderMap() {
if(needToUpdateOrderTable) {
needToUpdateOrderTable = false;
for(var order in orderMappping) {
orderMappping[order] = getLayer(order);
}
}
}
// ------------------------------------------------------------------
function resetLayerCount() {
for(var key in layerCount) {
layerCount[key] = 0;
}
return layerCount;
}
// ------------------------------------------------------------------
function processComposites() {
updateOrderKeys();
computeOrderMap();
for(var id in compositeData) {
var composite = compositeData[id].order,
layerCount = resetLayerCount();
for(var order in composite) {
layerCount[orderMappping[order]] += composite[order];
}
// Compute percentage
var ratio = 100 / nbPixels;
for(var layer in layerCount) {
layerCount[layer] *= ratio;
}
postMessage({id:id, count:layerCount, fields: compositeData[id].fields});
}
}
// ------------------------------------------------------------------
onmessage = function (event) {
requestMap[event.data[0]](event.data.substr(1));
}