Newer
Older
// jshint esversion: 6
const bpmData = {};
const corr = {};
function bpmMenu(lattice, facilities, params) {
if (document.location.search.indexOf('old')>-1) {bpmMenuOld(lattice, facilities, params); return;}
$('.bpmhor').css('display', 'none');
$('.bpmver').css('display', 'none');
params.bpm = document.location.search.indexOf('bpm')>-1 && document.location.search.indexOf('=bpm')==-1;
gui.add(params, 'bpm').name('bpm H <img id="h" src="red.svg" style="margin-bottom: -4px;"> V <img id="v" src="green.svg" style="margin-bottom: -4px;"> ').onChange(function() {bpmSwitch(bpmData, params);});
for (let f in facilities) {
const b = facilities[f];
if (b=='' || typeof bpmData[b] == 'undefined' || typeof lattice[b].bpm == 'undefined' || typeof lattice[b].bpm.orbitconf == 'undefined') continue;
console.log('bpmMenu() - ',b);
// bpmData[b].datasrc = lattice[b].bpm.orbithor+';'+lattice[b].bpm.orbitver;
bpmData[b].datasrc = lattice[b].bpm.orbithor;
bpmData[b].map = [];
fetch(conf.rchan+lattice[b].bpm.orbitconf)
.then((response) => {return response.json();})
.then((bpmData2) => {
let bpmCounter = 0;
let photoCounter = 0;
for (let i in bpmData2) {
const name = bpmData2[i];
if (name.indexOf(bpmData[b].skip)>-1) continue;
for (let bl in bpmData[b].obj) {
// console.log('b', bl, bpmData[b].obj, bpmData[b].obj[bl]);
if (name==bpmData[b].obj[bl]) {bpmData[b].map[bl] = bpmCounter; bpmCounter++;}
}
}
console.log('bpmMenu(), name', b, bpmData[b], lattice[b]);
});
}
if (document.location.search.indexOf('bpm')>-1) {params.bpm=true; bpmSwitch(bpmData, params);}
const threshold = document.location.search.indexOf('threshold=')>-1? document.location.search.split('threshold=')[1].split('&')[0]: 1000;
const f = document.location.search.indexOf('factor=')>-1? document.location.search.split('factor=')[1].split('&')[0]: 3000;
function bpmInit(facilities) {
console.log('bpmData', bpmData);
for (let fi in facilities) {
const facility = facilities[fi];
if (facility.length>0 && typeof bpmData[facility]!='undefined' && bpmData[facility].obj && bpmData[facility].obj.length>0) {
console.log('bpmInit', facility, bpmData[facility]);
const dhor = [];
const dver = [];
for (i=0; i<bpmData[facility].pos.length; i++) {
if (i>threshold) break;
const dir = bpmData[facility].dir[i];
const beta = Math.PI*dir/180;
if (threshold<1000) console.log('i', i, 'pos',bpmData[facility].pos[i], 'dir', dir, beta, Math.cos(beta), Math.sin(beta));
dhor.push((i==0?'M':'L')+
Math.round(bpmData[facility].pos[i][0] - f*Math.sin(beta)) + ' ' +
Math.round(bpmData[facility].pos[i][1] + f*Math.cos(beta))
);
dver.push((i==0?'M':'L')+
Math.round(bpmData[facility].pos[i][0] - f*1.05*Math.sin(beta)) + ' ' +
Math.round(bpmData[facility].pos[i][1] + f*1.05*Math.cos(beta))
);
}
appendSvg("path", {id:facility+"_bpmhor", class: "bpmhor "+facility, visibility:"hidden", name:"bpmhor", fill: "none", "stroke-width":"100", "stroke":"red", "stroke-opacity":"0.6", d: dhor.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')});
appendSvg("path", {id:facility+"_bpmver", class: "bpmver "+facility, visibility:"hidden", name:"bpmver", fill: "none", "stroke-width":"100", "stroke":"green", "stroke-opacity":"0.6", d: dver.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')});
console.log("path", {id:facility+"_bpmhor", name:"bpmhor", d: dver.join(' ')+' Z'});
if (bpmData.reader !== false) {
clearInterval(bpmData.reader);
}
for (let facility in bpmData) {
if (typeof $('#'+facility+"_bpmhor").attr('visibility') != 'undefined') {
$('#'+facility+"_bpmhor").attr('visibility', "hidden");
$('#'+facility+"_bpmver").attr('visibility', "hidden");
}
}
$('#application').hide();
$('#applicationFrame').removeAttr("src");
}
else {
const bpms = [];
for (let i in bpmData) if (i!="reader") bpms.push(i);
if (typeof $('#'+facility+"_bpmhor").attr('visibility') != 'undefined') {
$('#'+facility+"_bpmhor").attr('visibility', "visible");
$('#'+facility+"_bpmver").attr('visibility', "visible");
}
// console.log('#'+facility+"_bpmhor", $('#'+facility+"_bpmhor").attr('visibility'), typeof bpmData[facility]);
if (typeof bpmData[facility] == 'undefined' || typeof bpmData[facility].map == 'undefined') continue;
bpmData.reader = setInterval(bpmRead, 200, bpmData, params);
$('#application').show();
$('.bpmhor').css('display', 'block');
$('.bpmver').css('display', 'block');
$('#applicationFrame').attr("src", "/spa/index.html?s=bpm&src="+params.bpm+(document.location.search.indexOf('demo')>-1? '&demo': ''));
$("#applicationFrame").height(window.innerHeight);
}
}
function bpmRender(facility, val) {
const dhor = [];
const dver = [];
for (i=0; i<val.Hor.length; i++) {
// if (i>threshold) break;
const pos = bpmData[facility].pos[i];
if (pos==null) continue;
const beta = Math.PI*bpmData[facility].dir[i]/180;
// console.log('i', i, 'pos',pos, 'dir', bpmData[facility].dir[i], 'facility', facility, beta, Math.cos(beta), Math.sin(beta));
dhor.push((i==0?'M':'L')+
Math.round(pos[0] - val.Hor[i]*bpmFactor*Math.sin(beta)) + ' ' +
Math.round(pos[1] + val.Hor[i]*bpmFactor*Math.cos(beta))
Math.round(pos[0] - val.Ver[i]*bpmFactor*Math.sin(beta)) + ' ' +
Math.round(pos[1] + val.Ver[i]*bpmFactor*Math.cos(beta))
);
}
$('#'+facility+"_bpmhor").attr('d', dhor.join(' ')+(lattice[facility].sections[0].chamber?' Z':''));
$('#'+facility+"_bpmver").attr('d', dver.join(' ')+(lattice[facility].sections[0].chamber?' Z':''));
// console.log("bpmRender(),", {id:facility+"_bpmhor", name:"bpmhor", d: dver.join(' ')+' Z'});
// if (params.bpm) {bpmLabel(bpmData, params, camera, THREE);}
}
function bpmRead(bpmData, params) {
fetch(conf.bpmUrl)
.then((response) => {return response.json();})
.then((eventData) => {
// console.log('bpmRead()', i, eventData[i], conf.bpmUrl);