// jshint esversion: 6 const bpmData = {}; const corr = {}; function bpmMenu(lattice, facilities, params) { if (document.location.search.indexOf('old')>-1) {bpmMenuOld(lattice, facilities, params); return;} params.bpm = false; $('.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'}); } } } function bpmSwitch(bpmData, params) { console.log('bpmSwitch()',bpmData, params, params.bpm); if (bpmData.reader !== false) { clearInterval(bpmData.reader); } bpmData.reader = false; if (params.bpm=='') { 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); console.log('bpms', bpms, bpmData); for (let facility in bpmData) { 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.oldIndex = facility; bpmRead(bpmData, params); } 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 = []; const bpmFactor = conf.bpmFactor[facility]*1000; 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)) ); dver.push((i==0?'M':'L')+ 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()', conf.bpmUrl, eventData); for (let i in eventData) { // console.log('bpmRead()', i, eventData[i], conf.bpmUrl); bpmRender(i, eventData[i]); } }); }