From 81531b989ef16397d9600da1870598364d5b37a1 Mon Sep 17 00:00:00 2001 From: Lucio Zambon <lucio.zambon@elettra.eu> Date: Fri, 10 Jan 2025 02:48:40 +0000 Subject: [PATCH] Update simulator2d.js --- simulator2d.js | 76 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 30 deletions(-) diff --git a/simulator2d.js b/simulator2d.js index 911e5fd..5319ede 100644 --- a/simulator2d.js +++ b/simulator2d.js @@ -21,27 +21,33 @@ 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 simulatorDataHor = []; + let simulatorDataVer = []; let scaleHor; - let scaleSaturated = false; let scaleVer; let simulatorBuffer = false; let logScaleHor = false; 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; - 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 scaleSteps = 10; + function myreference(param) { + const dir = param.split('_')[0]; + const action = param.split('_')[1]; + if (action=='set') localStorage.setItem('reference'+dir, JSON.stringify(dir=='hor'? simulatorDataHor: simulatorDataVer)); + if (action=='clear') localStorage.removeItem('reference'+dir); + } + function elapseHor(step, up) { + // console.log('elapseHor()',step,scaleHor.$fill.style.width, (scaleSteps-step)/scaleSteps*90); + if (up) { + if (step<scaleSteps) {const pc = Math.round((scaleSteps-step)/scaleSteps*90); scaleHor.$fill.style.width=pc+"%";setTimeout(elapseHor, 20, step+1, up); 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;} + else { + if (step<scaleSteps) {const pc = Math.round(step/scaleSteps*10); scaleHor.$fill.style.width=pc+"%";setTimeout(elapseHor, 20, step+1, up); return;} const buf = scaleHor._max/10; scaleHor.max(buf); scaleHor.min(buf/100); @@ -50,39 +56,43 @@ scaleHor.$fill.style.width="10%"; scaleHor.$fill.style.borderColor = '#2cc9ff'; } - function elapseVer(step) { - scaleSaturated = false; - if (scaleVer.$fill.style.width=="100%") { + function elapseVer(step, up) { + if (up) { + if (step<scaleSteps) {const pc = Math.round(100 - (scaleSteps-step)/scaleSteps*90); scaleVer.$fill.style.width=pc+"%";setTimeout(elapseVer, 200, step+1, up); return;} const buf = scaleVer._max; scaleVer.max(buf*10); scaleVer.min(buf/10); scaleVer.step(buf/100); - // } - else if (scaleVer.$fill.style.width=="0%") { + else { + if (step<scaleSteps) {const pc = Math.round(step/scaleSteps*10); scaleVer.$fill.style.width=pc+"%";setTimeout(elapseVer, 200, step+1, up); return;} const buf = scaleVer._max/10; scaleVer.max(buf); scaleVer.min(buf/100); scaleVer.step(buf/1000); } scaleVer.$fill.style.width="10%"; + scaleVer.$fill.style.borderColor = '#2cc9ff'; } function finishHor() { - console.log('finishHor()', scaleHor.$fill.style.width); + // 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); + setTimeout(elapseHor, 200, 1, scaleHor.$fill.style.width=="100%"); } } function finishVer() { - console.log('finishHor()', scaleHor.$fill.style.width); - if (scaleSaturated) setTimeout(elapseVer, 100, 1); + if (scaleVer.$fill.style.width=="100%" || scaleVer.$fill.style.width=="0%") { + setTimeout(elapseVer, 200, 1, scaleVer.$fill.style.width=="100%"); + } } function factorHor(v) { - scaleHor.$fill.style.borderColor = (scaleHor.$fill.style.width=="100%" || scaleHor.$fill.style.width=="0%")? 'yellow': '#2cc9ff'; + // console.log('factorHor(v)', v, scaleHor.$fill.style.width); + scaleHor.$fill.style.borderColor = (scaleHor.$fill.style.width=="100%" || scaleHor.$fill.style.width=="0%")? 'yellow': '#2cc9ff'; simulatorFactorHor = v * 1000; } function factorVer(v) { + scaleVer.$fill.style.borderColor = (scaleVer.$fill.style.width=="100%" || scaleVer.$fill.style.width=="0%")? 'yellow': '#2cc9ff'; simulatorFactorVer = v * 1000; } function logscale(dirNum) { @@ -100,7 +110,7 @@ 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.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) { @@ -121,10 +131,10 @@ 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);}).onFinishChange(function() {finishHor(gui);}); - // guiscale(gui, 'scaleh'); + 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'); + guiscale(gui, 'scalev'); } else { const controllerOption = $('.controller.option'); @@ -178,7 +188,9 @@ ); } 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+"_simulatorreferencehor", class: "simulatorhor trajectory "+facility, visibility:visibility, name:"simulatorreferencehor", fill: "none", "stroke-width":"150", "stroke":"darkred", "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'); + appendSvg("path", {id:facility+"_simulatorreferencever", class: "simulatorver trajectory "+facility, visibility:visibility, name:"simulatorreferencever", fill: "none", "stroke-width":"150", "stroke":"darkgreen", "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'}); } } @@ -204,12 +216,14 @@ } function simulatorSwitch(simulatorData, params) { console.log('simulatorSwitch()',simulatorData, params, params.simulator); + scaleHor.$fill.style.width = "50%"; + scaleVer.$fill.style.width = "50%"; if (simulatorData.reader !== false) { clearInterval(simulatorData.reader); } simulatorData.reader = false; if (params.simulator=='position') { - $('#application').show(); + $('#application').show(); $('#applicationFrame').attr("src", $('#applicationFrame').attr("data-src")); } else { @@ -226,8 +240,10 @@ $('.simulatorgauge').hide(); $('#scaleh').hide(); $('#scalev').hide(); + $('#applicationReference').hide(); } else { + $('#applicationReference').show(); $('#scaleh').show(); $('#scalev').show(); for (let facility in simulatorData) { @@ -277,8 +293,8 @@ } function simulatorRender(facility, val, simulator) { // console.log('simulatorRender(), val', val, simulator, compData[facility]); - const dhor = []; - const dver = []; + simulatorDataHor = []; + simulatorDataVer = []; if (val.Hor) { for (i=0; i<val.Hor.length; i++) { if (typeof compData[facility].map[i] == 'undefined') continue; @@ -291,18 +307,18 @@ const valHor = logScaleHor? Math.sign(val.Hor[i])*Math.log10(1+ Math.abs(val.Hor[i]*Math.LN10)): val.Hor[i]; const valVer = logScaleVer? Math.sign(val.Ver[i])*Math.log10(1+ Math.abs(val.Ver[i]*Math.LN10)): val.Ver[i]; // if (i<20) console.log('i', i, 'pos',pos, 'dir', compData[facility].dir[i], 'facility', facility, beta, Math.cos(beta), Math.sin(beta)); - dhor.push((dhor.length==0?'M':'L')+ + simulatorDataHor.push((simulatorDataHor.length==0?'M':'L')+ Math.round(pos[0] - valHor*simulatorFactorHor*Math.sin(beta)) + ' ' + Math.round(pos[1] + valHor*simulatorFactorHor*Math.cos(beta)) ); - dver.push((dver.length==0?'M':'L')+ + simulatorDataVer.push((simulatorDataVer.length==0?'M':'L')+ Math.round(pos[0] - valVer*simulatorFactorVer*Math.sin(beta)) + ' ' + Math.round(pos[1] + valVer*simulatorFactorVer*Math.cos(beta)) ); } - // console.log('Hor', dhor.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')); - $('#'+facility+"_simulatorhor").attr('d', dhor.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')); - $('#'+facility+"_simulatorver").attr('d', dver.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')); + // console.log('Hor', simulatorDataHor.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')); + $('#'+facility+"_simulatorhor").attr('d', simulatorDataHor.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')); + $('#'+facility+"_simulatorver").attr('d', simulatorDataVer.join(' ')+(lattice[facility].sections[0].chamber?' Z':'')); } } function simulatorDisplay(params) { -- GitLab