diff --git a/simulator2d.js b/simulator2d.js index 32032fe3bc61caab724b42f697cf94efc847a433..911e5fd67483004dd5b3b442838136ef2d0ecec9 100644 --- a/simulator2d.js +++ b/simulator2d.js @@ -17,6 +17,8 @@ factorsVer = {"": 1000, "position": 5000, 'beta': 0.25, 'eta': 100, 'mu': 0.2, 'sigma': 5000000}; } const simulator = document.location.search.indexOf('simulator=')>-1? document.location.search.split('simulator=')[1].split('&')[0]: ''; + const readerPeriod = document.location.search.indexOf('readerPeriod=')>-1? document.location.search.split('readerPeriod=')[1].split('&')[0]: 200; + const displayerPeriod = document.location.search.indexOf('displayerPeriod=')>-1? document.location.search.split('displayerPeriod=')[1].split('&')[0]: 200; const visibility = simulator==''? 'hidden': 'visible'; const scaleType = 'slider'; let scaleHor; @@ -27,25 +29,85 @@ let logScaleVer = false; let simulatorFactorHor = document.location.search.indexOf('simulatorFactorHor=')>-1? document.location.search.split('simulatorFactorHor=')[1].split('&')[0]*1000*(simulator=='sigma'? 1000000: 1): factorsHor[simulator]*1000; let simulatorFactorVer = document.location.search.indexOf('simulatorFactorVer=')>-1? document.location.search.split('simulatorFactorVer=')[1].split('&')[0]*1000*(simulator=='sigma'? 1000000: 1): factorsVer[simulator]*1000; - function elapseSaturated() {scaleSaturated = false;} + const scaleSteps = 5; + function elapseHor(step) { + console.log('elapseHor()',step,scaleHor.$fill.style.width, 100 - (scaleSteps-step)/scaleSteps*90); + scaleSaturated = false; + if (scaleHor.$fill.style.width=="100%") { + if (step<scaleSteps) {const pc = Math.round(100 - (scaleSteps-step)/scaleSteps*90); scaleHor.$fill.style.width=pc+"%";setTimeout(elapseHor, 1000, step+1); return;} + const buf = scaleHor._max; + scaleHor.max(buf*10); + scaleHor.min(buf/10); + scaleHor.step(buf/100); + } + else if (scaleHor.$fill.style.width=="0%") { + if (step<scaleSteps) {const pc = Math.round(step/scaleSteps*10); scaleHor.$fill.style.width=pc+"%";setTimeout(elapseHor, 200, step+1); return;} + const buf = scaleHor._max/10; + scaleHor.max(buf); + scaleHor.min(buf/100); + scaleHor.step(buf/1000); + } + scaleHor.$fill.style.width="10%"; + scaleHor.$fill.style.borderColor = '#2cc9ff'; + } + function elapseVer(step) { + scaleSaturated = false; + if (scaleVer.$fill.style.width=="100%") { + const buf = scaleVer._max; + scaleVer.max(buf*10); + scaleVer.min(buf/10); + scaleVer.step(buf/100); + // + } + else if (scaleVer.$fill.style.width=="0%") { + const buf = scaleVer._max/10; + scaleVer.max(buf); + scaleVer.min(buf/100); + scaleVer.step(buf/1000); + } + scaleVer.$fill.style.width="10%"; + } + function finishHor() { + console.log('finishHor()', scaleHor.$fill.style.width); + if (scaleHor.$fill.style.width=="100%" || scaleHor.$fill.style.width=="0%") { + // scaleHor.$fill.style.borderColor = 'yellow'; + setTimeout(elapseHor, 200, 1); + } + } + function finishVer() { + console.log('finishHor()', scaleHor.$fill.style.width); + if (scaleSaturated) setTimeout(elapseVer, 100, 1); + } function factorHor(v) { - console.log('factorHor()', v); - if (scaleHor._max*1000000 == v*1000000 && v<1000000000000 && !scaleSaturated) {scaleSaturated = true; setTimeout(elapseSaturated, 3000); const buf = scaleHor._max; scaleHor.max(buf*10); scaleHor.min(buf/10); scaleHor.step(buf/100);} - else if (scaleHor._min*1000000 == v*1000000 && v>0.000000000001 && !scaleSaturated) {scaleSaturated = true; setTimeout(elapseSaturated, 3000); const buf = scaleHor._max/10; scaleHor.max(buf); scaleHor.min(buf/100);scaleHor.step(buf/1000);} + scaleHor.$fill.style.borderColor = (scaleHor.$fill.style.width=="100%" || scaleHor.$fill.style.width=="0%")? 'yellow': '#2cc9ff'; simulatorFactorHor = v * 1000; } function factorVer(v) { - console.log('factorVer()', v); - if (scaleVer._max == v && v<1000000000000 && !scaleSaturated) {scaleSaturated = true; setTimeout(elapseSaturated, 3000); const buf = scaleVer._max; scaleVer.max(buf*10); scaleVer.min(buf/10); scaleVer.step(buf/100);} - else if (scaleVer._min == v && v>0.000000000001 && !scaleSaturated) {scaleSaturated = true; setTimeout(elapseSaturated, 3000); const buf = scaleVer._max/10; scaleVer.max(buf); scaleVer.min(buf/100);scaleVer.step(buf/1000);} simulatorFactorVer = v * 1000; } function logscale(dirNum) { if (dirNum==0) logScaleHor = $('#logHor').attr('checked')=='checked'; else logScaleVer = $('#logVer').attr('checked')=='checked'; } + function decademinus(id) { + const buf = scaleHor._max/10; scaleHor.max(buf); scaleHor.min(buf/100);scaleHor.step(buf/1000); + console.log(id, scaleHor._max); + } + function decadeplus(id) { + const buf = scaleHor._max; scaleHor.max(buf*10); scaleHor.min(buf/10); scaleHor.step(buf/100); + console.log(id, scaleHor._max); + } + function guiscale(gui, id) { + const i = gui.children.length - 1; + gui.children[i].domElement.style.display = 'none'; + gui.children[i].domElement.children[0].innerHTML = '<span style="padding: 5px;" onClick="decademinus(\''+id+'\')">-</span> '+ gui.children[i].domElement.children[0].innerHTML + ' <span style="padding: 3px;" onClick="decadeplus(\''+id+'\')">+</span>'; + gui.children[i].domElement.setAttribute('id', id); + } function simulatorMenu(lattice, facilities, params) { - console.log('simulatorMenu',lattice, facilities, params); + console.log('simulatorMenu',lattice, facilities, params, gui); + if (['elettra2', 'esrf', 'soleil'].indexOf(machine)>-1) for (let i=0; i<gui.children.length; i++) { + if (['vlv', 'ps', 'bpm', 'blm'].indexOf(gui.children[i].property)>-1) gui.children[i].domElement.style.display = 'none'; + } // params.simulator = false; $('.simulatorhor').css('display', 'none'); $('.simulatorver').css('display', 'none'); @@ -58,9 +120,11 @@ const maxHor = Math.pow(10, Math.floor(Math.log10(simulatorFactorHor/1000))+2); if (scaleType == 'slider') { menuParams['scale H'] = simulatorFactorHor/1000; - scaleHor = gui.add(menuParams, 'scale H', maxVer/100, maxVer, Math.round(maxVer/1000)).onChange(function() {factorHor(menuParams['scale H'], gui);}); + scaleHor = gui.add(menuParams, 'scale H', maxVer/100, maxVer, Math.round(maxVer/1000)).onChange(function() {factorHor(menuParams['scale H'], gui);}).onFinishChange(function() {finishHor(gui);}); + // guiscale(gui, 'scaleh'); menuParams['scale V'] = simulatorFactorHor/1000; scaleVer = gui.add(menuParams, 'scale V', maxHor/100, maxHor, Math.round(maxHor/1000)).onChange(function() {factorVer(menuParams['scale V'], gui);}); + // guiscale(gui, 'scalev'); } else { const controllerOption = $('.controller.option'); @@ -113,8 +177,8 @@ Math.round(compData[facility].pos[i][1] + f*1.05*Math.cos(beta)) ); } - appendSvg("path", {id:facility+"_simulatorhor", class: "simulatorhor "+facility, visibility:visibility, name:"simulatorhor", fill: "none", "stroke-width":"150", "stroke":"red", "stroke-opacity":"0.8", d: dhor.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')}, false, false, false, '.svg-pan-zoom_viewport'); - appendSvg("path", {id:facility+"_simulatorver", class: "simulatorver "+facility, visibility:visibility, name:"simulatorver", fill: "none", "stroke-width":"150", "stroke":"green", "stroke-opacity":"0.8", d: dver.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')}, false, false, false, '.svg-pan-zoom_viewport'); + appendSvg("path", {id:facility+"_simulatorhor", class: "simulatorhor trajectory "+facility, visibility:visibility, name:"simulatorhor", fill: "none", "stroke-width":"150", "stroke":"red", "stroke-opacity":"0.8", d: dhor.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')}, simulator_clicked_hor, false, false, '.svg-pan-zoom_viewport'); + appendSvg("path", {id:facility+"_simulatorver", class: "simulatorver trajectory "+facility, visibility:visibility, name:"simulatorver", fill: "none", "stroke-width":"150", "stroke":"green", "stroke-opacity":"0.8", d: dver.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')}, simulator_clicked_ver, false, false, '.svg-pan-zoom_viewport'); // console.log("path", {id:facility+"_simulatorhor", name:"simulatorhor", d: dver.join(' ')+' Z'}); } } @@ -124,6 +188,14 @@ } // 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 simulator_clicked_hor(event) { + // console.log('simulator hor', event); + openTooltip('trajectory hor '+event.clientX+' '+event.clientY); + } + function simulator_clicked_ver(lattice, params) { + // console.log('simulator ver'); + openTooltip('trajectory ver'+event.clientX+' '+event.clientY); + } function simulator2d(lattice, params) { console.log('simulator2d',lattice, params); const facilities = []; @@ -136,6 +208,14 @@ clearInterval(simulatorData.reader); } simulatorData.reader = false; + if (params.simulator=='position') { + $('#application').show(); + $('#applicationFrame').attr("src", $('#applicationFrame').attr("data-src")); + } + else { + $('#application').hide(); + $('#applicationFrame').removeAttr("src"); + } if (params.simulator=='') { for (let facility in simulatorData) { if (typeof $('#'+facility+"_simulatorhor").attr('visibility') != 'undefined') { @@ -143,11 +223,13 @@ $('#'+facility+"_simulatorver").attr('visibility', "hidden"); } } - $('#application').hide(); - $('#applicationFrame').removeAttr("src"); $('.simulatorgauge').hide(); + $('#scaleh').hide(); + $('#scalev').hide(); } else { + $('#scaleh').show(); + $('#scalev').show(); for (let facility in simulatorData) { if (typeof $('#'+facility+"_simulatorhor").attr('visibility') != 'undefined') { $('#'+facility+"_simulatorhor").attr('visibility', "visible"); @@ -158,9 +240,8 @@ simulatorData.oldIndex = facility; simulatorRead(simulatorData, params); } - displayer = setInterval(simulatorDisplay, 200, params); - simulatorData.reader = setInterval(simulatorRead, 200, simulatorData, params); - $('#application').show(); + displayer = setInterval(simulatorDisplay, displayerPeriod, params); + simulatorData.reader = setInterval(simulatorRead, readerPeriod, simulatorData, params); $('.simulatorhor').css('display', 'block'); $('.simulatorver').css('display', 'block'); simulatorFactorHor = factorsHor[menuParams.simulator]*1000;