@ndmspc/ndmvr 0.1.1 → 0.20220401.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +359 -2
- package/dist/index.js +2202 -1704
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +2202 -1705
- package/dist/index.modern.js.map +1 -1
- package/package.json +5 -1
package/dist/index.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.js","sources":["../src/observables/jsrootSubject.js","../src/services/jsrootService.js","../src/components/JsrootHistogram/index.js","../src/observables/cameraSubject.js","../src/components/NdmVrCamera/index.js","../src/services/ndmVrStorageService.js","../src/observables/binSubject.js","../src/aframeComponents/cursorEventAframeComponent.js","../src/aframeComponents/th2AframeComponent.js","../src/aframeComponents/th3AframeComponent.js","../src/services/cameraService.js","../src/observables/histogramSubject.js","../src/controllers/keyboardController.js","../src/aframeComponents/histogramAframeComponent.js","../src/aframeComponents/labelHandlerAframeComponent.js","../src/resources/theme.js","../src/resources/themeProvider.js","../src/utils/histogramReactFactory.js","../src/components/NdmVrHistogram3D/index.js","../src/components/NdmVrHistogramScene/index.js","../src/utils/EntityBuilder.js","../src/utils/EntityTemplate.js","../src/utils/histogramAframeFactory.js","../src/utils/DefaultHistogram.js","../src/components/AframeComponent/index.js","../src/aframeComponents/infoBannerAframeComponent.js","../src/controllers/oculusController.js","../src/aframeComponents/leftOculusController.js","../src/aframeComponents/rightOculusController.js","../src/index.js"],"sourcesContent":["// service to manage histogram views\nimport { Subject } from 'rxjs'\n\nclass JsrootSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n showBinProjection(binData) {\n this.#subject.next(binData)\n }\n\n getServiceEvent() {\n return this.#subject.asObservable()\n }\n}\n\nconst jsrootSubject = new JsrootSubject()\nexport default jsrootSubject\n","// service for creating histogram projections\n\n// eslint-disable-next-line no-unused-vars\nimport { createDemoTH2Histogram } from '../../example/src/utilsScripts/utilsPageScript'\n\nclass JsrootService {\n #jsroot = null\n\n set jsrootLibrary(JSROOT) {\n this.#jsroot = JSROOT\n }\n\n get jsrootLibrary() {\n return this.#jsroot\n }\n\n // create projection depends on selected axis\n createTH1Projection(projectionAxis, info, idTargetElm, axisArray) {\n if (!info || !projectionAxis || this.#jsroot === null) {\n return false\n }\n\n const projectionTargetAxis = projectionAxis === axisArray[0]\n const primary = projectionTargetAxis ? axisArray[0] : axisArray[1]\n const secondary = projectionTargetAxis ? axisArray[1] : axisArray[0]\n\n const primaryAxis = `f${secondary}axis`\n const secondaryAxis = `f${primary}axis`\n const binAxis = `${primary.toLowerCase()}Max`\n\n // console.log(secondaryAxis)\n // console.log(binAxis)\n // projection X\n\n const h1 = this.#jsroot.createHistogram(\n 'TH1I',\n info.obj[primaryAxis].fNbins\n )\n\n // fill important histogram info\n h1.fXaxis.fXmin = info.obj[primaryAxis].fXmin\n h1.fXaxis.fXmax = info.obj[primaryAxis].fXmax\n h1.fXaxis.fTitle = info.obj[primaryAxis].fTitle\n h1.fXaxis.fLabels = info.obj[primaryAxis].fLabels\n\n const currLabel =\n info.obj[secondaryAxis].fLabels?.arr.length > 0\n ? info.obj[secondaryAxis].fLabels.arr[info.bin[binAxis] - 1].fString\n : ''\n\n for (let n = 0; n < info.obj[primaryAxis].fNbins; n++)\n h1.setBinContent(\n n + 1,\n projectionAxis === axisArray[0]\n ? info.obj.getBinContent(info.bin[binAxis], n + 1)\n : info.obj.getBinContent(n + 1, info.bin[binAxis])\n )\n h1.fName = 'px'\n h1.fTitle =\n `Projection of bin=${projectionAxis}` +\n (info.bin.binName !== '' ? info.bin.name : info.bin[binAxis] - 1) +\n `[` +\n currLabel +\n `]`\n this.#jsroot.redraw(idTargetElm, h1)\n }\n\n // read projection from file and display\n openTH1Projection(projectionAxis, info, idTargetElm, axisArray, projections) {\n const xLength = info.obj.fXaxis.fXmax / info.obj.fXaxis.fNbins\n const yLength = info.obj.fYaxis.fXmax / info.obj.fYaxis.fNbins\n const xBin = info.bin.xMin / xLength\n const yBin = info.bin.yMin / yLength\n try {\n const projection =\n projections.fFolders.arr[xBin].fFolders.arr[yBin].fFolders.arr[0]\n this.#jsroot.redraw(idTargetElm, projection)\n setTimeout(() => {\n this.displayImageOfProjection(\n 'projectionContainer',\n 'th-mapping',\n '500px',\n '400px'\n )\n }, 200)\n } catch (e) {\n console.log(\"you don't have this projection\")\n }\n }\n\n // display image on the banner\n displayImageOfProjection(idSourceElement, idTargetElement, width, height) {\n try {\n const sourceSvgElement =\n document.getElementById(idSourceElement).firstElementChild\n const targetElement = document.getElementById(idTargetElement)\n const canvas = document.createElement('canvas')\n // set width an height of elements\n sourceSvgElement.setAttribute('height', height)\n sourceSvgElement.setAttribute('width', width)\n canvas.setAttribute('height', height)\n canvas.setAttribute('width', width)\n\n // eslint-disable-next-line no-undef\n const svgString = new XMLSerializer().serializeToString(sourceSvgElement)\n const ctx = canvas.getContext('2d')\n // eslint-disable-next-line no-undef\n const DOMURL = self.URL || self.webkitURL || self\n // eslint-disable-next-line no-undef\n const img = new Image()\n // create object url of canvas using blob object\n // eslint-disable-next-line no-undef\n const svg = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' })\n const url = DOMURL.createObjectURL(svg)\n\n // the function is executed after load url of the image\n img.onload = function () {\n // draw png image and create url\n ctx.drawImage(img, 0, 0)\n const png = canvas.toDataURL('image/png')\n // targetElement.setAttribute('src', png)\n targetElement.setAttribute('material', `src`, png)\n DOMURL.revokeObjectURL(png)\n }\n img.src = url\n } catch (e) {}\n }\n}\n\nconst jsrootService = new JsrootService()\nexport default jsrootService\n","import React, { useState, useEffect } from 'react'\nimport jsrootSubject from '../../observables/jsrootSubject'\nimport jsrootService from '../../services/jsrootService'\n\n// styles\nconst styles = {\n box: {\n display: 'block',\n margin: 'auto',\n width: '90%',\n textAlign: 'center',\n align: 'center',\n paddingTop: 2\n },\n projection: {\n display: 'block',\n margin: 'auto',\n width: '460px',\n height: '380px'\n },\n form: {\n display: 'block',\n width: '60%',\n margin: 'auto',\n paddingTop: '2%',\n paddingBottom: '2%'\n },\n label: {\n display: 'block'\n },\n input: {\n display: 'block',\n width: '85%',\n margin: 'auto',\n height: 40,\n border: '1px solid grey',\n borderRadius: 3,\n textAlign: 'center',\n fontSize: 20,\n color: 'black',\n opacity: 0.8\n }\n}\n\nconst JsrootHistogram = ({ histogram, projectionAxes, projections }) => {\n let subscription\n const [axis, setAxis] = useState('X')\n const [data, setData] = useState(null)\n // const histogram = props.histogram object of histogram in props\n const handleInputChange = (event) => {\n const axis = event.target.value\n setAxis(axis)\n }\n\n const renderForm = () => {\n return (\n <div className='form-group' style={styles.form}>\n <label htmlFor='formGroupExampleInput' style={styles.label}>\n Projection axis\n </label>\n <select\n onChange={handleInputChange}\n className='form-control'\n id='axisProjection'\n style={styles.input}\n >\n <option defaultValue={projectionAxes[0]}>\n {histogram[`f${projectionAxes[0]}axis`].fTitle\n ? histogram[`f${projectionAxes[0]}axis`].fTitle\n : projectionAxes[0]}\n </option>\n <option value={projectionAxes[1]}>\n {histogram[`f${projectionAxes[1]}axis`].fTitle\n ? histogram[`f${projectionAxes[1]}axis`].fTitle\n : projectionAxes[1]}\n </option>\n </select>\n </div>\n )\n }\n\n // handle subscription\n const handleSubscription = (data) => {\n setData(data)\n if (projections !== null) {\n jsrootService.openTH1Projection(\n axis,\n { obj: histogram, bin: data },\n 'projectionContainer',\n projectionAxes,\n projections\n )\n } else {\n jsrootService.createTH1Projection(\n axis,\n { obj: histogram, bin: data },\n 'projectionContainer',\n projectionAxes\n )\n setTimeout(() => {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n 'th-mapping',\n '500px',\n '500px'\n )\n }, 500)\n }\n }\n\n // subscribe for bin data\n useEffect(() => {\n jsrootService.jsrootLibrary = window.JSROOT\n\n subscription = jsrootSubject.getServiceEvent().subscribe(handleSubscription)\n // console.log(histogram)\n return () => subscription.unsubscribe()\n }, [axis, projections, histogram])\n\n if (data !== null) {\n return (\n <div style={styles.box}>\n {projections === null && renderForm()}\n <div id='projectionContainer' style={styles.projection} />\n </div>\n )\n } else {\n return (\n <div style={styles.box}>\n <h3>Empty</h3>\n </div>\n )\n }\n}\n\nexport default JsrootHistogram\n","// service to manage scene camera\nimport { Subject } from 'rxjs'\n\nclass CameraSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n setVisibilityOfBanners(inputDevice) {\n this.#subject.next({\n device: inputDevice\n })\n }\n\n shiftBanners() {\n this.#subject.next('shift')\n }\n\n setUserState() {\n this.#subject.next('show')\n }\n\n getCameraSubject() {\n return this.#subject.asObservable()\n }\n}\n\nconst cameraSubject = new CameraSubject()\nexport default cameraSubject\n","import React, { useState, useEffect } from 'react'\nimport 'aframe'\nimport cameraSubject from '../../observables/cameraSubject'\nimport jsrootService from '../../services/jsrootService'\n\nconst NdmVrCamera = () => {\n let subscription\n const offset = 30\n const [rotation, setRotation] = useState(0)\n const [prevPosition, setPrevPosition] = useState(null)\n const [inputDevice, setInputDevice] = useState('keyboard')\n const [show, setShow] = useState(false)\n const [showProjection, setShowProjection] = useState(false)\n\n const handleSubscription = (data) => {\n if (data.device) {\n if (inputDevice !== data.device) setInputDevice(data.device)\n setShow(!show)\n } else if (data === 'shift') {\n compileRotation()\n } else if (data === 'show') {\n setShowProjection(!showProjection)\n }\n }\n\n const compileRotation = () => {\n let currentRotation = rotation + 90\n if (currentRotation >= 360) currentRotation = 0\n setRotation(currentRotation)\n }\n\n // render banners for projection\n const renderProjectionsBanners = () => {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n material='color: white'\n >\n <a-entity\n // geometry='primitive: box; width: 18; height: 5; depth: 0.5;'\n /* geometry={\n inputDevice === 'oculus'\n ? 'primitive: box; width: 40; height: 10; depth: 0.1;'\n : 'primitive: box; width: 18; height: 5; depth: 0.1;'\n } */\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n // position={`8 ${inputDevice === 'oculus' ? 3 - offset : 3} -5`}\n // position={inputDevice === 'oculus' ? '-30 28 0' : '8 3 -5'}\n position='-30 28 0'\n // rotation='0 -45 0'\n // rotation={inputDevice === 'oculus' ? '45 90 0' : '0 -45 0'}\n rotation='45 90 0'\n material='color:white;'\n >\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press C to show help panels'\n : 'Press Button X to show help panels'\n }\n // position={inputDevice === 'oculus' ? '-18 0 1' : '-8 0 1'}\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press V to switch to histogram view'\n : 'Press Button Y to switch to histogram view'\n }\n // position='-8 1 1'\n // position={inputDevice === 'oculus' ? '-18 2.8 1' : '-8 1 1'}\n position='-20 0 1'\n />\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press X to shift panels'\n : 'Press right Trigger to shift panels'\n }\n // position='-8 -1 1'\n // position={inputDevice === 'oculus' ? '-18 -2.8 1' : '-8 -1 1'}\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n id='bannerId_1'\n scale='80 50 2'\n animation__position='property: position; from: 0 0 -60; to: 0 -1 -42; delay: 0; dur: 800; easing: linear;'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 0 0 -60; to: 0 0 -42.5; delay: 0; dur: 800; easing: linear;'\n material='color: white;'\n />\n <a-box\n id='bannerId_2'\n scale='80 50 2'\n animation__position='property: position; from: 60 0 0; to: 42 -1 0; delay: 200; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 60 0 0; to: 42.5 0 0; delay: 200; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='color: white;'\n />\n <a-box\n id='bannerId_3'\n scale='80 50 2'\n animation__position='property: position; from: 0 0 60; to: 0 -1 42; delay: 400; dur: 800; easing: linear;'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 0 0 60; to: 0 0 42.5; delay: 400; dur: 800; easing: linear;'\n material='color: white;'\n />\n <a-box\n id='bannerId_4'\n scale='80 50 2'\n animation__position='property: position; from: -60 0 0; to: -42 -1 0; delay: 600; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: -60 0 0; to: -42.5 0 0; delay: 600; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='color: white;'\n />\n </a-entity>\n )\n }\n\n // render banners for controls\n const renderBannersWithControls = () => {\n if (inputDevice === 'keyboard') {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n material='color: white'\n >\n <a-entity\n // geometry='primitive: box; width: 15; height: 5; depth: 0.5;'\n // position='8 3 -5'\n // rotation='0 -45 0'\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n position='-30 28 0'\n rotation='45 90 0'\n material='color: white'\n >\n <a-text\n color='black'\n // width='20'\n width='50'\n // value='Press C to show projection panels'\n value={\n showProjection\n ? 'Press C to show help panels'\n : 'Press C to show projection panels'\n }\n // position='-6 0 1'\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n // width='20'\n width='50'\n value='Press V to switch to histogram view'\n // position='-6 1 1'\n position='-20 0 1'\n />\n <a-text\n color='black'\n // width='20'\n width='50'\n value='Press X to shift panels'\n // position='-6 -1 1'\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -30 0 60; to: -30 0 30; delay: 0; dur: 800; easing: linear;'\n rotation='0 -45 0'\n // src='https://i.imgur.com/x78XYHM.png'\n src='./ndmvr/keyboardControls/keyboard.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -30 0 -60; to: -30 0 -30; delay: 200; dur: 800; easing: linear;'\n rotation='0 45 0'\n src='./ndmvr/keyboardControls/keyboard1.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 30 0 -60; to: 30 0 -30; delay: 400; dur: 800; easing: linear;'\n rotation='0 -45 0'\n src='./ndmvr/keyboardControls/keyboard2.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 30 0 60; to: 30 0 30; delay: 600; dur: 800; easing: linear;'\n rotation=' 0 45 0'\n src='./ndmvr/keyboardControls/keyboard3.png'\n />\n </a-entity>\n )\n } else {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n >\n <a-entity\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n position='-30 28 0'\n rotation='45 90 0'\n material='color: white'\n >\n <a-text\n color='black'\n width='50'\n // value='Press Button X to show projection panels'\n value={\n showProjection\n ? 'Press Button X to show help panels'\n : 'Press Button X to show projection panels'\n }\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n width='50'\n value='Press Button Y to switch to histogram view'\n position='-20 0 1'\n />\n <a-text\n color='black'\n width='50'\n value='Press right Trigger to shift panels'\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -35 0 60; to: -32 0 32; delay: 0; dur: 800; easing: linear;'\n rotation='-10 -45 0'\n src='./ndmvr/oculusControls/oculus.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -35 0 -60; to: -32 0 -32; delay: 200; dur: 800; easing: linear;'\n rotation='10 45 0'\n src='./ndmvr/oculusControls/oculus2.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 35 0 -60; to: 32 0 -32; delay: 400; dur: 800; easing: linear;'\n rotation='10 -45 0'\n src='./ndmvr/oculusControls/oculus1.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 35 0 60; to: 32 0 32; delay: 600; dur: 800; easing: linear;'\n rotation='-10 45 0'\n src='./ndmvr/oculusControls/oculus3.png'\n />\n </a-entity>\n )\n }\n }\n\n const hideMappingBanner = () => {\n const banner = document.getElementById('th-mapping')\n const background = document.getElementById('th-background')\n if (banner !== undefined && background !== undefined) {\n banner.setAttribute('material', 'opacity', 0)\n background.setAttribute('material', 'opacity', 0)\n }\n }\n\n const showMappingBanner = () => {\n const banner = document.getElementById('th-mapping')\n const background = document.getElementById('th-background')\n if (banner !== undefined && background !== undefined) {\n banner.setAttribute('material', 'opacity', 1)\n background.setAttribute('material', 'opacity', 1)\n }\n }\n\n useEffect(() => {\n subscription = cameraSubject\n .getCameraSubject()\n .subscribe(handleSubscription)\n\n return () => subscription.unsubscribe()\n }, [show, showProjection, rotation])\n\n useEffect(() => {\n const camera = document.getElementById('camera')\n if (!show) {\n camera.object3D.position.y = 1.6\n if (prevPosition !== null) {\n camera.object3D.position.x = prevPosition.x\n camera.object3D.position.z = prevPosition.z\n camera.object3D.position.y = prevPosition.y\n }\n showMappingBanner()\n } else {\n setPrevPosition({\n x: camera.object3D.position.x,\n y: camera.object3D.position.y,\n z: camera.object3D.position.z\n })\n camera.object3D.position.y = camera.object3D.position.y + offset\n hideMappingBanner()\n }\n }, [show, inputDevice])\n\n useEffect(() => {\n if (showProjection) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n 'bannerId_1',\n '500px',\n '400px'\n )\n }\n }, [showProjection])\n\n return (\n <a-entity id='cameraWrapper' rotation='0 180 0' position='0 2 0'>\n {show && !showProjection && renderBannersWithControls()}\n {show && showProjection && renderProjectionsBanners()}\n <a-camera\n id='camera'\n look-control\n wasd-controls-enabled='acceleration:=50'\n >\n <a-entity\n cursor='fuse: false; fuseTimeout: 2000;'\n raycaster='objects: .clickable; showLine: false; far: 100;'\n animation__click='property: scale; startEvents: click; from: 0.1 0.1 0.1; to: 1.4 1.4 1.4; dur: 150'\n animation__mouseenter='property: scale; startEvents: mouseenter; from: 1 1 1; to: 1.4 1.4 1.4; dur: 180'\n animation__mouseleave='property: scale; startEvents: mouseleave; from: 1.4 1.4 1.4; to: 1 1 1; dur: 180'\n line='color: orange; opacity: 0.5'\n far='100'\n position='0 0 -1'\n geometry='primitive: ring; radiusInner: 0.02; radiusOuter: 0.03'\n material='color: white; shader: flat'\n />\n <a-entity oculus-touch-controls='hand: left' left-controller-logging />\n <a-entity\n oculus-touch-controls='hand: right'\n right-controller-logging\n />\n </a-camera>\n </a-entity>\n )\n}\n\nexport default NdmVrCamera\n","/* object for manipulating local storage */\n\nexport class NdmVrStorageService {\n #storage\n #camera\n #selectedBins = []\n constructor() {\n this.#storage = window.localStorage\n this.#camera = document.getElementById('cameraWrapper')\n this.#selectedBins = this.getBinsFromLocalStorage()\n }\n\n /*\n initLocalStorage() {\n if (!this.loadProperty('TH2')) {\n this.storeProperty('TH2', {})\n }\n if (!this.loadProperty('TH3')) {\n this.storeProperty('TH3', {})\n }\n if (!this.#storage.getItem('rootFile')) {\n this.storeFilePath(\n 'https://eos.ndmspc.io/eos/ndmspc/scratch/test/gitlab-hist.root'\n )\n }\n this.storeTH2Offsets(1, 1, 6)\n this.storeTH3Offsets(1, 1, 1, 6)\n }\n */\n\n storeCurrentBinToLocalStorage(binData) {\n this.#storage.setItem('currentBin', JSON.stringify(binData))\n }\n\n getCurrentBinFromLocalStorage() {\n const currentBin = JSON.parse(this.#storage.getItem('currentBin'))\n if (currentBin === undefined || currentBin === '') {\n return null\n }\n return currentBin\n }\n\n loadProperty(property) {\n return JSON.parse(this.#storage.getItem(property))\n }\n\n storeProperty(property, object) {\n this.#storage.setItem(property, JSON.stringify(object))\n }\n\n /*\n storeTH2HistogramLimits(histogram) {\n const object = this.loadProperty('TH2')\n object.binScales = this.#getBinTH2Scales(histogram)\n object.limits = {\n xOffset: histogram.fXaxis.fXmax / object.binScales.xWidth,\n yOffset: histogram.fYaxis.fXmax / object.binScales.yWidth\n }\n this.storeProperty('TH2', object)\n }\n\n storeTH3HistogramLimits(histogram) {\n const object = this.loadProperty('TH3')\n object.binScales = this.#getBinTH3Scales(histogram)\n object.limits = {\n xOffset: histogram.fXaxis.fXmax / object.binScales.xWidth,\n yOffset: histogram.fYaxis.fXmax / object.binScales.yWidth,\n zOffset: histogram.fZaxis.fXmax / object.binScales.zWidth\n }\n this.storeProperty('TH3', object)\n }\n\n storeHistogramLimits(type, histogram) {\n if (type.includes('TH3') || type.includes('th3')) {\n this.storeTH3HistogramLimits(histogram)\n } else if (type.includes('TH2') || type.includes('th2')) {\n this.storeTH2HistogramLimits(histogram)\n }\n }\n\n loadTH3Limits() {\n const object = this.loadProperty('TH3')\n return object.limits\n }\n\n loadTH2Limits() {\n const object = this.loadProperty('TH2')\n return object.limits\n }\n\n loadLimits(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n return this.loadTH3Limits()\n } else if (type.includes('TH2') || type.includes('th2')) {\n return this.loadTH2Limits()\n }\n }\n */\n /*\n #getBinTH2Scales = (histogram) => {\n const xWidth = histogram.fXaxis.fXmax / histogram.fXaxis.fNbins\n const yWidth = histogram.fYaxis.fXmax / histogram.fYaxis.fNbins\n return {\n xWidth: xWidth,\n yWidth: yWidth\n }\n }\n\n #getBinTH3Scales = (histogram) => {\n const xcenter = histogram.fXaxis.GetBinCenter(1)\n const xmin = histogram.fXaxis.GetBinLowEdge(1)\n const xmax = xcenter + (xcenter - xmin)\n const xWidth = xmax - xmin\n const ycenter = histogram.fYaxis.GetBinCenter(1)\n const ymin = histogram.fYaxis.GetBinLowEdge(1)\n const ymax = ycenter + (ycenter - ymin)\n const yWidth = ymax - ymin\n const zcenter = histogram.fZaxis.GetBinCenter(1)\n const zmin = histogram.fZaxis.GetBinLowEdge(1)\n const zmax = zcenter + (zcenter - zmin)\n const zWidth = zmax - zmin\n return {\n xWidth: xWidth,\n yWidth: yWidth,\n zWidth: zWidth\n }\n }\n */\n /*\n loadBinScale(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n const object = this.loadProperty('TH3')\n return object.binScales\n } else if (type.includes('TH2') || type.includes('th2')) {\n const object = this.loadProperty('TH2')\n return object.binScales\n }\n }\n */\n\n initHistogramData(histogram) {\n if (histogram._typename.includes('TH3')) {\n this.storeTH3HistogramLimits(histogram)\n } else if (histogram._typename.includes('TH2')) {\n this.storeTH2HistogramLimits(histogram)\n }\n }\n\n storeTH2Offsets(xOffset, yOffset, range) {\n let object = this.loadProperty('TH2')\n let section\n if (object === null) {\n object = {}\n section = {\n name: 'TH2',\n xOffset: 1,\n yOffset: 1,\n range: 8\n }\n } else {\n section = {\n name: 'TH2',\n xOffset: xOffset,\n yOffset: yOffset,\n range: range\n }\n }\n object.section = section\n this.storeProperty('TH2', object)\n }\n\n storeTH3Offsets(xOffset, yOffset, zOffset, range) {\n let object = this.loadProperty('TH3')\n let section\n if (object === null) {\n object = {}\n section = {\n name: 'TH3',\n xOffset: 1,\n yOffset: 1,\n zOffset: 1,\n range: 4\n }\n } else {\n section = {\n name: 'TH3',\n xOffset: xOffset,\n yOffset: yOffset,\n zOffset: zOffset,\n range: range\n }\n }\n object.section = section\n this.storeProperty('TH3', object)\n }\n\n storeOffsets(section) {\n if (section.name.includes('TH3') || section.name.includes('th3')) {\n this.storeTH3Offsets(\n section.xOffset,\n section.yOffset,\n section.zOffset,\n section.range\n )\n } else if (section.name.includes('TH2') || section.name.includes('th2')) {\n this.storeTH2Offsets(section.xOffset, section.yOffset, section.range)\n }\n }\n\n storeFilePath(filePath) {\n this.#storage.setItem('rootFile', filePath)\n }\n\n loadFilePath() {\n const filename = this.#storage.getItem('rootFile')\n if (filename === null || filename === undefined) {\n // throw new Error('The filename is empty')\n return 'defaultHistogram'\n }\n return filename\n }\n\n loadTH2Offsets() {\n const object = this.loadProperty('TH2')\n if (object !== null) {\n return object.section\n } else {\n return null\n }\n }\n\n loadTH3Offsets() {\n const object = this.loadProperty('TH3')\n if (object !== null) {\n return object.section\n } else {\n return null\n }\n }\n\n loadOffsets(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n return this.loadTH3Offsets()\n } else if (type.includes('TH2') || type.includes('th2')) {\n return this.loadTH2Offsets()\n }\n }\n\n /*\n #getValidOffset = (\n histogramType,\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n ) => {\n if (increment) {\n if (defaultRange) {\n offsets[axisOffset] += 1\n } else {\n offsets[axisOffset] += offsets.range + 1\n }\n if (limits[axisOffset] <= offsets.range) {\n offsets[axisOffset] = 1\n return offsets\n }\n if (offsets[axisOffset] > limits[axisOffset] - offsets.range - 1) {\n offsets[axisOffset] = limits[axisOffset] - offsets.range\n return offsets\n }\n } else {\n if (offsets[axisOffset] - offsets.range + 1 <= 1) {\n offsets[axisOffset] = 1\n return offsets\n }\n if (defaultRange) {\n offsets[axisOffset] -= 1\n } else {\n offsets[axisOffset] -= offsets.range + 1\n }\n }\n return offsets\n }\n */\n\n /*\n editTH2OffsetByOffset(axisOffset, increment, defaultRange) {\n const limits = this.loadTH2Limits()\n const offsets = this.loadTH2Offsets()\n const result = this.#getValidOffset(\n 'TH2',\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n // this.storeTH2Offsets(result.xOffset, result.yOffset, result.range)\n return result\n }\n */\n\n /*\n editTH3OffsetByOffset(axisOffset, increment, defaultRange) {\n const limits = this.loadTH3Limits()\n const offsets = this.loadTH3Offsets()\n const result = this.#getValidOffset(\n 'TH3',\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n // this.storeTH3Offsets(result.xOffset, result.yOffset, result.zOffset, result.range)\n return result\n }\n */\n\n // set offset value\n /*\n setOffsetValue = (typeName, range) => {\n if (typeName.includes('TH2')) {\n if (range > 16) {\n return 16\n } else if (range < 2) {\n return 2\n } else {\n return range\n }\n } else if (typeName.includes('TH3')) {\n if (range > 10) {\n return 10\n } else if (range < 2) {\n return 2\n } else {\n return range\n }\n }\n }\n */\n\n #deleteCurrentBin = (binData) => {\n return this.#selectedBins.filter((item) => item.id !== binData.id)\n }\n\n // check containing bin\n containThisBin = (binData) => {\n const updatedArray = this.#selectedBins.filter(\n (item) => item.id === binData.id\n )\n return updatedArray.length !== 0\n }\n\n // store bin to local storage\n storeBinToLocalStorage = (binData) => {\n // let bins = JSON.parse(this.#storage.getItem('currentBin'))\n if (!this.containThisBin(binData)) {\n this.#selectedBins.push(binData)\n this.#storage.setItem('selectedBins', JSON.stringify(this.#selectedBins))\n }\n }\n\n deleteBinFromLocalStorage = (binData) => {\n // let bins = JSON.parse(this.#storage.getItem('currentBin'))\n if (this.containThisBin(binData)) {\n this.#selectedBins = this.#deleteCurrentBin(binData)\n this.#storage.setItem('selectedBins', JSON.stringify(this.#selectedBins))\n }\n }\n\n // get bin from local storage\n getBinsFromLocalStorage = () => {\n const selectedBins = JSON.parse(this.#storage.getItem('selectedBins'))\n if (selectedBins === null) {\n return []\n } else {\n return selectedBins\n }\n }\n}\n\nconst localStorageService = new NdmVrStorageService()\nexport { localStorageService }\n","// service to manage histogram views\nimport { Subject } from 'rxjs'\n\nclass BinSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n saveSelectedBinToLocalStorage() {\n this.#subject.next(true)\n }\n\n deleteBinFromLocalStorage() {\n this.#subject.next(false)\n }\n\n getKeyboardEvent() {\n return this.#subject.asObservable()\n }\n}\n\nconst binSubject = new BinSubject()\nexport default binSubject\n","import AFRAME from 'aframe'\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport binSubject from '../observables/binSubject'\nimport jsrootSubject from '../observables/jsrootSubject'\n\n// aframe component for set events on bin\nAFRAME.registerComponent('mouseevent', {\n init: function () {\n let subscription\n const el = this.el\n let clickCount = 0\n let checked = false\n // add mouse listener on mouseenter\n el.addEventListener('mouseenter', function setHover(evt) {\n checked = false\n // subscribe for events\n const intersection = evt.detail.intersection\n subscription = binSubject.getKeyboardEvent().subscribe((save) => {\n if (save) {\n localStorageService.storeBinToLocalStorage(this.userData)\n localStorageService.storeCurrentBinToLocalStorage(this.userData)\n this.userData.markedColor = this.userData.selectColor\n this.setAttribute('material', 'opacity', '1')\n jsrootSubject.showBinProjection(this.userData)\n } else {\n localStorageService.deleteBinFromLocalStorage(this.userData)\n this.userData.markedColor = this.userData.color\n this.setAttribute('material', 'opacity', '0.75')\n }\n })\n if (intersection.face.normal.x !== 0) {\n this.setAttribute('material', 'color', this.userData.axisZ)\n } else if (intersection.face.normal.y !== 0) {\n this.setAttribute('material', 'color', this.userData.axisY)\n } else {\n this.setAttribute('material', 'color', this.userData.axisX)\n }\n this.setAttribute('material', 'opacity', '1')\n })\n\n // add mouse listener on mouseleave\n el.addEventListener('mouseleave', function setPassive() {\n subscription.unsubscribe()\n if (checked === false) {\n this.setAttribute('material', 'color', this.userData.markedColor)\n this.setAttribute('material', 'opacity', '0.75')\n }\n clickCount = 0\n })\n\n // add mouse listener on click\n el.addEventListener('click', function setActive(evt) {\n clickCount = clickCount + 1\n checked = false\n setTimeout(() => {\n clickCount = 0\n }, 600)\n // add mouse listener on double click\n // change position\n if (clickCount === 2) {\n clickCount = 0\n checked = true\n this.setAttribute('material', 'color', '#99ff00')\n this.setAttribute('material', 'opacity', '1')\n // get camera\n const camera = document.getElementById('cameraWrapper')\n // set pos of camera\n if (camera !== null) {\n camera.object3D.position.y = this.object3D.position.y + 0.4\n // camera.object3D.rotation.y = 180\n if (this.userData.content > 0.5) {\n // camera.object3D.position.x = -1.5 + this.object3D.position.x\n // camera.object3D.position.z = this.object3D.position.z - 1.2\n camera.setAttribute(\n 'animation',\n `property: position; to: ${-0.5 + this.object3D.position.x} ${\n this.object3D.position.y\n } ${this.object3D.position.z}\n ; dur: 600; easing: linear;`\n )\n } else if (this.userData.content > 0.2) {\n // camera.object3D.position.x = -0.5 + this.object3D.position.x\n // camera.object3D.position.y = this.object3D.position.y + 0.1\n // camera.object3D.position.z = this.object3D.position.z + 4.5\n camera.setAttribute(\n 'animation',\n `property: position; to: ${-0.5 + this.object3D.position.x} ${\n this.object3D.position.y + 0.1\n } ${this.object3D.position.z + 0.5}\n ; dur: 600; easing: linear;`\n )\n } else {\n // camera.object3D.position.x = this.object3D.position.x + 2\n // camera.object3D.position.y = this.object3D.position.y + 0.1\n // camera.object3D.position.z = this.object3D.position.z + 8.5\n camera.setAttribute(\n 'animation',\n `property: position; to: ${this.object3D.position.x + 2} ${\n this.object3D.position.y + 0.1\n } ${this.object3D.position.z + 8.5}\n ; dur: 600; easing: linear;`\n )\n }\n }\n // change store info to localstorage\n } else if (clickCount === 1) {\n this.setAttribute('material', 'color', '#99ff00')\n this.setAttribute('material', 'opacity', '1')\n localStorageService.storeCurrentBinToLocalStorage(this.userData)\n jsrootSubject.showBinProjection(this.userData)\n }\n\n // get reference to info-banner element\n let infoBanner = document.getElementById('th2-banner')\n if (infoBanner === null) {\n infoBanner = document.getElementById('th3-banner')\n }\n\n // if we have any information banner\n if (infoBanner !== null) {\n const planes = infoBanner.childNodes\n // set message to display\n if (this.userData.typeName === 'TH3' && planes.length === 5) {\n const zCor = `[${this.userData.zTitle}] [${this.userData.zMin},${\n this.userData.zMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const xCor = `[${this.userData.xTitle}] [${this.userData.xMin},${\n this.userData.xMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const yCor = `[${this.userData.yTitle}] [${this.userData.yMin},${\n this.userData.yMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const content = `Content: ${this.userData.absoluteContent} [${this.userData.content}]\\n`\n\n planes[0].setAttribute(\n 'text',\n `value: ${content}; color: ${this.userData.color}; align: center; width: 30; height: auto;`\n )\n planes[1].setAttribute(\n 'text',\n `value: ${xCor}; color: ${this.userData.axisX}; align: center; width: 30; height: auto;`\n )\n planes[2].setAttribute(\n 'text',\n `value: ${yCor}; color: ${this.userData.axisY}; align: center; width: 30; height: auto;`\n )\n planes[3].setAttribute(\n 'text',\n `value: ${zCor}; color: ${this.userData.axisZ}; align: center; width: 30; height: auto;`\n )\n } else {\n const content = `Content: ${this.userData.absoluteContent} [${this.userData.content}]\\n`\n const xCor = `[${this.userData.xTitle}] [${this.userData.xMin},${\n this.userData.xMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const yCor = `[${this.userData.yTitle}] [${this.userData.yMin},${\n this.userData.yMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n planes[0].setAttribute(\n 'text',\n `value: ${content}; color: ${this.userData.color}; align: center; baseline: center; width: 30; height: auto;`\n )\n planes[1].setAttribute(\n 'text',\n `value: ${xCor}; color: ${this.userData.axisX}; align: center; width: 30; height: auto;`\n )\n planes[2].setAttribute(\n 'text',\n `value: ${yCor}; color: ${this.userData.axisY}; align: center; width: 30; height: auto;`\n )\n }\n } else {\n console.log('You dont have any information banner!!!')\n }\n })\n },\n update: function () {\n const el = this.el\n el.setAttribute('material', 'color', el.userData.markedColor)\n el.setAttribute('material', 'opacity', '0.75')\n }\n})\n","// component to insert data to th2i bin\nimport AFRAME from 'aframe'\n\nAFRAME.registerComponent('binth2', {\n schema: {\n id: { type: 'string' },\n content: { default: 0 },\n absoluteContent: { default: 0 },\n binName: { default: '' },\n xTitle: { type: 'string' },\n yTitle: { type: 'string' },\n xMin: { type: 'number' },\n yMin: { type: 'number' },\n xMax: { type: 'number' },\n yMax: { type: 'number' },\n xCenter: { type: 'number' },\n yCenter: { type: 'number' },\n xWidth: { type: 'number' },\n yWidth: { type: 'number' },\n color: { type: 'string' },\n axisX: { type: 'string' },\n axisY: { type: 'string' },\n axisZ: { type: 'string' },\n selectColor: { type: 'string' },\n markedColor: { type: 'string' }\n },\n\n init: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH2',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n },\n update: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH2',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n }\n})\n","// component to insert data to th3i bin\nimport AFRAME from 'aframe'\n\nAFRAME.registerComponent('binth3', {\n schema: {\n id: { type: 'string' },\n content: { default: 0 },\n absoluteContent: { default: 0 },\n binName: { default: '' },\n xTitle: { type: 'string' },\n yTitle: { type: 'string' },\n zTitle: { type: 'string' },\n xMin: { type: 'number' },\n yMin: { type: 'number' },\n zMin: { type: 'number' },\n xMax: { type: 'number' },\n yMax: { type: 'number' },\n zMax: { type: 'number' },\n xCenter: { type: 'number' },\n yCenter: { type: 'number' },\n zCenter: { type: 'number' },\n xWidth: { type: 'number' },\n yWidth: { type: 'number' },\n zWidth: { type: 'number' },\n color: { type: 'string' },\n axisX: { type: 'string' },\n axisY: { type: 'string' },\n axisZ: { type: 'string' },\n selectColor: { type: 'string' },\n markedColor: { type: 'string' }\n },\n\n init: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH3',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n zTitle: this.data.zTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n zMin: this.data.zMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n zMax: this.data.zMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n zCenter: this.data.zCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n zWidth: this.data.zWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n },\n\n update: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH3',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n zTitle: this.data.zTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n zMin: this.data.zMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n zMax: this.data.zMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n zCenter: this.data.zCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n zWidth: this.data.zWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n }\n})\n","// service to manage camera\n\nexport class CameraService {\n #cameraWrapper\n constructor() {\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n }\n\n // set vertical moving\n verticalMoveCamera = (moveUp, speed) => {\n // if we have not a cameraWrapper\n if (this.#cameraWrapper === null)\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n if (this.#cameraWrapper !== null) {\n if (moveUp) {\n this.#cameraWrapper.object3D.position.y += speed\n } else {\n if (this.#cameraWrapper.object3D.position.y > 0)\n this.#cameraWrapper.object3D.position.y -= speed\n }\n }\n }\n\n // set horizontal position\n horizontalMoveCamera = (axis, increment, speed) => {\n // if we have not a cameraWrapper\n if (this.#cameraWrapper === null)\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n if (this.#cameraWrapper !== null) {\n if (increment) {\n this.#cameraWrapper.object3D.position[axis] += speed\n } else {\n this.#cameraWrapper.object3D.position[axis] -= speed\n }\n }\n }\n\n #setVerticalOffset = (elm, offset, rotation) => {\n if (this.#cameraWrapper !== null && elm !== null) {\n // this.#cameraWrapper.object3D.rotation.y = rotation\n const newXPos = elm.object3D.position.x + 1 * elm.object3D.position.x\n const newZPos = elm.object3D.position.z + 1 * elm.object3D.position.z\n const newYPos = offset\n // this.#cameraWrapper.object3D.position.x = newXPos + 1\n // this.#cameraWrapper.object3D.position.z = newZPos + 1\n // this.#cameraWrapper.object3D.position.y = newYPos\n this.#cameraWrapper.setAttribute(\n 'animation',\n `property: position; to: ${newXPos + 1} ${newYPos} ${\n newZPos + 1\n }; dur: 100;`\n )\n this.#cameraWrapper.setAttribute(\n 'animation__1',\n `property: rotation; to: ${\n this.#cameraWrapper.object3D.rotation.x\n } ${rotation} ${this.#cameraWrapper.object3D.rotation.z}; dur: 100;`\n )\n }\n }\n\n // set current position\n setCameraPosition = (offsets) => {\n if (this.#cameraWrapper !== null) {\n let newZPos = this.#cameraWrapper.object3D.position.y\n if (offsets.zOffset !== undefined) {\n // this.#cameraWrapper.object3D.position.y = offsets.zOffset + 2\n newZPos = offsets.zOffset * 2\n }\n const newXPos = offsets.xOffset + offsets.xOffset\n const newYPos = offsets.yOffset + offsets.yOffset\n // this.#cameraWrapper.object3D.position.x = newXPos - 3\n // this.#cameraWrapper.object3D.position.z = newYPos - 3\n setTimeout(() => {\n this.#cameraWrapper.setAttribute(\n 'animation',\n `property: position; to: ${newXPos - 3} ${newZPos} ${\n newYPos - 3\n }; dur: 40;`\n )\n }, 1800)\n }\n }\n\n setPredefinedDownPosition = () => {\n // get target element\n const labelElement = document.getElementById('downLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 180)\n }\n }\n\n setPredefinedUpPosition = () => {\n // get target element\n const labelElement = document.getElementById('upLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 0)\n }\n }\n\n setPredefinedRightPosition = () => {\n // get target element\n const labelElement = document.getElementById('rightLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 90)\n }\n }\n\n setPredefinedLeftPosition = () => {\n // get target element\n const labelElement = document.getElementById('leftLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 270)\n }\n }\n\n setPredefinedDownPositionWithOffset = (offset) => {\n // get target element\n const labelElement = document.getElementById('downLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 180)\n }\n }\n\n setPredefinedUpPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('upLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 0)\n }\n }\n\n setPredefinedRightPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('rightLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 90)\n }\n }\n\n setPredefinedLeftPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('leftLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 270)\n }\n }\n}\n","// service to manage histogram views\nimport { Subject } from 'rxjs'\n\nclass HistogramSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n changeHistogramSectionByOffset(axis, histogramType, increment, defaultRange) {\n this.#subject.next({\n name: histogramType,\n axis: axis,\n increment: increment,\n defaultRange: defaultRange\n })\n }\n\n changeHistogramFunction(typeFunction, histogramType) {\n this.#subject.next({\n fFunction: typeFunction,\n name: histogramType\n })\n }\n\n getChangedSection() {\n return this.#subject.asObservable()\n }\n}\n\nconst histogramTH2Service = new HistogramSubject()\nconst histogramTH3Service = new HistogramSubject()\nexport { histogramTH2Service, histogramTH3Service }\n","/* add listeners for keyboard controller */\nimport { CameraService } from '../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../observables/histogramSubject'\nimport binSubject from '../observables/binSubject'\nimport jsrootService from '../services/jsrootService'\nimport cameraSubject from '../observables/cameraSubject'\n\nconst keyPressed = {}\nlet cameraService = new CameraService()\nlet aframeObj\nlet geoAttributes\n\nconst handlePositioning = (property, event) => {\n let difference = 0.2\n\n if (property.name === 'scale') difference = 0.01\n else if (property.name === 'rotation') difference = 2\n\n if (event.key === 'ArrowDown') {\n property.xValue = property.xValue + difference\n } else if (event.key === 'ArrowUp') {\n property.xValue = property.xValue - difference\n } else if (event.key === '=') {\n property.yValue = property.yValue + difference\n } else if (event.key === '-') {\n property.yValue = property.yValue - difference\n } else if (event.key === 'ArrowRight') {\n property.zValue = property.zValue + difference\n } else if (event.key === 'ArrowLeft') {\n property.zValue = property.zValue - difference\n }\n aframeObj.setAttribute(\n property.name,\n `${property.xValue} ${property.yValue} ${property.zValue}`\n )\n}\n\n// handle histogram section change by default range = 1\nconst handleChangeHistogramSectionByDefaultRange = (event) => {\n if (event.key === 'k' || event.key === 'K') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'i' || event.key === 'I') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n true\n )\n } else if (event.key === 'u' || event.key === 'U') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n true\n )\n } else if (event.key === 'o' || event.key === 'O') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'l' || event.key === 'L') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'j' || event.key === 'J') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n true\n )\n }\n}\n\n// handle histogram section change by user's range = user sets this range\nconst handleChangeHistogramSectionByOwnRange = (event) => {\n if (event.key === 'k' || event.key === 'K') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'i' || event.key === 'I') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n false\n )\n } else if (event.key === 'u' || event.key === 'U') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n false\n )\n } else if (event.key === 'o' || event.key === 'O') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'l' || event.key === 'L') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'j' || event.key === 'J') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n false\n )\n }\n}\n\n// key press handler\nconst keyPressHandlerFunction = (event) => {\n keyPressed[event.key] = true\n\n if (keyPressed.Z || keyPressed.z) {\n handlePositioning(geoAttributes[0], event)\n }\n if (keyPressed.X || keyPressed.x) {\n handlePositioning(geoAttributes[1], event)\n }\n if (keyPressed.C || keyPressed.c) {\n handlePositioning(geoAttributes[2], event)\n }\n if (keyPressed.Shift) {\n handleChangeHistogramSectionByOwnRange(event)\n }\n handleChangeHistogramSectionByDefaultRange(event)\n // change camera up\n if (event.key === 'q' || event.key === 'Q') {\n cameraService.verticalMoveCamera(true, 0.3)\n }\n // change camera down\n if (event.key === 'e' || event.key === 'E') {\n cameraService.verticalMoveCamera(false, 0.3)\n }\n if (event.key === '1') {\n cameraService.setPredefinedDownPosition()\n }\n if (event.key === '2') {\n cameraService.setPredefinedUpPosition()\n }\n if (event.key === '3') {\n cameraService.setPredefinedRightPosition()\n }\n if (event.key === '4') {\n cameraService.setPredefinedLeftPosition()\n }\n if (event.key === '5') {\n cameraService.setPredefinedDownPositionWithOffset()\n }\n if (event.key === '6') {\n cameraService.setPredefinedUpPositionWithOffset()\n }\n if (event.key === '7') {\n cameraService.setPredefinedRightPositionWithOffset()\n }\n if (event.key === '8') {\n cameraService.setPredefinedLeftPositionWithOffset()\n }\n if (event.key === 'Enter') {\n binSubject.saveSelectedBinToLocalStorage()\n ;[\n 'th-mapping',\n 'bannerId_1',\n 'bannerId_2',\n 'bannerId_3',\n 'bannerId_4'\n ].forEach((targetId) => {\n if (document.getElementById(targetId) !== null) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n targetId,\n '500px',\n '400px'\n )\n }\n })\n }\n if (event.key === 'r' || event.key === 'R') {\n binSubject.deleteBinFromLocalStorage()\n }\n if (event.key === 'm' || event.key === 'M') {\n histogramTH2Service.changeHistogramFunction('feet', 'TH2')\n }\n if (event.key === 'n' || event.key === 'N') {\n histogramTH2Service.changeHistogramFunction('default', 'TH2')\n }\n if (event.key === 'c' || event.key === 'C') {\n cameraSubject.setUserState()\n }\n if (event.key === 'v' || event.key === 'V') {\n cameraSubject.setVisibilityOfBanners('keyboard')\n }\n if (event.key === 'x' || event.key === 'X') {\n cameraSubject.shiftBanners()\n }\n}\n\n// delete function key from array\nconst keyReleaseHandlerFunction = (event) => {\n delete keyPressed[event.key]\n}\n\nconst initialKeyboardController = (data, object) => {\n aframeObj = object\n geoAttributes = [data.position, data.scale, data.rotation]\n // if (this.#cameraService === null) this.#cameraService = new CameraService()\n // set initial position, scale, rotation of the histogram\n for (let i = 0; i < 3; i++) {\n aframeObj.setAttribute(\n geoAttributes[i].name,\n `${geoAttributes[i].xValue} ${geoAttributes[i].yValue} ${geoAttributes[i].zValue}`\n )\n }\n}\n\nconst keyboardUpdateCameraReference = () => {\n cameraService = new CameraService()\n}\n\nexport { initialKeyboardController }\nexport { keyPressHandlerFunction }\nexport { keyReleaseHandlerFunction }\nexport { keyboardUpdateCameraReference }\n","// component for modification aframe entity of histogram\nimport AFRAME from 'aframe'\n// import { setPositioning } from '../utils/histogramFactory'\nimport {\n initialKeyboardController,\n keyReleaseHandlerFunction,\n keyPressHandlerFunction,\n keyboardUpdateCameraReference\n} from '../controllers/keyboardController'\n\n// aframe component for positioning histogram in scene\nAFRAME.registerComponent('histogram-control', {\n schema: {\n position: {\n name: 'position',\n xValue: 0,\n yValue: 0,\n zValue: 0\n },\n scale: {\n name: 'scale',\n xValue: 2,\n yValue: 2,\n zValue: 2\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 0,\n zValue: 0\n }\n },\n init: function () {\n const el = this.el\n\n // set controllers\n // setPositioning(el, this.schema)\n initialKeyboardController(this.schema, el)\n // keyboard listeners\n document.addEventListener('keydown', keyPressHandlerFunction)\n document.addEventListener('keyup', keyReleaseHandlerFunction)\n },\n\n update: function () {\n keyboardUpdateCameraReference()\n }\n})\n","// component to change text value of the entity after delay\nimport AFRAME from 'aframe'\n\nexport default AFRAME.registerComponent('label-handler', {\n schema: {\n value: { type: 'string' },\n delay: { type: 'number' }\n },\n\n init: function () {\n const el = this.el\n this.value = this.data.value\n el.setAttribute('text', 'value', this.data.value)\n },\n\n update: function () {\n const el = this.el // Entity.\n if (this.value !== this.data.value) {\n setTimeout(() => {\n el.setAttribute('text', 'value', this.data.value)\n }, this.data.delay)\n this.value = this.data.value\n }\n }\n})\n","export default {\n def: {\n colorPalette: [\n '#4b0066',\n '#8300b3',\n '#bb00ff',\n '#cf4dff',\n '#e499ff',\n '#ffffcc',\n '#ffff99',\n '#ffff66',\n '#ffff33',\n '#fcba03'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#4b0066',\n secondary: '#FF3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n fire: {\n colorPalette: [\n '#5b0000',\n '#7b2100',\n '#a23b00',\n '#c84900',\n '#df5900',\n '#f18800',\n '#f1a000',\n '#ffae00',\n '#ffcd19',\n '#ffe159'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#5b0000',\n secondary: '#b000d4'\n },\n font: {\n primary: 'black',\n secondary: 'black'\n }\n },\n nebula: {\n colorPalette: [\n '#13004b',\n '#320065',\n '#4e0085',\n '#6100a5',\n '#7000b8',\n '#9800c6',\n '#ab00c6',\n '#b900d2',\n '#d700da',\n '#ff6efc'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#13004b',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n rainforest: {\n colorPalette: [\n '#005b01',\n '#007b23',\n '#00a23d',\n '#00c84c',\n '#00df5c',\n '#00f18b',\n '#00ffb1',\n '#19ffd0',\n '#a6fffe',\n '#56fffe'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#005b01',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n nature: {\n colorPalette: [\n '#4a691a',\n '#5e8425',\n '#79a834',\n '#91c640',\n '#9ed64b',\n '#a8dc59',\n '#b0e166',\n '#bfeb7c',\n '#d7fba2',\n '#deffad'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#4a691a',\n secondary: '#b000d4'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n water: {\n colorPalette: [\n '#00545a',\n '#00717a',\n '#0097a2',\n '#00bac8',\n '#00cede',\n '#00dff0',\n '#00edff',\n '#45f2ff',\n '#7ef6ff',\n '#bdfaff'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#00545a',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n sunflower: {\n colorPalette: [\n '#1e3600',\n '#2e4d00',\n '#507001',\n '#91a004',\n '#b4bb06',\n '#d2d309',\n '#eeed0f',\n '#ffff28',\n '#ffff85',\n '#ffffc2'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#1e3600',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n blood: {\n colorPalette: [\n '#470101',\n '#6e0101',\n '#800b0b',\n '#940c0c',\n '#a30000',\n '#bd0909',\n '#e01f1f',\n '#d43b3b',\n '#db5e5e',\n '#f78888'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#470101',\n secondary: '#f6ff00'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n magma: {\n colorPalette: [\n '#dbff1d',\n '#d5e814',\n '#d5d007',\n '#cc9b00',\n '#b87600',\n '#9c4a00',\n '#812f00',\n '#661900',\n '#661420',\n '#2b0000'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#2b0000',\n secondary: '#ae2000'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n jupiter: {\n colorPalette: [\n '#00340f',\n '#00344f',\n '#006e3a',\n '#00976a',\n '#26efd0',\n '#9c4a00',\n '#9c4a00',\n '#812f00',\n '#661900',\n '#2b0000'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#00340f',\n secondary: '#e3ff5b'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n magic: {\n colorPalette: [\n '#342000',\n '#6e5e00',\n '#888500',\n '#919700',\n '#8dbe00',\n '#caef26',\n '#cf6e85',\n '#b300b8',\n '#6b0090',\n '#3b0066'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#342000',\n secondary: '#c85bff'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n }\n}\n","/* object provides all necessary color palettes and schemes */\nimport palette from './theme'\n\nexport default class ThemeProvider {\n constructor(theme) {\n if (palette[theme]) {\n // set selected theme\n this.xAxis = palette[theme].axis.x\n this.yAxis = palette[theme].axis.y\n this.zAxis = palette[theme].axis.z\n this.palette = palette[theme].colorPalette\n this.primaryAccent = palette[theme].accent.primary\n this.secondaryAccent = palette[theme].accent.secondary\n this.primaryFont = palette[theme].font.primary\n this.secondaryFont = palette[theme].font.secondary\n } else {\n // set default theme\n this.xAxis = palette.def.axis.x\n this.yAxis = palette.def.axis.y\n this.zAxis = palette.def.axis.z\n this.palette = palette.def.colorPalette\n this.primaryAccent = palette.def.accent.primary\n this.secondaryAccent = palette.def.accent.secondary\n this.primaryFont = palette.def.font.primary\n this.secondaryFont = palette.def.font.secondary\n }\n }\n\n getAxisColor(axis) {\n if (axis === 'x' || axis === 'X') return this.xAxis\n if (axis === 'y' || axis === 'Y') return this.yAxis\n if (axis === 'z' || axis === 'Z') return this.zAxis\n return null\n }\n\n getPrimaryAccentColor() {\n return this.primaryAccent\n }\n\n getSecondaryAccentColor() {\n return this.secondaryAccent\n }\n\n getPrimaryFontColor() {\n return this.primaryFont\n }\n\n getSecondaryFontColor() {\n return this.secondaryFont\n }\n\n // set bin colors get color\n getBinColor(content) {\n const fullContent = 1\n\n let color = this.palette[0]\n\n if (content >= fullContent) {\n return this.palette[9]\n }\n\n const difference = 0.12\n let sum = difference\n\n // find right color\n for (let i = 0; i <= 9; i++) {\n if (content <= sum) {\n color = this.palette[i]\n break\n }\n sum += difference\n }\n // return right color from palette\n return color\n }\n}\n","import React from 'react'\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport 'aframe'\nimport ThemeProvider from '../resources/themeProvider'\n\n/**\n * Vytvorenie objektu pre generovanie entít histogramu.\n * @class\n */\nexport default class HistogramReactFactory {\n #id = ''\n #selectedBins = []\n #histogram = null\n #type = ''\n #projections = null\n #themeProvider = null\n // current offsets\n #xOffset = 1\n #yOffset = 1\n #zOffset = 1\n // current histogram limits\n #xLimit = 0\n #yLimit = 0\n #zLimit = 0\n // bin scales\n #xWidth = 1\n #yWidth = 1\n #zWidth = 1\n // range\n #range = 4\n // option for animation\n #shift = {\n xOffset: 0,\n yOffset: 0,\n zOffset: 0\n }\n\n // older elements\n #previousBins = []\n\n constructor(uniqueName, histogram, section, range, projections, theme) {\n this.initializeFactory(\n uniqueName,\n histogram,\n section,\n range,\n projections,\n theme\n )\n }\n\n initializeFactory(uniqueName, histogram, section, range, projections, theme) {\n this.#id = uniqueName\n this.#themeProvider = new ThemeProvider(theme)\n this.#projections = projections\n this.#histogram = histogram\n this.#type = histogram._typename\n // set current limits\n this.#range = 8\n this.#xLimit = histogram.fXaxis.fNbins\n this.#yLimit = histogram.fYaxis.fNbins\n // bin scales\n this.#xWidth = histogram.fXaxis.fXmax / histogram.fXaxis.fNbins\n this.#yWidth = histogram.fYaxis.fXmax / histogram.fYaxis.fNbins\n // set current section offsets\n if (section !== null && section !== undefined) {\n this.#range = section.range\n if (section.xOffset)\n this.#xOffset = this.#checkOffsetValue(section.xOffset, this.#xLimit)\n if (section.yOffset)\n this.#yOffset = this.#checkOffsetValue(section.yOffset, this.#yLimit)\n } else {\n if (range) this.#range = range\n }\n // define third dimension for th3 histogram\n if (histogram._typename.includes('TH3')) {\n // set current limits\n this.#range = 4\n this.#zLimit = histogram.fZaxis.fNbins\n // bin scales\n this.#zWidth = histogram.fZaxis.fXmax / histogram.fZaxis.fNbins\n // set current section offsets\n if (section !== null && section !== undefined) {\n if (section.zOffset)\n this.#zOffset = this.#checkOffsetValue(section.zOffset, this.#zLimit)\n } else {\n if (range) this.#range = range\n }\n }\n }\n\n getXOffset = () => {\n return this.#xOffset\n }\n\n getYOffset = () => {\n return this.#yOffset\n }\n\n getZOffset = () => {\n return this.#zOffset\n }\n\n getRange = () => {\n return this.#range\n }\n\n #checkOffsetValue = (offsetValue, limit) => {\n let currOffset =\n offsetValue > limit - this.#range ? limit - this.#range : offsetValue\n\n if (currOffset < 1) {\n currOffset = 1\n }\n return currOffset\n }\n\n #checkBinState = (binId) => {\n const updatedArray = this.#selectedBins.filter((item) => item.id === binId)\n return updatedArray.length !== 0\n }\n\n // create axis entity\n #createAxisEntity = (\n id,\n positionX,\n positionY,\n positionZ,\n rotationX,\n rotationY,\n rotationZ,\n width,\n height,\n value,\n color,\n fontColor\n ) => {\n return (\n <a-entity\n key={id + this.#id}\n geometry={`primitive: plane; width:${width}; height:${height};`}\n text={`color: ${fontColor}; width: 4; height:auto; align:center;`}\n label-handler={`value: ${value}; delay:${500}`}\n rotation={`${rotationX} ${rotationY} ${rotationZ}`}\n // position={`${positionX} ${positionY} ${positionZ}`}\n material={`color: ${color};`}\n animation='property: text.width; from: 0; to: 4; dur: 1000;'\n animation__1='property: material.opacity; from: 0; to: 0.8; dur: 1500;'\n animation__2={`property: position; from: ${\n positionX + this.#shift.xOffset\n } ${positionY + this.#shift.zOffset} ${\n positionZ + this.#shift.yOffset\n }; to: ${positionX} ${positionY} ${positionZ}; dur: 1005;`}\n />\n )\n }\n\n // create th3 histogram\n createTH3Histogram() {\n // get selected bins from local storage\n this.#selectedBins = localStorageService.getBinsFromLocalStorage()\n\n // react elements to draw the histograms\n const elements = {\n bins: [],\n normalAxis: [],\n reversedAxis: [],\n banners: []\n }\n // variables for rendering the histogram\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let zcenter, zmin, zmax, zwidth\n const binName = ''\n let absoluteContent\n let c\n let count = 0\n\n // load th3 limits from localstorage\n // const binScale = ndmVrStorage.loadBinScale('TH3')\n // console.log(binScale)\n\n const maxXLength =\n this.#xOffset + this.#range > this.#xLimit\n ? this.#xLimit\n : this.#xOffset + this.#range\n const maxYLength =\n this.#yOffset + this.#range > this.#yLimit\n ? this.#yLimit\n : this.#yOffset + this.#range\n const maxZLength =\n this.#zOffset + this.#range > this.#zLimit\n ? this.#zLimit\n : this.#zOffset + this.#range\n\n const xTitle = this.#histogram.fXaxis.fTitle\n const yTitle = this.#histogram.fYaxis.fTitle\n const zTitle = this.#histogram.fZaxis.fTitle\n const xLabels = this.#histogram.fXaxis.fLabels\n ? this.#histogram.fXaxis.fLabels.arr\n : []\n const yLabels = this.#histogram.fYaxis.fLabels\n ? this.#histogram.fYaxis.fLabels.arr\n : []\n const zLabels = this.#histogram.fZaxis.fLabels\n ? this.#histogram.fZaxis.fLabels.arr\n : []\n\n const currentBinScales = []\n\n // generate react elements of the bins\n for (let iz = this.#zOffset; iz <= maxZLength; iz++)\n for (let iy = this.#yOffset; iy <= maxYLength; iy++)\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n xcenter = this.#histogram.fXaxis.GetBinCenter(ix)\n xmin = this.#histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = this.#histogram.fYaxis.GetBinCenter(iy)\n ymin = this.#histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n zcenter = this.#histogram.fZaxis.GetBinCenter(iz)\n zmin = this.#histogram.fZaxis.GetBinLowEdge(iz)\n zmax = zcenter + (zcenter - zmin)\n zwidth = zmax - zmin\n absoluteContent = this.#histogram.getBinContent(ix, iy, iz)\n c = this.#optimizeBinContent(\n absoluteContent,\n this.#histogram.fMaximum\n )\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n let size = c\n if (c < 0.15) size = 0.15\n\n const color = this.#themeProvider.getBinColor(c)\n // check bin status\n const id =\n this.#id +\n xmin +\n 'th3' +\n xmax +\n 'th3' +\n zmin +\n 'th3' +\n zmax +\n 'th3' +\n ymin +\n 'th3' +\n ymax\n let markedColor\n if (this.#checkBinState(id)) {\n markedColor = this.#themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: ${zTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${zmin};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${zmax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n zCenter: ${zcenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${zwidth};\n markedColor: ${markedColor};\n selectColor: ${this.#themeProvider.getSecondaryAccentColor()};\n axisX: ${this.#themeProvider.getAxisColor('x')};\n axisY: ${this.#themeProvider.getAxisColor('y')};\n axisZ: ${this.#themeProvider.getAxisColor('z')}`\n\n const width = size * 0.9\n const posX = xmin / this.#xWidth\n const posY = zmin / this.#zWidth + 0.2\n const posZ = ymin / this.#yWidth\n elements.bins[count] = (\n <a-box\n key={count}\n class='clickable'\n material={`color: ${markedColor};`}\n binth3={binData}\n // position={`${posX} ${posY} ${posZ}`}\n // height={width}\n // width={width}\n // depth={width}\n mouseevent\n animation={`property: scale; from: ${this.#getPreviousBinScales(\n id\n )} ${this.#getPreviousBinScales(\n id\n )} ${this.#getPreviousBinScales(\n id\n )}; to: ${width} ${width} ${width}; dur: 1500; easing: linear;`}\n // animation={`property: scale; to: ${width} ${width} ${width}; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.75; dur: 2600;'\n animation__2={`property: position; from: ${\n posX + this.#shift.xOffset\n } ${posY + this.#shift.zOffset} ${\n posZ + this.#shift.yOffset\n }; to: ${posX} ${posY} ${posZ}; dur: 1000;`}\n animation__3={`property: material.color; from: ${this.#getPreviousBinColor(\n id\n )}; to: ${markedColor}; dur: 2600;`}\n />\n )\n currentBinScales[count] = {\n key: id,\n scale: width,\n color: markedColor\n }\n }\n count++\n }\n\n this.#previousBins = currentBinScales\n // set axis\n count = 0\n for (let iz = this.#yOffset; iz <= maxYLength; iz++) {\n const normalAxis = this.#createAxisEntity(\n 50000 + count,\n -2.5 + this.#xOffset,\n this.#zOffset - 1,\n iz - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `${yLabels[iz - 1] ? yLabels[iz - 1].fString : iz - 1}`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n const reversedAxis = this.#createAxisEntity(\n 55000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n iz - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `${yLabels[iz - 1] ? yLabels[iz - 1].fString : iz - 1}`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add z label\n elements.normalAxis[count] = (\n <a-entity\n id='leftLabel'\n key={60000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n /* position={`${this.#xOffset - 4} ${this.#zOffset - 1} ${\n this.#yOffset + 0.5\n }`} */\n animation={`property: position; from: ${\n this.#xOffset - 4 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n this.#yOffset + 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 4} ${this.#zOffset - 1} ${\n this.#yOffset + 0.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='rightLabel'\n key={65000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n // position={`${maxXLength + 2} ${this.#zOffset - 1} ${maxYLength - 2.5}`}\n animation={`property: position; from: ${\n maxXLength + 2 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n maxYLength - 2.5 + this.#shift.yOffset\n }; to: ${maxXLength + 2} ${this.#zOffset - 1} ${\n maxYLength - 2.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n count++\n // generate x and y axis\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n const normalAxis = this.#createAxisEntity(\n 70000 + count,\n ix - 1,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 270,\n 0,\n 2,\n 1,\n `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n const reversedAxis = this.#createAxisEntity(\n 75000 + count,\n ix - 1,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 90,\n 0,\n 2,\n 1,\n `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add x label\n elements.normalAxis[count] = (\n <a-entity\n id='downLabel'\n key={80000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n // position={`${this.#xOffset} ${this.#zOffset - 1} ${this.#yOffset - 4}`}\n animation={`property: position; from: ${\n this.#xOffset + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n this.#yOffset - 4 + this.#shift.yOffset\n }; to: ${this.#xOffset} ${this.#zOffset - 1} ${\n this.#yOffset - 4\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='upLabel'\n key={85000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n // position={`${maxXLength - 2.5} ${this.#zOffset - 1} ${maxYLength + 2}`}\n animation={`property: position; from: ${\n maxXLength - 2.5 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n maxYLength + 2 + this.#shift.yOffset\n }; to: ${maxXLength - 2.5} ${this.#zOffset - 1} ${\n maxYLength + 2\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n count++\n // y axis\n elements.normalAxis[count] = this.#createAxisEntity(\n 90000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : this.#zOffset - 1\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n elements.reversedAxis[count] = this.#createAxisEntity(\n 91000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 90,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : this.#zOffset - 1\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n elements.normalAxis[count] = this.#createAxisEntity(\n 92000 + count,\n this.#xOffset - 2.5,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 270,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : this.#zOffset - 1\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n elements.reversedAxis[count] = this.#createAxisEntity(\n 93000 + count,\n this.#xOffset - 2.5,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : this.#zOffset - 1\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n // add y label\n elements.normalAxis[count] = (\n <a-entity\n key={95000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${270} ${90}`}\n /* position={`${this.#xOffset - 1.5} ${maxZLength - 1} ${\n this.#yOffset - 2\n }`} */\n animation={`property: position; from: ${\n this.#xOffset - 1.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n this.#yOffset - 2 + this.#shift.yOffset\n }; to: ${this.#xOffset - 1.5} ${maxZLength - 1} ${\n this.#yOffset - 2\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={100000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${90} ${90}`}\n // position={`${maxXLength - 0.5} ${maxZLength - 1} ${maxYLength}`}\n animation={`property: position; from: ${\n maxXLength - 0.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n maxYLength + this.#shift.yOffset\n }; to: ${maxXLength - 0.5} ${maxZLength - 1} ${maxYLength}; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={105000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${360} ${90}`}\n // position={`${this.#xOffset - 2} ${maxZLength - 1} ${maxYLength - 0.5}`}\n animation={`property: position; from: ${\n this.#xOffset - 2 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n maxYLength - 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 2} ${maxZLength - 1} ${\n maxYLength - 0.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={110000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${180} ${90}`}\n /* position={`${maxXLength - 0.5} ${maxZLength - 1} ${\n }`} */\n animation={`property: position; from: ${\n maxXLength - 0.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n this.#yOffset - 1.5 + this.#shift.yOffset\n }; to: ${maxXLength - 0.5} ${maxZLength - 1} ${\n this.#yOffset - 1.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n // add histogram title\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={115000 + count + this.#id}\n text={`value: ${\n this.#histogram.fTitle\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 270; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${this.#xOffset - 90} ${maxZLength + 16.5} ${\n this.#yOffset + 90\n }`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press V to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n )\n // add file title\n elements.reversedAxis[count] = (\n <a-entity\n key={120000 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fName\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + 120} ${maxZLength + 16.5} ${\n this.#yOffset - 70\n }`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press buttonY to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n )\n count++\n const bannerWidthX =\n this.#range > this.#xLimit ? this.#xLimit + 1 : this.#range\n const bannerWidthY =\n this.#range > this.#yLimit ? this.#yLimit + 1 : this.#range\n elements.banners[0] = (\n <a-box\n key={125000 + count + this.#id}\n width={bannerWidthX + 8}\n material='color: #171717'\n height={0.2}\n depth={bannerWidthY + 8}\n // position={`${this.#xOffset + 2.5} -0.5 ${this.#yOffset + 2.5}`}\n animation={`property: position; from: ${\n this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset\n } ${this.#zOffset - 1.5 + this.#shift.zOffset}\n ${this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset};\n to: ${this.#xOffset + bannerWidthX * 0.5 - 1} ${this.#zOffset - 1.5} ${\n this.#yOffset + bannerWidthY * 0.5 - 0.5\n }dur: 1100;`}\n />\n )\n // add banner\n /*\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th3-banner'\n text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + this.#range / 2 + 2.5} ${\n this.#zOffset + this.#range / 2 + 1.5\n } ${maxYLength + 8}`}\n >\n <a-entity rotation='0 180 0' position='0 6 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n // add banner with mappings\n count++\n elements.banners[1] = (\n <a-box\n key={130000 + count + this.#id}\n id='th-mapping'\n geometry='width:1; height:15; depth:22;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8} ${this.#zOffset + this.#range / 2 + 0.5}\n ${this.#yOffset + this.#range / 2 + 2.5}`}\n material='transparent:true'\n />\n )\n count++\n elements.banners[2] = (\n <a-box\n key={135000 + count + this.#id}\n id='th-background'\n geometry='width:0.2; height:15; depth:24;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8.2} ${this.#zOffset + this.#range / 2 + 0.5}\n ${this.#yOffset + 1 + this.#range / 2 + 1.5}`}\n material='color: white, transparent:false'\n />\n )\n\n return elements\n }\n\n // create th2 histogram\n createTH2Histogram(projectionFunction) {\n // get selected bins from local storage\n this.#selectedBins = localStorageService.getBinsFromLocalStorage()\n\n // react elements to draw the histogram\n const elements = {\n bins: [],\n normalAxis: [],\n reversedAxis: [],\n banners: []\n }\n // variables for rendering the histogram\n let centeredYPosition\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let c\n const binName = ''\n let absoluteContent\n let count = 0\n // bin attributes\n // const binScale = ndmVrStorage.loadBinScale('TH2')\n // max length\n const maxXLength =\n this.#xOffset + this.#range > this.#histogram.fXaxis.fNbins\n ? this.#histogram.fXaxis.fNbins\n : this.#xOffset + this.#range\n const maxYLength =\n this.#yOffset + this.#range > this.#histogram.fYaxis.fNbins\n ? this.#histogram.fYaxis.fNbins\n : this.#yOffset + this.#range\n const xTitle =\n this.#histogram.fXaxis.fTitle !== '' ? this.#histogram.fXaxis.fTitle : 'x'\n const yTitle =\n this.#histogram.fYaxis.fTitle !== '' ? this.#histogram.fYaxis.fTitle : 'y'\n const xLabels = this.#histogram.fXaxis.fLabels\n ? this.#histogram.fXaxis.fLabels.arr\n : []\n const yLabels = this.#histogram.fYaxis.fLabels\n ? this.#histogram.fYaxis.fLabels.arr\n : []\n // reset previous bins\n const currentBinScales = []\n\n // generate react elements of the bins\n for (let iy = this.#yOffset; iy <= maxYLength; iy++) {\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n xcenter = this.#histogram.fXaxis.GetBinCenter(ix)\n xmin = this.#histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = this.#histogram.fYaxis.GetBinCenter(iy)\n ymin = this.#histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n absoluteContent = this.#histogram.getBinContent(ix, iy)\n c = this.#optimizeBinContent(absoluteContent, this.#histogram.fMaximum)\n centeredYPosition = c / 2\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n const projectionColor = this.#projectionFunction(\n projectionFunction,\n xmin,\n ymin\n )\n const color =\n projectionColor === ''\n ? this.#themeProvider.getBinColor(c)\n : projectionColor\n\n // check bin status\n const id =\n this.#id + xmin + 'th2' + xmax + 'th2' + ymin + 'th2' + ymax\n let markedColor\n if (this.#checkBinState(id)) {\n markedColor = this.#themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n xMax: ${xmax};\n yMax: ${ymax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n markedColor: ${markedColor};\n selectColor: ${this.#themeProvider.getSecondaryAccentColor()};\n axisX: ${this.#themeProvider.getAxisColor('x')};\n axisY: ${this.#themeProvider.getAxisColor('y')};\n axisZ: ${this.#themeProvider.getAxisColor('z')}`\n\n const width = xwidth / this.#xWidth / 4\n const depth = ywidth / this.#yWidth / 4\n const posX = xmin / this.#xWidth\n const posY = ymin / this.#yWidth\n elements.bins[count] = (\n <a-box\n key={id}\n class='clickable'\n material={`color: ${markedColor}; opacity: 0.75;`}\n binth2={binData}\n // position={`${posX} ${centeredYPosition} ${posY}`}\n mouseevent\n animation={`property: scale; from: ${width} ${this.#getPreviousBinScales(\n id\n )} ${depth}; to: ${width} ${c} ${depth}; delay:100; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.75; dur: 2000;'\n animation__2={`property: position; from: ${\n posX + this.#shift.xOffset\n } ${centeredYPosition} ${\n posY + this.#shift.yOffset\n }; to: ${posX} ${centeredYPosition} ${posY}; dur: 1000;`}\n // animation__3={`property: material.color; from: ${this.#getPreviousBinColor(\n // >/ id\n // )}; to: ${markedColor}; dur: 2600;`}\n />\n )\n currentBinScales[count] = {\n key: id,\n scale: c,\n color: markedColor\n }\n }\n count++\n }\n }\n this.#previousBins = currentBinScales\n // set axis\n count = 0\n for (let iy = this.#yOffset; iy <= maxYLength; iy++) {\n const normalAxis = this.#createAxisEntity(\n 1500 + count,\n this.#xOffset - 2.5,\n 0,\n iy - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `${\n yLabels[iy - 1] ? yLabels[iy - 1].fString : (iy - 1) * this.#yWidth\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n const reversedAxis = this.#createAxisEntity(\n 3000 + count,\n maxXLength + 0.5,\n 0,\n iy - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `${\n yLabels[iy - 1] ? yLabels[iy - 1].fString : (iy - 1) * this.#yWidth\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n // axis title\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add y label\n elements.normalAxis[count] = (\n <a-entity\n id='leftLabel'\n key={4500 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n // position={`${this.#xOffset - 4} ${0} ${this.#yOffset + 0.5}`}\n animation={`property: position; from: ${\n this.#xOffset - 4 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n this.#yOffset + 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 4} ${0} ${this.#yOffset + 0.5}; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='rightLabel'\n key={6000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n // position={`${maxXLength + 2} ${0} ${maxYLength - 2.5}`}\n animation={`property: position; from: ${\n maxXLength + 2 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n maxYLength - 2.5 + this.#shift.yOffset\n }; to: ${maxXLength + 2} ${0} ${maxYLength - 2.5}; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n count++\n // generate x axis\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n const normalAxis = this.#createAxisEntity(\n 7500 + count,\n ix - 1,\n 0,\n this.#yOffset - 2.5,\n 270,\n 270,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1] ? xLabels[ix - 1].fString : (ix - 1) * this.#xWidth\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n const reversedAxis = this.#createAxisEntity(\n 9000 + count,\n ix - 1,\n 0,\n maxYLength + 0.5,\n 270,\n 90,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1] ? xLabels[ix - 1].fString : (ix - 1) * this.#xWidth\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add x label\n elements.normalAxis[count] = (\n <a-entity\n id='downLabel'\n key={10500 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n // position={`${this.#xOffset} ${0} ${this.#yOffset - 4}`}\n animation={`property: position; from: ${\n this.#xOffset + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n this.#yOffset - 4 + this.#shift.yOffset\n }; to: ${this.#xOffset} ${0} ${this.#yOffset - 4}; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='upLabel'\n key={12000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n // position={`${maxXLength - 2.5} ${0} ${maxYLength + 2}`}\n animation={`property: position; from: ${\n maxXLength - 2.5 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${maxYLength + 2 + this.#shift.yOffset}; to: ${\n maxXLength - 2.5\n } ${0} ${maxYLength + 2}; dur: 1000;`}\n material='opacity: 0;'\n />\n )\n count++\n\n // generate y axis\n elements.normalAxis[count] = this.#createAxisEntity(\n 13500 + count,\n maxXLength + 0.5,\n 0,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n elements.reversedAxis[count] = this.#createAxisEntity(\n 15000 + count,\n maxXLength + 0.5,\n 0,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n elements.normalAxis[count] = this.#createAxisEntity(\n 16500 + count,\n this.#xOffset - 2.5,\n 0,\n maxYLength + 0.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n elements.reversedAxis[count] = this.#createAxisEntity(\n 18000 + count,\n this.#xOffset - 2.5,\n 0,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n // add histogram title\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={19500 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fTitle\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 270; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${this.#xOffset - 90} ${16.5} ${this.#yOffset + 90}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press V to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n )\n // add file title\n elements.reversedAxis[count] = (\n <a-entity\n key={21000 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fName\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + 120} ${16.5} ${this.#yOffset - 70}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press buttonY to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n )\n // add banner\n count++\n const bannerWidthX =\n this.#range > this.#xLimit ? this.#xLimit + 1 : this.#range\n const bannerWidthY =\n this.#range > this.#yLimit ? this.#yLimit + 1 : this.#range\n elements.banners[0] = (\n <a-box\n key={22500 + count + this.#id}\n width={bannerWidthX + 8}\n material='color: #171717'\n height={0.2}\n depth={bannerWidthY + 8}\n // position={`${this.#xOffset + 2.5} -0.5 ${this.#yOffset + 2.5}`}\n animation={`property: position; from: ${\n this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset\n }\n -0.5\n ${this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset};\n to:\n ${this.#xOffset + bannerWidthX * 0.5 - 1} -0.5 ${\n this.#yOffset + bannerWidthY * 0.5 - 0.5\n }; dur: 1000;`}\n />\n )\n /*\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th2-banner'\n // text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + this.#range / 2 + 2.5} 4.5 ${\n maxYLength + 8\n }`}\n >\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n // add banner with mappings\n count++\n elements.banners[1] = (\n <a-box\n key={24000 + count + this.#id}\n id='th-mapping'\n geometry='width:0.1; height:15; depth:22;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8} 7\n ${this.#yOffset + this.#range / 2 + 2.5}`}\n material='transparent:true'\n />\n )\n count++\n elements.banners[2] = (\n <a-box\n key={25500 + count + this.#id}\n id='th-background'\n geometry='width:0.2; height:16; depth:24;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8.2} 7\n ${this.#yOffset + 1 + this.#range / 2 + 1.5}`}\n material='color: white, transparent:false'\n />\n )\n // information banner\n return elements\n }\n\n // edit bin content to range 0 - 1\n #optimizeBinContent = (binContent, maxContent) => {\n if (binContent <= 0) return 0\n if (maxContent > 1) {\n // round to 2 decimal numbers\n binContent =\n Math.round((binContent / maxContent + Number.EPSILON) * 100) / 100\n }\n\n return binContent\n }\n\n // update section\n updateSection(axisOffset, increment, defaultRange) {\n if (this.#type.includes('TH3'))\n return this.#editTH3OffsetByOffset(axisOffset, increment, defaultRange)\n else if (this.#type.includes('TH2'))\n return this.#editTH2OffsetByOffset(axisOffset, increment, defaultRange)\n }\n\n // edit offsets\n #getValidOffset = (limits, offsets, increment, axisOffset, defaultRange) => {\n this.#shift = {\n xOffset: 0,\n yOffset: 0,\n zOffset: 0\n }\n if (increment) {\n if (defaultRange) {\n offsets[axisOffset] += 1\n this.#shift[axisOffset] = -1\n } else {\n offsets[axisOffset] += offsets.range\n this.#shift[axisOffset] = -offsets.range\n }\n if (limits[axisOffset] <= offsets.range) {\n offsets[axisOffset] = 1\n this.#shift[axisOffset] = 0\n return offsets\n }\n if (offsets[axisOffset] > limits[axisOffset] - offsets.range) {\n offsets[axisOffset] = limits[axisOffset] - offsets.range\n this.#shift[axisOffset] = 0\n return offsets\n }\n } else {\n if (defaultRange) {\n offsets[axisOffset] -= 1\n this.#shift[axisOffset] = 1\n } else {\n offsets[axisOffset] -= offsets.range\n this.#shift[axisOffset] = offsets.range\n }\n if (offsets[axisOffset] < 1) {\n offsets[axisOffset] = 1\n this.#shift[axisOffset] = 0\n return offsets\n }\n }\n return offsets\n }\n\n #editTH3OffsetByOffset = (axisOffset, increment, defaultRange) => {\n // set object with limits\n const limits = {\n xOffset: this.#xLimit,\n yOffset: this.#yLimit,\n zOffset: this.#zLimit\n }\n // set object with current offsets\n const offsets = {\n name: 'TH3',\n xOffset: this.#xOffset,\n yOffset: this.#yOffset,\n zOffset: this.#zOffset,\n range: this.#range\n }\n const result = this.#getValidOffset(\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n this.#xOffset = result.xOffset\n this.#yOffset = result.yOffset\n this.#zOffset = result.zOffset\n // return result as object\n return result\n }\n\n #projectionFunction = (projectionFunction, xMin, yMin) => {\n if (projectionFunction === 'feet' && this.#projections !== null) {\n const xIndex = xMin / this.#xWidth\n const yIndex = yMin / this.#yWidth\n try {\n const projectionHistogram =\n this.#projections.fFolders.arr[xIndex].fFolders.arr[yIndex].fFolders\n .arr[0]\n const LineColor = projectionHistogram.fFunctions.arr[0].fLineColor\n\n if (LineColor === 600) {\n return 'blue'\n } else if (LineColor === 632) {\n return 'red'\n }\n } catch (e) {\n return ''\n }\n }\n return ''\n }\n\n #editTH2OffsetByOffset = (axisOffset, increment, defaultRange) => {\n // set object with limits\n const limits = {\n xOffset: this.#xLimit,\n yOffset: this.#yLimit\n }\n // set object with current offsets\n const offsets = {\n name: 'TH2',\n xOffset: this.#xOffset,\n yOffset: this.#yOffset,\n range: this.#range\n }\n const result = this.#getValidOffset(\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n this.#xOffset = result.xOffset\n this.#yOffset = result.yOffset\n // return result as object\n return result\n }\n\n #getPreviousBinScales = (id) => {\n const previousBin = this.#previousBins.filter(\n (prevBin) => prevBin.key === id\n )\n if (previousBin[0] && previousBin[0].scale) {\n return previousBin[0].scale\n }\n return 0\n }\n\n #getPreviousBinColor = (id) => {\n const previousBin = this.#previousBins.filter(\n (prevBin) => prevBin.key === id\n )\n if (previousBin[0] && previousBin[0].scale) {\n return previousBin[0].color\n }\n return '#ffffff'\n }\n}\n","import React, { useState, useEffect } from 'react'\nimport 'aframe'\nimport '../../aframeComponents/cursorEventAframeComponent'\nimport '../../aframeComponents/th2AframeComponent'\nimport '../../aframeComponents/th3AframeComponent'\nimport '../../aframeComponents/histogramAframeComponent'\nimport '../../aframeComponents/labelHandlerAframeComponent'\nimport HistogramReactFactory from '../../utils/histogramReactFactory'\n// import { CameraService } from '../../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../../observables/histogramSubject'\n\nconst NdmVrHistogram3D = (props) => {\n // const unmounted = useRef(false)\n // pressed keys\n let subscription\n // const cameraService = new CameraService()\n // create factory\n const [factory] = useState(\n new HistogramReactFactory(\n props.name,\n props.histogram,\n props.histoSection ? props.histoSection : null,\n props.range,\n props.projections,\n props.theme ? props.theme : 'def'\n )\n )\n // const keyPressed = {}\n const [histo, setHisto] = useState({\n uniqueName: props.name,\n histogram: props.histogram,\n projections: props.projections ? props.projections : null,\n typeName: props.histogram._typename,\n xOffset: factory.getXOffset(),\n zOffset: factory.getZOffset(),\n yOffset: factory.getYOffset(),\n range: factory.getRange()\n })\n const [mode, setMode] = useState('default')\n // create necessary elements\n const createElements = () => {\n // generate all necessary element\n // if (factory === null) {\n // factory = new HistogramReactFactory()\n // }\n let elements = {}\n if (histo.typeName.includes('TH2')) {\n elements = factory.createTH2Histogram(mode)\n } else if (histo.typeName.includes('TH3')) {\n elements = factory.createTH3Histogram()\n }\n // cameraService.setCameraPosition(histo)\n return elements\n }\n const [elements, setElements] = useState(createElements)\n\n // update histogram section\n const updateHistogramSection = (newSection) => {\n // console.log(newSection)\n const object = histo\n object.xOffset = newSection.xOffset\n object.yOffset = newSection.yOffset\n object.zOffset = newSection.zOffset\n object.range = newSection.range\n\n // cameraService.setCameraPosition(newSection)\n setHisto(object)\n setElements(createElements)\n }\n\n // handle subscription\n const handleSubscription = (data) => {\n if (histo.typeName.includes(data.name)) {\n // save new section to local storage\n if (data.axis) {\n const section = factory.updateSection(\n data.axis,\n data.increment,\n data.defaultRange\n )\n updateHistogramSection(section)\n } else {\n setMode(data.fFunction)\n }\n }\n }\n\n // use effect on change histogram props\n useEffect(() => {\n setHisto({\n uniqueName: props.name,\n histogram: props.histogram,\n typeName: props.histogram._typename,\n projections: props.projections ? props.projections : null,\n xOffset: factory.getXOffset(),\n zOffset: factory.getZOffset(),\n yOffset: factory.getYOffset(),\n // range: props.histoSection.range ? props.histoSection.range : 4\n range: factory.getRange()\n })\n }, [props.histogram, props.histoSection, props.projections, props.name])\n\n // update histogram factory and change elements after change of thi histogram\n useEffect(() => {\n factory.initializeFactory(\n props.name,\n props.histogram,\n props.histoSection,\n props.range,\n props.projections,\n props.theme\n )\n // if (props.histoSection) cameraService.setCameraPosition(props.histoSection)\n setElements(createElements)\n }, [histo, props.theme])\n\n // edit histogram after change mode of view\n useEffect(() => {\n setElements(createElements)\n }, [mode])\n\n // subscription after render histogram\n useEffect(() => {\n if (histo.typeName.includes('TH2')) {\n subscription = histogramTH2Service\n .getChangedSection()\n .subscribe(handleSubscription)\n } else if (histo.typeName.includes('TH3')) {\n subscription = histogramTH3Service\n .getChangedSection()\n .subscribe(handleSubscription)\n }\n return () => subscription.unsubscribe()\n }, [elements])\n\n /*\n useEffect(() => {\n if (histo.typeName.includes('TH2')) {\n subscription = histogramTH2Service\n .getChangedSection()\n .subscribe(handleSubscription)\n } else if (histo.typeName.includes('TH3')) {\n subscription = histogramTH3Service\n .getChangedSection()\n .subscribe(handleSubscription)\n }\n return () => subscription.unsubscribe()\n }, [props.histogram, props.histoSection, props.projections])\n */\n\n /*\n useEffect(() => {\n setElements(createElements)\n }, [props.histogram, props.histoSection, props.projections, mode])\n */\n\n if (elements?.bins) {\n return (\n <a-entity histogram-control>\n {elements.bins.map((bin) => {\n return bin\n })}\n {elements.normalAxis.map((axis) => {\n return axis\n })}\n {elements.reversedAxis.map((axis) => {\n return axis\n })}\n {elements.banners.map((banner) => {\n return banner\n })}\n </a-entity>\n )\n } else {\n return (\n <a-box\n animation__1='property: rotation; to: 0 180 360; dur: 10000; easing: linear; loop: true'\n animation__2='property: scale; from: 1 1 1; to: 10 10 10; dur: 15000; timeout: 15000; loop: true; easing: linear; dir: alternate'\n animation__color='property: material.color; from: #003682; to: #7d0002; dur: 80000: easing: linear: loop: true; dir: alternate'\n position='0 1.5 -2'\n />\n )\n }\n}\n\nexport default NdmVrHistogram3D\n","import React, { useState } from 'react'\nimport NdmVrCamera from '../NdmVrCamera'\nimport NdmVrHistogram3D from '../NdmVrHistogram3D'\n\nconst NdmVrScene = ({ data, info }) => {\n const [background] = useState({\n url: info.background.url\n ? info.background.url\n : './ndmvr/backgrounds/background1.jpg',\n radius: info.background.radius ? info.background.radius : '3000',\n height: info.background.height ? info.background.height : '2048'\n })\n\n return (\n <a-scene\n embedded\n style={{\n zIndex: '1',\n width: '100%',\n minHeight: 'calc(90vh)'\n }}\n >\n <a-assets>\n <img id='skyTexture' src={background.url} alt='background' />\n </a-assets>\n <NdmVrCamera />\n <NdmVrHistogram3D\n name={info.name}\n histogram={data.histogram}\n histoSection={data.section}\n projections={data.projections}\n range={data.range}\n theme={info.theme}\n />\n <a-sky\n height={background.height}\n radius={background.radius}\n width='2048'\n src='#skyTexture'\n position='0 1000 0'\n />\n </a-scene>\n )\n}\n\nexport default NdmVrScene\n","/* object for creating the entity builder from templates */\n\nexport default class EntityBuilder {\n model = null\n constructor(model) {\n this.model = model\n }\n\n updateElement(count, histogramElm, element, entityType) {\n if (this.model[element].elements[count]) {\n if (element === 'titles') {\n this.createTitle(\n this.model[element].elements[count],\n this.model[element].attributes[count]\n )\n } else {\n this.createElement(\n this.model[element].elements[count],\n this.model[element].attributes[count],\n entityType\n )\n }\n } else {\n let newElement\n\n if (element === 'titles') {\n newElement = this.createTitle(\n undefined,\n this.model[element].attributes[count]\n )\n } else {\n newElement = this.createElement(\n undefined,\n this.model[element].attributes[count],\n entityType\n )\n }\n this.model[element].elements[count] = newElement\n histogramElm.appendChild(newElement)\n }\n }\n\n deleteUnnecessaryElements(count, element) {\n const newLength = count\n // overbins\n if (element.length === 1) {\n while (this.model[element[0]].elements[count]) {\n this.model[element[0]].elements[count].remove()\n count++\n }\n this.model[element[0]].elements.length = newLength\n this.model[element[0]].attributes.length = newLength\n } else {\n while (this.model[element[0]].elements[count]) {\n this.model[element[0]].elements[count].remove()\n this.model[element[1]].elements[count].remove()\n count++\n }\n this.model[element[0]].elements.length = newLength\n this.model[element[0]].attributes.length = newLength\n this.model[element[1]].elements.length = newLength\n this.model[element[1]].attributes.length = newLength\n }\n }\n\n createElement(Element, data, type) {\n let element = Element\n if (element === undefined || element === null) {\n const entityType = this.checkEntityType(type)\n element = document.createElement(entityType)\n }\n for (const feature in data) {\n element.setAttribute(feature, data[feature])\n }\n return element\n }\n\n createBannerElement(Element, linesCount, data) {\n let parent = Element\n if (parent === undefined || parent === null) {\n parent = document.createElement('a-entity')\n const array = this.createBannerLines(linesCount, data)\n array.map((element) => parent.append(element))\n }\n parent.setAttribute('position', data.position)\n parent.setAttribute('id', data.id)\n return parent\n }\n\n createBannerLines(linesCount, data) {\n const array = []\n for (let i = linesCount - 1; i > -1; i--) {\n data.line.position.y = 2 * i\n const line = document.createElement('a-entity')\n line.setAttribute('rotation', data.line.rotation)\n line.setAttribute('position', data.line.position)\n line.setAttribute('text', data.line.text)\n array.push(line)\n }\n const background = document.createElement('a-entity')\n background.setAttribute('geometry', data.background.geometry)\n background.setAttribute('position', data.background.position)\n background.setAttribute('material', data.background.material)\n array.push(background)\n return array\n }\n\n createTitle(Element, data) {\n let parent = Element\n if (parent === undefined || parent === null) {\n parent = document.createElement('a-entity')\n const child = this.createElement(undefined, data.background)\n parent.appendChild(child)\n }\n delete data.background\n return this.createElement(parent, data)\n }\n\n checkEntityType(type) {\n if (\n type === 'a-box' ||\n type === 'a-sphere' ||\n type === 'a-text' ||\n type === 'a-circle' ||\n type === 'a-text'\n ) {\n return type\n } else {\n return 'a-entity'\n }\n }\n}\n","/* object for creating the entity templates for entities */\n\nexport default class EntityTemplate {\n bannerTemplate(data, lineData, backgroundData) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const id = data.id\n const background = this.bannerBackgroundTemplate(backgroundData)\n const line = this.lineTemplate(lineData)\n return {\n position: position,\n id: id,\n background: background,\n line: line\n }\n }\n\n binTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const scale = {\n x: data.scaleX,\n y: data.scaleY,\n z: data.scaleZ\n }\n const material = {\n color: data.color,\n opacity: 0.75\n }\n const clas = data.class\n const binTh2 = data.data\n const id = data.id\n return {\n position: position,\n scale: scale,\n material: material,\n id: id,\n class: clas,\n binth2: binTh2,\n mouseevent: ''\n }\n }\n\n labelTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const geometry = {\n primitive: 'plane',\n width: 4,\n height: 1\n }\n const text = {\n value: data.value,\n color: data.color,\n width: 10,\n height: 'auto',\n align: 'center'\n }\n const material = {\n opacity: 0\n }\n const id = data.id\n return {\n position: position,\n rotation: rotation,\n geometry: geometry,\n text: text,\n material: material,\n id: id\n }\n }\n\n axisTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const geometry = {\n primitive: 'plane',\n width: data.width,\n height: data.height\n }\n const text = {\n value: data.value,\n color: 'black',\n width: 4,\n height: 'auto',\n align: 'center'\n }\n const material = {\n color: data.color,\n opacity: 0.8\n }\n return {\n position: position,\n rotation: rotation,\n geometry: geometry,\n text: text,\n material: material\n }\n }\n\n titleTemplate(data, textData) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const material = {\n opacity: 0\n }\n const text = {\n value: data.title,\n color: data.color,\n width: 230,\n height: 'auto',\n align: 'center'\n }\n const back = this.titleTextTemplate(textData)\n return {\n position: position,\n rotation: rotation,\n material: material,\n text: text,\n background: back\n }\n }\n\n titleTextTemplate(data) {\n const geometry = {\n primitive: 'plane',\n width: data.width,\n height: data.height\n }\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const material = {\n color: data.color,\n opacity: 0.6\n }\n return {\n position: position,\n geometry: geometry,\n material: material\n }\n }\n\n lineTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const text = {\n value: '',\n width: 14,\n height: 'auto',\n align: 'center'\n }\n return {\n position: position,\n rotation: rotation,\n text: text\n }\n }\n\n bannerBackgroundTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const geometry = {\n primitive: 'box',\n width: data.width,\n height: data.height,\n depth: data.depth\n }\n const material = {\n color: data.color\n }\n return {\n position: position,\n geometry: geometry,\n material: material\n }\n }\n}\n","// import React from 'react'\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport 'aframe'\nimport EntityBuilder from './EntityBuilder'\nimport EntityTemplate from './EntityTemplate'\nimport ThemeProvider from '../resources/themeProvider'\n\nlet selectedBins = []\n\nfunction checkBinState(binId) {\n const updatedArray = selectedBins.filter((item) => item.id === binId)\n return updatedArray.length !== 0\n}\n// create axis entity\n/*\nfunction createAxisEntity(\n id,\n positionX,\n positionY,\n positionZ,\n rotationX,\n rotationY,\n rotationZ,\n width,\n height,\n value,\n color\n) {\n const element = document.createElement('a-entity')\n element.setAttribute('position', {\n x: positionX,\n y: positionY,\n z: positionZ\n })\n element.setAttribute('rotation', {\n x: rotationX,\n y: rotationY,\n z: rotationZ\n })\n element.setAttribute('geometry', {\n primitive: 'plane',\n width: width,\n height: height\n })\n element.setAttribute('text', {\n value: value,\n color: 'black',\n width: 14,\n height: 'auto',\n align: 'center'\n })\n element.setAttribute('material', {\n color: color,\n opacity: 0.8\n })\n return element\n}\n*/\n// create th3 histogram\n/*\n function createTH3Histogram(histogram, xOffset, yOffset, zOffset, range) {\n // get selected bins from local storage\n selectedBins = localStorageService.getBinsFromLocalStorage()\n // react elements to draw the histograms\n const elements = {\n bins: [],\n normalAxis: [],\n reversedAxis: [],\n banners: []\n }\n // variables for rendering the histogram\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let zcenter, zmin, zmax, zwidth\n const binName = ''\n let absoluteContent\n let c\n let count = 0\n\n const maxXLength =\n xOffset + range > histogram.fXaxis.fXmax\n ? histogram.fXaxis.fXmax\n : xOffset + range\n const maxYLength =\n yOffset + range > histogram.fYaxis.fXmax\n ? histogram.fYaxis.fXmax\n : yOffset + range\n const maxZLength =\n zOffset + range > histogram.fZaxis.fXmax\n ? histogram.fZaxis.fXmax\n : zOffset + range\n\n const xTitle = histogram.fXaxis.fTitle\n const yTitle = histogram.fYaxis.fTitle\n const zTitle = histogram.fZaxis.fTitle\n\n // generate react elements of the bins\n for (let iz = zOffset; iz <= maxZLength; iz++)\n for (let iy = yOffset; iy <= maxYLength; iy++)\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n xcenter = histogram.fXaxis.GetBinCenter(ix)\n xmin = histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = histogram.fYaxis.GetBinCenter(iy)\n ymin = histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n zcenter = histogram.fZaxis.GetBinCenter(iz)\n zmin = histogram.fZaxis.GetBinLowEdge(iz)\n zmax = zcenter + (zcenter - zmin)\n zwidth = zmax - zmin\n absoluteContent = histogram.getBinContent(ix, iy, iz)\n c = optimizeBinContent(absoluteContent, histogram.fMaximum)\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n let size = c\n if (c < 0.15) size = 0.15\n\n const color = setBinColor(c)\n // check bin status\n const id =\n xmin +\n 'th3' +\n xmax +\n 'th3' +\n zmin +\n 'th3' +\n zmax +\n 'th3' +\n ymin +\n 'th3' +\n ymax\n let markedColor\n if (checkBinState(id)) {\n markedColor = '#FF3700'\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: ${zTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${zmin};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${zmax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n zCenter: ${zcenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${zwidth};\n markedColor: ${markedColor}`\n elements.bins[count] = `\n <a-box\n key=${count}\n class='clickable'\n material=color: ${markedColor}; opacity: 0.75;\n bin-th3=${binData}\n position=${xmin} ${zmin + 0.2} ${ymin}\n height=${size * 0.9}\n width=${size * 0.9}\n depth=${size * 0.9}\n mouseEvent\n />\n `\n }\n count++\n }\n\n // set axis\n count = 0\n for (let iz = yOffset; iz <= maxYLength; iz++) {\n const normalAxis = createAxisEntity(\n 1500 + count,\n -2.5 + xOffset,\n zOffset - 1,\n iz - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `__${iz - 1}`,\n 'green'\n )\n const reversedAxis = createAxisEntity(\n 4500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n iz - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `____\\n${iz - 1}`,\n 'green'\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add z label\n elements.normalAxis[count] = (\n <a-entity\n id='leftLabel'\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: green; width: 14; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n position={`${xOffset - 4} ${zOffset - 1} ${yOffset + 0.5}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='rightLabel'\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: green; width: 14; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n position={`${maxXLength + 2} ${zOffset - 1} ${maxYLength - 2.5}`}\n material='opacity: 0;'\n />\n )\n count++\n // generate x and y axis\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n const normalAxis = createAxisEntity(\n 1500 + count,\n ix - 1,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 1,\n 2,\n `''''|\\n${ix - 1}`,\n 'darkred'\n )\n const reversedAxis = createAxisEntity(\n 4500 + count,\n ix - 1,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 1,\n 2,\n `|''''\\n${ix - 1}`,\n 'darkred'\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add x label\n elements.normalAxis[count] = (\n <a-entity\n id='downLabel'\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: red; width: 14; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n position={`${xOffset} ${zOffset - 1} ${yOffset - 4}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='upLabel'\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: red; width: 14; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n position={`${maxXLength - 2.5} ${zOffset - 1} ${maxYLength + 2}`}\n material='opacity: 0;'\n />\n )\n count++\n // y axis\n elements.normalAxis[count] = createAxisEntity(\n 4500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n elements.reversedAxis[count] = createAxisEntity(\n 1500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n count++\n elements.normalAxis[count] = createAxisEntity(\n 1500 + count,\n xOffset - 2.5,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n elements.reversedAxis[count] = createAxisEntity(\n 1500 + count,\n xOffset - 2.5,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n count++\n // add y label\n /*\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${270} ${90}`}\n position={`${xOffset - 1.5} ${maxZLength - 1.5} ${yOffset - 2}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${90} ${90}`}\n position={`${maxXLength - 0.5} ${maxZLength - 1.5} ${maxYLength}`}\n material='opacity: 0;'\n />\n )\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${360} ${90}`}\n position={`${xOffset - 2} ${maxZLength - 1.5} ${maxYLength - 0.5}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${180} ${90}`}\n position={`${maxXLength - 0.5} ${maxZLength - 1.5} ${yOffset - 1.5}`}\n material='opacity: 0;'\n />\n )\n // add histogram title\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${histogram.fTitle}; color: black; width: 230; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${xOffset - 90} ${maxZLength - 6.5} ${yOffset + 90}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.6; color: white;'\n />\n </a-entity>\n )\n // add file title\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${xOffset + 120} ${-6.5} ${yOffset - 70}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.6; color: white;'\n />\n </a-entity>\n )\n // add banner\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th3-banner'\n text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${xOffset + range / 2 + 2.5} ${zOffset + range / 2 + 1.5} ${\n maxYLength + 8\n }`}\n >\n <a-entity rotation='0 180 0' position='0 6 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n// add banner with mappings\n/*\n elements.banners[1] = (\n <a-entity\n key={4500 + count + 3}\n id='th3-mapping'\n geometry='primitive: box; width:1; height:15; depth:15;'\n position={`${maxXLength + 8} ${zOffset + range / 2 + 0.5}\n ${yOffset + range / 2 + 2.5}`}\n material='opacity: 1; color: black;'\n />\n )\n\n return elements\n }\n */\n\n// create th2 histogram\nfunction createTH2Histogram(\n Element,\n model,\n histogram,\n xOffset,\n yOffset,\n range,\n theme\n) {\n // get selected bins from local storage\n selectedBins = localStorageService.getBinsFromLocalStorage()\n // react elements to draw the histogram\n\n const entityTemplate = new EntityTemplate()\n const entityBuilder = new EntityBuilder(model)\n const themeProvider = new ThemeProvider(theme)\n\n const data = {}\n\n const histogramElm = Element\n // variables for rendering the histogram\n let centeredYPosition\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let c\n const binName = ''\n let absoluteContent\n let count = 0\n const maxXLength =\n xOffset + range > histogram.fXaxis.fXmax\n ? histogram.fXaxis.fXmax\n : xOffset + range\n const maxYLength =\n yOffset + range > histogram.fYaxis.fXmax\n ? histogram.fYaxis.fXmax\n : yOffset + range\n const xTitle = histogram.fXaxis.fTitle\n const yTitle = histogram.fYaxis.fTitle\n const xLabels = histogram.fXaxis.fLabels ? histogram.fXaxis.fLabels.arr : []\n const yLabels = histogram.fYaxis.fLabels ? histogram.fYaxis.fLabels.arr : []\n\n // generate react elements of the bins\n for (let iy = yOffset; iy <= maxYLength; iy++) {\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n xcenter = histogram.fXaxis.GetBinCenter(ix)\n xmin = histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = histogram.fYaxis.GetBinCenter(iy)\n ymin = histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n absoluteContent = histogram.getBinContent(ix, iy)\n c = optimizeBinContent(absoluteContent, histogram.fMaximum)\n centeredYPosition = c / 2\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n const color = themeProvider.getBinColor(c)\n // check bin status\n const id = xmin + 'th2' + xmax + 'th2' + ymin + 'th2' + ymax\n let markedColor\n if (checkBinState(id)) {\n markedColor = themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n xMax: ${xmax};\n yMax: ${ymax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n markedColor: ${markedColor};\n selectColor: ${themeProvider.getSecondaryAccentColor()};\n axisX: ${themeProvider.getAxisColor('x')};\n axisY: ${themeProvider.getAxisColor('y')};\n axisZ: ${themeProvider.getAxisColor('z')}`\n\n data.id = id\n data.positionX = xmin\n data.positionY = centeredYPosition\n data.positionZ = ymin\n data.scaleX = xwidth / 2\n data.scaleY = c\n data.scaleZ = ywidth / 2\n data.color = markedColor\n data.class = 'clickable'\n data.data = binData\n\n model.bins.attributes[count] = entityTemplate.binTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'bins', 'a-box')\n count++\n }\n }\n }\n\n entityBuilder.deleteUnnecessaryElements(count, ['bins'])\n\n // generate YYYYYYYYYYYYYYYYYYYYYYYYYYYY axis\n // left up\n data.id = 1500 + count\n data.positionX = maxXLength + 0.5\n data.positionY = 0\n data.positionZ = maxYLength + 0.5\n data.rotationX = 270\n data.rotationY = 360\n data.rotationZ = 0\n data.width = 2\n data.height = 2\n data.value = `0`\n data.color = themeProvider.getAxisColor('y')\n model.normalXAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'normalXAxis', 'a-entity')\n\n // left down\n data.positionZ = yOffset - 2.5\n data.rotationX = 270\n data.rotationY = 180\n model.reversedYAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'reversedYAxis', 'a-entity')\n\n // right up\n data.positionX = xOffset - 2.5\n data.positionZ = maxYLength + 0.5\n\n model.normalYAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'normalYAxis', 'a-entity')\n\n // right down\n data.positionZ = yOffset - 2.5\n data.rotationY = 180\n model.reversedXAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'reversedXAxis', 'a-entity')\n\n // generate ZZZZZZZZZZZZZZZZZZ axis\n count = 1\n for (let iy = yOffset; iy <= maxYLength; iy++) {\n data.id = 1500 + count\n data.positionX = xOffset - 2.5\n data.positionY = 0\n data.positionZ = iy - 1\n data.rotationX = 270\n data.rotationY = 180\n data.rotationZ = 0\n data.width = 2\n data.height = 1\n data.value = `${yLabels[iy - 1] ? yLabels[iy - 1].fString : iy - 1}`\n data.color = themeProvider.getAxisColor('z')\n\n model.normalYAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'normalYAxis', 'a-entity')\n\n data.id = 4500 + count\n data.positionX = maxXLength + 0.5\n data.rotationY = 360\n data.value = `${yLabels[iy - 1] ? yLabels[iy - 1].fString : iy - 1}`\n\n // axis title\n model.reversedYAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(\n count,\n histogramElm,\n 'reversedYAxis',\n 'a-entity'\n )\n count++\n }\n\n entityBuilder.deleteUnnecessaryElements(count, [\n 'normalYAxis',\n 'reversedYAxis'\n ])\n\n count = 1\n // generate XXXXXXXXXXXXXXXX axis\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n data.id = 1500 + count\n data.positionX = ix - 1\n data.positionY = 0\n data.positionZ = yOffset - 2.5\n data.rotationX = 270\n data.rotationY = 270\n data.rotationZ = 0\n data.width = 2\n data.height = 1\n data.value = `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`\n data.color = themeProvider.getAxisColor('x')\n\n model.normalXAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'normalXAxis', 'a-entity')\n\n data.id = 4500 + count\n data.positionZ = maxYLength + 0.5\n data.rotationX = 270\n data.rotationY = 90\n data.value = `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`\n\n model.reversedXAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(\n count,\n histogramElm,\n 'reversedXAxis',\n 'a-entity'\n )\n count++\n }\n\n entityBuilder.deleteUnnecessaryElements(count, [\n 'normalXAxis',\n 'reversedXAxis'\n ])\n // add x label\n data.positionX = xOffset\n data.positionY = 0\n data.positionZ = yOffset - 4\n data.rotationX = 270\n data.rotationY = 180\n data.rotationZ = 0\n data.width = 4\n data.height = 1\n data.value = xTitle\n data.id = 'downLabel'\n\n model.labels.attributes[0] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'labels', 'a-entity')\n\n data.positionX = maxXLength - 2.5\n data.positionZ = maxYLength + 2\n data.rotationY = 0\n data.id = 'upLabel'\n\n model.labels.attributes[1] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(1, histogramElm, 'labels', 'a-entity')\n\n // add y label\n data.positionX = xOffset - 4\n data.positionY = 0\n data.positionZ = yOffset + 0.5\n data.rotationX = 270\n data.rotationY = 270\n data.rotationZ = 0\n data.width = 4\n data.height = 1\n data.value = yTitle\n data.color = themeProvider.getAxisColor('z')\n data.id = 'leftLabel'\n\n model.labels.attributes[2] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(2, histogramElm, 'labels', 'a-entity')\n\n data.positionX = maxXLength + 2\n data.positionZ = maxYLength - 2.5\n data.rotationX = 270\n data.rotationY = 90\n data.id = 'rightLabel'\n\n model.labels.attributes[3] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(3, histogramElm, 'labels', 'a-entity')\n\n data.positionX = xOffset - 90\n data.positionY = -6.5\n data.positionZ = yOffset + 90\n data.rotationX = 0\n data.rotationY = 123\n data.rotationZ = 0\n data.title = histogram.fTitle\n data.color = themeProvider.getPrimaryFontColor()\n\n const back = {}\n back.positionX = 0\n back.positionY = 0\n back.positionZ = -1\n back.width = 170\n back.height = 30\n back.color = 'white'\n\n model.titles.attributes[0] = entityTemplate.titleTemplate(data, back)\n entityBuilder.updateElement(0, histogramElm, 'titles', 'a-entity')\n\n // add file title\n data.positionX = xOffset + 120\n data.positionZ = yOffset - 70\n data.rotationY = 330\n data.title = histogram.fName\n\n model.titles.attributes[1] = entityTemplate.titleTemplate(data, back)\n entityBuilder.updateElement(1, histogramElm, 'titles', 'a-entity')\n}\n\n// edit bin content to range 0 - 1\nconst optimizeBinContent = (binContent, maxContent) => {\n if (binContent <= 0) return 0\n if (maxContent > 1) {\n // round to 2 decimal numbers\n binContent =\n Math.round((binContent / maxContent + Number.EPSILON) * 100) / 100\n }\n\n return binContent\n}\n\nexport { createTH2Histogram }\n// export { createTH3Histogram }\n","/* object for creating the histogram demos */\n\nexport default class HistogramDemoFactory {\n #jsroot\n\n constructor(jsroot) {\n this.#jsroot = jsroot\n }\n\n createTH2DemoHistogram(xLength, yLength, initialContent, contentIncrement) {\n const histo = this.#jsroot.createHistogram('TH2I', xLength, yLength)\n let cnt = initialContent\n for (let iy = 1; iy <= 20; iy++)\n for (let ix = 1; ix <= 20; ix++) {\n const bin = histo.getBin(ix, iy)\n let val = 0\n val = cnt\n histo.setBinContent(bin, val)\n // cnt += 0.1\n cnt += contentIncrement\n }\n\n histo.fXaxis.fTitle = 'x Axis'\n histo.fYaxis.fTitle = 'y Axis'\n histo.fName = \"You don't have a valid file path\"\n histo.fTitle = 'This is a TH2 histogram demo'\n histo.fMaximum = cnt\n\n return histo\n }\n\n createTH3DemoHistogram(\n xLength,\n yLength,\n zLength,\n initialContent,\n contentIncrement\n ) {\n const histo = this.#jsroot.createHistogram(\n 'TH3I',\n xLength,\n yLength,\n zLength\n )\n let cnt = initialContent\n\n for (let iz = 1; iz <= 20; iz++)\n for (let iy = 1; iy <= 20; iy++)\n for (let ix = 1; ix <= 20; ix++) {\n const bin = histo.getBin(ix, iy, iz)\n let val = 0\n val = cnt\n histo.setBinContent(bin, val)\n // cnt += 0.0005\n cnt += contentIncrement\n }\n\n histo.fXaxis.fTitle = 'x Axis'\n histo.fYaxis.fTitle = 'y Axis'\n histo.fZaxis.fTitle = 'z Axis'\n histo.fName = \"You don't have a valid file path\"\n histo.fTitle = 'This is a TH3 histogram demo'\n histo.fMaximum = cnt\n\n return histo\n }\n}\n","import AFRAME from 'aframe'\nimport { NdmVrStorageService } from '../../services/ndmVrStorageService'\nimport { createTH2Histogram } from '../../utils/histogramAframeFactory'\nimport '../../aframeComponents/cursorEventAframeComponent'\nimport '../../aframeComponents/th2AframeComponent'\nimport '../../aframeComponents/th3AframeComponent'\nimport '../../aframeComponents/histogramAframeComponent'\nimport { histogramTH2Service } from '../../observables/histogramSubject'\nimport {\n initialKeyboardController,\n keyReleaseHandlerFunction,\n keyPressHandlerFunction,\n keyboardUpdateCameraReference\n} from '../../controllers/keyboardController'\nimport { CameraService } from '../../services/cameraService'\nimport HistogramDemoFactory from '../../utils/DefaultHistogram'\n\nexport default AFRAME.registerComponent('th2-histogram', {\n schema: {\n section: { type: 'string' },\n filename: { type: 'string' },\n theme: { type: 'string', default: 'def' },\n position: {\n name: 'position',\n xValue: 0,\n yValue: 0,\n zValue: 0\n },\n scale: {\n name: 'scale',\n xValue: 2,\n yValue: 2,\n zValue: 2\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 0,\n zValue: 0\n }\n },\n init: function () {\n const el = this.el\n initialKeyboardController(this.schema, el)\n // keyboard listeners\n document.addEventListener('keydown', keyPressHandlerFunction)\n document.addEventListener('keyup', keyReleaseHandlerFunction)\n this.JSROOT = window.JSROOT\n this.demoHistogramService = new HistogramDemoFactory(this.JSROOT)\n this.localStorageService = new NdmVrStorageService()\n this.cameraService = new CameraService()\n this.render = false\n this.histogram = null\n this.model = {\n bins: {\n elements: [],\n attributes: []\n },\n labels: {\n elements: [],\n attributes: []\n },\n titles: {\n elements: [],\n attributes: []\n },\n banners: {\n elements: [],\n attributes: []\n },\n normalXAxis: {\n elements: [],\n attributes: []\n },\n reversedXAxis: {\n elements: [],\n attributes: []\n },\n normalYAxis: {\n elements: [],\n attributes: []\n },\n reversedYAxis: {\n elements: [],\n attributes: []\n }\n }\n this.section = null\n // functions\n\n const updateHistogramSection = (newSection) => {\n console.log(newSection)\n this.section.xOffset = newSection.xOffset\n this.section.yOffset = newSection.yOffset\n this.range = newSection.range\n\n this.cameraService.setCameraPosition(newSection)\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n }\n const handleSubscription = (section) => {\n this.localStorageService.storeTH2Offsets(\n section.xOffset,\n section.yOffset,\n section.range\n )\n updateHistogramSection(section)\n }\n\n this.subscription = histogramTH2Service\n .getChangedSection()\n .subscribe(handleSubscription)\n },\n update: function () {\n keyboardUpdateCameraReference()\n this.section = JSON.parse(this.data.section)\n this.JSROOT.openFile(this.data.filename)\n .then((file) => file.readObject('hUsersVsProjects'))\n .then((obj) => {\n this.localStorageService.initHistogramData(obj)\n this.histogram = obj\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n })\n .then(() => console.log('drawing completed'))\n .catch((error) => {\n this.histogram = this.demoHistogramService.createTH2DemoHistogram(\n 20,\n 20,\n 0,\n 0.1\n )\n this.localStorageService.initHistogramData(this.histogram)\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n console.log(error)\n })\n },\n tick: function () {\n if (this.render) {\n this.render = false\n console.log(this.section)\n console.log(this.elements)\n }\n },\n remove: function () {\n this.subscription.unsubscribe()\n document.removeEventListener('keydown', keyPressHandlerFunction)\n document.removeEventListener('keyup', keyReleaseHandlerFunction)\n }\n})\n","import AFRAME from 'aframe'\n// import { setBannerPositioning } from '../utils/histogramFactory'\n\n// aframe component for positioning info banner in scene\nexport default AFRAME.registerComponent('banner-control', {\n schema: {\n position: {\n name: 'position',\n xValue: -1.28,\n yValue: 0.3,\n zValue: -1\n },\n scale: {\n name: 'scale',\n xValue: 0.5,\n yValue: 0.7,\n zValue: 0.1\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 20,\n zValue: 0\n }\n },\n init: function () {\n // const el = this.el\n // setBannerPositioning(el, this.schema)\n }\n})\n","/* add listeners for oculus controller */\nimport { CameraService } from '../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../observables/histogramSubject'\nimport binSubject from '../observables/binSubject'\nimport cameraSubject from '../observables/cameraSubject'\nimport jsrootService from '../services/jsrootService'\n\n/*\nexport class OculusController {\n #aframeObj\n #cameraService\n constructor(aframeObj) {\n this.#aframeObj = aframeObj\n this.#cameraService = new CameraService()\n }\n\n #thumbStick = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSection('yOffset', 'TH2', false)\n histogramTH3Service.changeHistogramSection('yOffset', 'TH3', false)\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSection('yOffset', 'TH2', true)\n histogramTH3Service.changeHistogramSection('yOffset', 'TH3', true)\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSection('xOffset', 'TH2', false)\n histogramTH3Service.changeHistogramSection('xOffset', 'TH3', false)\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSection('xOffset', 'TH2', true)\n histogramTH3Service.changeHistogramSection('xOffset', 'TH3', true)\n }\n }\n\n // set listeners for positioning\n setControllerOnEntity(data) {\n const aframeObj = this.#aframeObj\n const geoAttributes = [data.position, data.scale, data.rotation]\n // if (this.#cameraService === null) this.#cameraService = new CameraService()\n // set initial position, scale, rotation of the histogram\n for (let i = 0; i < 3; i++) {\n this.#aframeObj.setAttribute(\n geoAttributes[i].name,\n `${geoAttributes[i].xValue} ${geoAttributes[i].yValue} ${geoAttributes[i].zValue}`\n )\n }\n\n // add positioning listeners\n aframeObj.addEventListener('thumbstickmoved', this.#thumbStick)\n aframeObj.addEventListener('xbuttondown', () => {\n this.#cameraService.verticalMoveCamera(false)\n })\n aframeObj.addEventListener('ybuttondown', () => {\n this.#cameraService.verticalMoveCamera(true)\n })\n }\n}\n*/\n\n// let aframeObj\nlet cameraService = new CameraService()\n\nconst thumbStickByOwnOffset = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n false\n )\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n false\n )\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n false\n )\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n false\n )\n }\n}\n\nconst thumbStickByDefaultOffset = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n true\n )\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n true\n )\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n true\n )\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n true\n )\n }\n}\n\nconst thumbStickForMoving = (event, speed) => {\n if (event.detail.y > 0.95) {\n cameraService.horizontalMoveCamera('z', false, speed)\n }\n if (event.detail.y < -0.95) {\n cameraService.horizontalMoveCamera('z', true, speed)\n }\n if (event.detail.x < -0.95) {\n cameraService.horizontalMoveCamera('x', true, speed)\n }\n if (event.detail.x > 0.95) {\n cameraService.horizontalMoveCamera('x', false, speed)\n }\n}\n\nconst thumbStickPredefinedPosition = (event) => {\n if (event.detail.y > 0.95) {\n cameraService.setPredefinedUpPosition()\n }\n if (event.detail.y < -0.95) {\n cameraService.setPredefinedDownPosition()\n }\n if (event.detail.x < -0.95) {\n cameraService.setPredefinedLeftPosition()\n }\n if (event.detail.x > 0.95) {\n cameraService.setPredefinedRightPosition()\n }\n}\n\nconst thumbStickPredefinedPositionWithOffset = (event) => {\n if (event.detail.y > 0.95) {\n cameraService.setPredefinedUpPositionWithOffset()\n }\n if (event.detail.y < -0.95) {\n cameraService.setPredefinedDownPositionWithOffset()\n }\n if (event.detail.x < -0.95) {\n cameraService.setPredefinedLeftPositionWithOffset()\n }\n if (event.detail.x > 0.95) {\n cameraService.setPredefinedRightPositionWithOffset()\n }\n}\n\nconst oculusUpSection = (typeOfRange) => {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n typeOfRange\n )\n}\n\nconst oculusDownSection = (typeOfRange) => {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n typeOfRange\n )\n}\n\n// const initialOculusController = (el) => {\n// aframeObj = el\n// }\n\nconst oculusUpdateCameraReference = () => {\n cameraService = new CameraService()\n}\n\nconst oculusThumbStickFunction = (event) => {\n thumbStickByOwnOffset(event)\n}\n\nconst oculusThumbStickWithGripFunction = (event) => {\n thumbStickByDefaultOffset(event)\n}\n\nconst oculusThumbStickPredefinedCameraPosition = (event) => {\n thumbStickPredefinedPosition(event)\n}\n\nconst oculusThumbStickPredefinedCameraPositionWithOffset = (event) => {\n thumbStickPredefinedPositionWithOffset(event)\n}\n\nconst oculusThumbStickForMoving = (event, speed) => {\n thumbStickForMoving(event, speed)\n}\n\nconst oculusXButtonDownFunction = (speed) => {\n cameraService.verticalMoveCamera(true, speed / 2)\n}\n\nconst oculusYButtonDownFunction = (speed) => {\n cameraService.verticalMoveCamera(false, speed / 2)\n}\n\nconst oculusThumbStickMarkBin = () => {\n binSubject.saveSelectedBinToLocalStorage()\n}\n\nconst oculusThumbStickUnmarkBin = () => {\n binSubject.deleteBinFromLocalStorage()\n}\n\nconst oculusShowFunctionView = () => {\n histogramTH2Service.changeHistogramFunction('feet', 'TH2')\n}\n\nconst oculusShowDefaultView = () => {\n histogramTH2Service.changeHistogramFunction('default', 'TH2')\n}\n\nconst oculusSwitchViewWithBanners = () => {\n cameraSubject.setVisibilityOfBanners('oculus')\n}\n\nconst oculusChangeBannerContent = () => {\n cameraSubject.setUserState()\n}\n\nconst oculusShiftBanners = () => {\n cameraSubject.shiftBanners()\n}\n\nconst oculusRedrawHistogramBanners = () => {\n ;[\n 'th-mapping',\n 'bannerId_1',\n 'bannerId_2',\n 'bannerId_3',\n 'bannerId_4'\n ].forEach((targetId) => {\n if (document.getElementById(targetId) !== null) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n targetId,\n '500px',\n '400px'\n )\n }\n })\n}\n\n// export { initialOculusController }\nexport { oculusRedrawHistogramBanners }\nexport { oculusShiftBanners }\nexport { oculusChangeBannerContent }\nexport { oculusSwitchViewWithBanners }\nexport { oculusShowDefaultView }\nexport { oculusShowFunctionView }\nexport { oculusThumbStickUnmarkBin }\nexport { oculusThumbStickMarkBin }\nexport { oculusThumbStickFunction }\nexport { oculusThumbStickWithGripFunction }\nexport { oculusXButtonDownFunction }\nexport { oculusYButtonDownFunction }\nexport { oculusUpdateCameraReference }\nexport { oculusThumbStickPredefinedCameraPosition }\nexport { oculusThumbStickPredefinedCameraPositionWithOffset }\nexport { oculusUpSection }\nexport { oculusDownSection }\nexport { oculusThumbStickForMoving }\n","// component for modification aframe entity of histogram\n// manage functionality of camera\nimport AFRAME from 'aframe'\nimport {\n oculusXButtonDownFunction,\n oculusYButtonDownFunction,\n oculusUpdateCameraReference,\n oculusThumbStickPredefinedCameraPositionWithOffset,\n oculusThumbStickForMoving,\n oculusSwitchViewWithBanners,\n oculusChangeBannerContent\n} from '../controllers/oculusController'\n\n// aframe component for positioning histogram in scene\nexport default AFRAME.registerComponent('left-controller-logging', {\n init: function () {\n let gripActive = false\n let speed = 1\n const el = this.el\n // oculus listeners\n el.addEventListener('gripdown', () => {\n gripActive = true\n })\n el.addEventListener('gripup', () => {\n gripActive = false\n })\n el.addEventListener('thumbstickdown', () => {\n if (gripActive) {\n speed++\n if (speed > 20) speed = 20\n } else {\n speed--\n if (speed < 1) speed = 1\n }\n })\n el.addEventListener('thumbstickmoved', (event) => {\n if (gripActive) {\n oculusThumbStickPredefinedCameraPositionWithOffset(event)\n } else {\n oculusThumbStickForMoving(event, speed)\n }\n })\n el.addEventListener('ybuttondown', () => {\n if (gripActive) {\n oculusXButtonDownFunction(speed)\n } else {\n oculusSwitchViewWithBanners()\n }\n })\n el.addEventListener('xbuttondown', () => {\n if (gripActive) {\n oculusYButtonDownFunction(speed)\n } else {\n oculusChangeBannerContent()\n }\n })\n },\n\n update: function () {\n oculusUpdateCameraReference()\n }\n})\n","// component for modification aframe entity of histogram\n// manage functionality of histogram\nimport AFRAME from 'aframe'\nimport {\n oculusThumbStickFunction,\n oculusUpdateCameraReference,\n oculusUpSection,\n oculusDownSection,\n oculusThumbStickMarkBin,\n oculusThumbStickWithGripFunction,\n oculusThumbStickUnmarkBin,\n oculusShowFunctionView,\n oculusShowDefaultView,\n oculusRedrawHistogramBanners,\n oculusShiftBanners\n} from '../controllers/oculusController'\n\n// aframe component for positioning histogram in scene\nexport default AFRAME.registerComponent('right-controller-logging', {\n init: function () {\n let gripActive = false\n const el = this.el\n // oculus listeners\n el.addEventListener('gripdown', () => {\n gripActive = true\n })\n el.addEventListener('gripup', () => {\n gripActive = false\n })\n el.addEventListener('thumbstickmoved', (event) => {\n if (gripActive) {\n oculusThumbStickFunction(event)\n } else {\n oculusThumbStickWithGripFunction(event)\n }\n })\n el.addEventListener('bbuttondown', () => {\n if (gripActive) {\n oculusUpSection(false)\n } else {\n oculusUpSection(true)\n }\n })\n el.addEventListener('abuttondown', () => {\n if (gripActive) {\n oculusDownSection(false)\n } else {\n oculusDownSection(true)\n }\n })\n el.addEventListener('thumbstickdown', () => {\n if (gripActive) {\n oculusShowFunctionView()\n } else {\n oculusShowDefaultView()\n }\n })\n el.addEventListener('triggerdown', () => {\n if (gripActive) {\n oculusThumbStickMarkBin()\n oculusRedrawHistogramBanners()\n } else {\n oculusThumbStickUnmarkBin()\n oculusShiftBanners()\n }\n })\n },\n\n update: function () {\n oculusUpdateCameraReference()\n }\n})\n","// imports\nimport JSrootHistogram from './components/JsrootHistogram'\nimport NdmVrScene from './components/NdmVrHistogramScene'\nimport HistogramTH2 from './components/AframeComponent'\nimport { NdmVrStorageService } from './services/ndmVrStorageService'\nimport Banner from './aframeComponents/infoBannerAframeComponent'\nimport LeftController from './aframeComponents/leftOculusController'\nimport RightController from './aframeComponents/rightOculusController'\n\n// create services\nconst ndmVrStorage = new NdmVrStorageService()\n\n// export\nexport {\n // react components\n JSrootHistogram,\n NdmVrScene,\n // export aframe components\n Banner,\n LeftController,\n RightController,\n HistogramTH2,\n // export necessary services\n ndmVrStorage\n}\n"],"names":["JsrootSubject","Subject","showBinProjection","binData","next","getServiceEvent","asObservable","jsrootSubject","JsrootService","createTH1Projection","projectionAxis","info","idTargetElm","axisArray","projectionTargetAxis","primary","secondary","primaryAxis","secondaryAxis","binAxis","toLowerCase","h1","createHistogram","obj","fNbins","fXaxis","fXmin","fXmax","fTitle","fLabels","currLabel","arr","length","bin","fString","n","setBinContent","getBinContent","fName","binName","name","redraw","openTH1Projection","projections","xLength","yLength","fYaxis","xBin","xMin","yBin","yMin","projection","fFolders","setTimeout","displayImageOfProjection","e","console","log","idSourceElement","idTargetElement","width","height","sourceSvgElement","document","getElementById","firstElementChild","targetElement","canvas","createElement","setAttribute","svgString","XMLSerializer","serializeToString","ctx","getContext","DOMURL","self","URL","webkitURL","img","Image","svg","Blob","type","url","createObjectURL","onload","drawImage","png","toDataURL","revokeObjectURL","src","JSROOT","jsrootService","styles","box","display","margin","textAlign","align","paddingTop","form","paddingBottom","label","input","border","borderRadius","fontSize","color","opacity","JsrootHistogram","histogram","projectionAxes","subscription","useState","axis","setAxis","data","setData","handleInputChange","event","target","value","renderForm","handleSubscription","useEffect","jsrootLibrary","window","subscribe","unsubscribe","CameraSubject","setVisibilityOfBanners","inputDevice","device","shiftBanners","setUserState","getCameraSubject","cameraSubject","NdmVrCamera","offset","rotation","setRotation","prevPosition","setPrevPosition","setInputDevice","show","setShow","showProjection","setShowProjection","compileRotation","currentRotation","renderProjectionsBanners","x","z","renderBannersWithControls","hideMappingBanner","banner","background","undefined","showMappingBanner","camera","object3D","position","y","NdmVrStorageService","filter","item","id","containThisBin","updatedArray","storeBinToLocalStorage","push","setItem","JSON","stringify","deleteBinFromLocalStorage","getBinsFromLocalStorage","selectedBins","parse","getItem","localStorage","storeCurrentBinToLocalStorage","getCurrentBinFromLocalStorage","currentBin","loadProperty","property","storeProperty","object","initHistogramData","_typename","includes","storeTH3HistogramLimits","storeTH2HistogramLimits","storeTH2Offsets","xOffset","yOffset","range","section","storeTH3Offsets","zOffset","storeOffsets","storeFilePath","filePath","loadFilePath","filename","loadTH2Offsets","loadTH3Offsets","loadOffsets","localStorageService","BinSubject","saveSelectedBinToLocalStorage","getKeyboardEvent","binSubject","AFRAME","registerComponent","init","el","clickCount","checked","addEventListener","setHover","evt","intersection","detail","save","userData","markedColor","selectColor","face","normal","axisZ","axisY","axisX","setPassive","setActive","content","infoBanner","planes","childNodes","typeName","zCor","zTitle","zMin","zMax","xCor","xTitle","xMax","yCor","yTitle","yMax","absoluteContent","update","schema","xCenter","yCenter","xWidth","yWidth","zCenter","zWidth","CameraService","verticalMoveCamera","moveUp","speed","horizontalMoveCamera","increment","elm","newXPos","newZPos","newYPos","setCameraPosition","offsets","setPredefinedDownPosition","labelElement","setPredefinedUpPosition","setPredefinedRightPosition","setPredefinedLeftPosition","setPredefinedDownPositionWithOffset","setPredefinedUpPositionWithOffset","setPredefinedRightPositionWithOffset","setPredefinedLeftPositionWithOffset","HistogramSubject","changeHistogramSectionByOffset","histogramType","defaultRange","changeHistogramFunction","typeFunction","fFunction","getChangedSection","histogramTH2Service","histogramTH3Service","keyPressed","cameraService","aframeObj","geoAttributes","handlePositioning","difference","key","xValue","yValue","zValue","handleChangeHistogramSectionByDefaultRange","handleChangeHistogramSectionByOwnRange","keyPressHandlerFunction","Z","X","C","c","Shift","forEach","targetId","keyReleaseHandlerFunction","initialKeyboardController","scale","i","keyboardUpdateCameraReference","delay","def","colorPalette","accent","font","fire","nebula","rainforest","nature","water","sunflower","blood","magma","jupiter","magic","ThemeProvider","theme","palette","xAxis","yAxis","zAxis","primaryAccent","secondaryAccent","primaryFont","secondaryFont","getAxisColor","getPrimaryAccentColor","getSecondaryAccentColor","getPrimaryFontColor","getSecondaryFontColor","getBinColor","fullContent","sum","HistogramReactFactory","uniqueName","getXOffset","getYOffset","getZOffset","getRange","offsetValue","limit","currOffset","binId","positionX","positionY","positionZ","rotationX","rotationY","rotationZ","fontColor","binContent","maxContent","Math","round","Number","EPSILON","limits","axisOffset","result","projectionFunction","xIndex","yIndex","projectionHistogram","LineColor","fFunctions","fLineColor","previousBin","prevBin","initializeFactory","fZaxis","createTH3Histogram","elements","bins","normalAxis","reversedAxis","banners","xcenter","xmin","xmax","xwidth","ycenter","ymin","ymax","ywidth","zcenter","zmin","zmax","zwidth","count","maxXLength","maxYLength","maxZLength","xLabels","yLabels","zLabels","currentBinScales","iz","iy","ix","GetBinCenter","GetBinLowEdge","fMaximum","size","posX","posY","posZ","bannerWidthX","bannerWidthY","createTH2Histogram","centeredYPosition","projectionColor","depth","updateSection","NdmVrHistogram3D","props","histoSection","factory","histo","setHisto","mode","setMode","createElements","setElements","updateHistogramSection","newSection","map","NdmVrScene","radius","zIndex","minHeight","EntityBuilder","model","updateElement","histogramElm","element","entityType","createTitle","attributes","newElement","appendChild","deleteUnnecessaryElements","newLength","remove","Element","checkEntityType","feature","createBannerElement","linesCount","parent","array","createBannerLines","append","line","text","geometry","material","child","EntityTemplate","bannerTemplate","lineData","backgroundData","bannerBackgroundTemplate","lineTemplate","binTemplate","scaleX","scaleY","scaleZ","clas","binTh2","binth2","mouseevent","labelTemplate","primitive","axisTemplate","titleTemplate","textData","title","back","titleTextTemplate","checkBinState","entityTemplate","entityBuilder","themeProvider","optimizeBinContent","normalXAxis","reversedYAxis","normalYAxis","reversedXAxis","labels","titles","HistogramDemoFactory","jsroot","createTH2DemoHistogram","initialContent","contentIncrement","cnt","getBin","val","createTH3DemoHistogram","zLength","demoHistogramService","render","openFile","then","file","readObject","error","tick","removeEventListener","thumbStickByOwnOffset","thumbStickByDefaultOffset","thumbStickForMoving","thumbStickPredefinedPositionWithOffset","oculusUpSection","typeOfRange","oculusDownSection","oculusUpdateCameraReference","oculusThumbStickFunction","oculusThumbStickWithGripFunction","oculusThumbStickPredefinedCameraPositionWithOffset","oculusThumbStickForMoving","oculusXButtonDownFunction","oculusYButtonDownFunction","oculusThumbStickMarkBin","oculusThumbStickUnmarkBin","oculusShowFunctionView","oculusShowDefaultView","oculusSwitchViewWithBanners","oculusChangeBannerContent","oculusShiftBanners","oculusRedrawHistogramBanners","gripActive","ndmVrStorage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/observables/jsrootSubject.js","../src/services/jsrootService.js","../src/components/JsrootHistogram/index.js","../src/observables/cameraSubject.js","../src/services/cameraService.js","../src/observables/histogramSubject.js","../src/observables/binSubject.js","../src/controllers/keyboardController.js","../src/services/ndmVrStorageService.js","../src/observables/binDataDistributor.js","../src/aframeComponents/cursorEventAframeComponent.js","../src/components/NdmVrCamera/index.js","../src/aframeComponents/thAframeComponent.js","../src/aframeComponents/histogramAframeComponent.js","../src/aframeComponents/labelHandlerAframeComponent.js","../src/resources/theme.js","../src/resources/themeProvider.js","../src/utils/histogramGenerator.js","../src/components/NdmVrHistogram3D/index.js","../src/components/NdmVrLaboratory/index.js","../src/components/NdmVrHistogramScene/index.js","../src/utils/EntityBuilder.js","../src/utils/EntityTemplate.js","../src/utils/histogramAframeFactory.js","../src/aframeComponents/th2AframeComponent.js","../src/utils/DefaultHistogram.js","../src/components/AframeComponent/index.js","../src/aframeComponents/infoBannerAframeComponent.js","../src/controllers/oculusController.js","../src/aframeComponents/leftOculusController.js","../src/aframeComponents/rightOculusController.js","../src/index.js"],"sourcesContent":["// service to manage histogram views\n/** @module JsrootSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre JSROOT.\n * @class\n */\nclass JsrootSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Zobrazenie projekcie pre zvolený bin histogramu.\n * @param {Object} binData - Objekt obsahuje dáta o zvolenom bine\n */\n showBinProjection(binData) {\n this.#subject.next(binData)\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getServiceEvent() {\n return this.#subject.asObservable()\n }\n}\n\nconst jsrootSubject = new JsrootSubject()\nexport default jsrootSubject\n","// service for creating histogram projections\n/** @module JsrootService */\n\n// eslint-disable-next-line no-unused-vars\nimport { createDemoTH2Histogram } from '../../example/src/utilsScripts/utilsPageScript'\n\n/**\n * Servis pre vytváranie JSROOT projekcií.\n * @class\n */\nclass JsrootService {\n #jsroot = null\n\n /**\n * Funkcia zabezpečí nastavenie objektu JSROOT servisu.\n * @param {Object} JSROOT - Object JSROOT\n * @return {void}\n */\n set jsrootLibrary(JSROOT) {\n this.#jsroot = JSROOT\n }\n\n get jsrootLibrary() {\n return this.#jsroot\n }\n\n // create projection depends on selected axis\n /**\n * Funkcia pre vytvorenie TH1 projekcie.\n * @param {string} projectionAxis - Hlaná os podľa, ktorej sa vytvorí projekcia\n * @param {Object} info - Objekt obsahujúci potrebné objekt histogramu a objekt obsahujúci informácie o zvolenom bine\n * @param {string} idTargetElm - Identifikátor cieľovej entity, do ktorej sa vykreslí výsledná projekcia\n * @param {Array} axisArray - Pole osí, obsahuje 2 osi na základe ktorých sa projekcia vytvorí\n * @return {void}\n */\n createTH1Projection(projectionAxis, info, idTargetElm, axisArray) {\n if (!info || !projectionAxis || this.#jsroot === null) {\n return\n }\n\n const projectionTargetAxis = projectionAxis === axisArray[0]\n const primary = projectionTargetAxis ? axisArray[0] : axisArray[1]\n const secondary = projectionTargetAxis ? axisArray[1] : axisArray[0]\n\n const primaryAxis = `f${secondary}axis`\n const secondaryAxis = `f${primary}axis`\n const binAxis = `${primary.toLowerCase()}Pos`\n\n // console.log(secondaryAxis)\n // console.log(binAxis)\n // projection X\n\n const h1 = this.#jsroot.createHistogram(\n 'TH1I',\n info.obj[primaryAxis].fNbins\n )\n\n // fill important histogram info\n h1.fXaxis.fXmin = info.obj[primaryAxis].fXmin\n h1.fXaxis.fXmax = info.obj[primaryAxis].fXmax\n h1.fXaxis.fTitle = info.obj[primaryAxis].fTitle\n h1.fXaxis.fLabels = info.obj[primaryAxis].fLabels\n\n const currLabel =\n info.obj[secondaryAxis].fLabels?.arr.length > 0\n ? info.obj[secondaryAxis].fLabels.arr[info.bin[binAxis] - 1].fString\n : ''\n\n for (let n = 0; n < info.obj[primaryAxis].fNbins; n++) {\n console.log(info.obj)\n h1.setBinContent(\n n + 1,\n projectionAxis === axisArray[0]\n ? info.obj.getBinContent(info.bin[binAxis], n + 1)\n : info.obj.getBinContent(n + 1, info.bin[binAxis])\n )\n }\n h1.fName = 'px'\n h1.fTitle =\n `Projection of bin=${projectionAxis}` +\n (info.bin.binName !== '' ? info.bin.name : info.bin[binAxis] - 1) +\n `[` +\n currLabel +\n `]`\n this.#jsroot.redraw(idTargetElm, h1)\n }\n\n /**\n * Funkcia pre prečítanie objektu projekcie z adresárovej štruktúry získanej z root súboru.\n * @param {string} projectionAxis - Hlaná os podľa, ktorej sa vytvorí projekcia\n * @param {Object} info - Objekt obsahujúci potrebné objekt histogramu a objekt obsahujúci informácie o zvolenom bine\n * @param {string} idTargetElm - Identifikátor cieľovej entity, do ktorej sa vykreslí výsledná projekcia\n * @param {Array} axisArray - Pole osí, obsahuje 2 osi na základe ktorých sa projekcia vytvorí\n * @param {Object} projections - Adresárová štruktúra obsahujúca projekcie\n * @param {number} projIndex - Index projekcie, ktorá sa má vykresliť\n * @return {void}\n */\n openTH1Projection(\n projectionAxis,\n info,\n idTargetElm,\n axisArray,\n projections,\n projIndex\n ) {\n // const xLength = info.obj.fXaxis.fXmax / info.obj.fXaxis.fNbins\n // const yLength = info.obj.fYaxis.fXmax / info.obj.fYaxis.fNbins\n // const xBin = info.bin.xMin / xLength\n // const yBin = info.bin.yMin / yLength\n const xBin = info.bin.xPos - 1\n const yBin = info.bin.yPos - 1\n try {\n const projection =\n projections.fFolders.arr[xBin].fFolders.arr[yBin].fFolders.arr[\n projIndex || 0\n ]\n this.#jsroot.redraw(idTargetElm, projection)\n setTimeout(() => {\n this.displayImageOfProjection(\n 'projectionContainer',\n 'th-mapping',\n '500px',\n '400px'\n )\n }, 200)\n } catch (e) {\n console.log(\"you don't have this projection\")\n }\n }\n\n /**\n * Funkcia získa aktuálny náhľad projekcie SVG elementu a zobrazí ju na panely vo VR\n * @param {string} idSourceElement - Identifikátor zdrojového elementu obsahujúceho SVG projekciu\n * @param {string} idTargetElement - Identifikátor cieľového elementu vo VR, kde bude vložený náhľad projekcie\n * @param {number} width - Šírka pre získanie náhľadu projekcie\n * @param {number} height - Výška pre získanie náhľadu projekcie\n * @return {void}\n */\n displayImageOfProjection(idSourceElement, idTargetElement, width, height) {\n try {\n const sourceSvgElement =\n document.getElementById(idSourceElement).firstElementChild\n const targetElement = document.getElementById(idTargetElement)\n const canvas = document.createElement('canvas')\n // set width an height of elements\n sourceSvgElement.setAttribute('height', height)\n sourceSvgElement.setAttribute('width', width)\n canvas.setAttribute('height', height)\n canvas.setAttribute('width', width)\n\n // eslint-disable-next-line no-undef\n const svgString = new XMLSerializer().serializeToString(sourceSvgElement)\n const ctx = canvas.getContext('2d')\n ctx.fillStyle = '#ffffff'\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n // eslint-disable-next-line no-undef\n const DOMURL = self.URL || self.webkitURL || self\n // eslint-disable-next-line no-undef\n const img = new Image()\n // create object url of canvas using blob object\n // eslint-disable-next-line no-undef\n const svg = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' })\n const url = DOMURL.createObjectURL(svg)\n\n // the function is executed after load url of the image\n img.onload = function () {\n // draw png image and create url\n ctx.drawImage(img, 0, 0)\n const png = canvas.toDataURL('image/png')\n // targetElement.setAttribute('src', png)\n targetElement.setAttribute('material', `src`, png)\n DOMURL.revokeObjectURL(png)\n }\n img.src = url\n } catch (e) {}\n }\n}\n\nconst jsrootService = new JsrootService()\nexport default jsrootService\n","import React, { useState, useEffect } from 'react'\nimport jsrootSubject from '../../observables/jsrootSubject'\nimport jsrootService from '../../services/jsrootService'\n\n// styles\nconst styles = {\n box: {\n display: 'block',\n margin: 'auto',\n width: '90%',\n textAlign: 'center',\n align: 'center',\n paddingTop: 4\n },\n projection: {\n display: 'block',\n margin: 'auto',\n width: '420px',\n height: '350px'\n },\n form: {\n display: 'block',\n width: '60%',\n margin: 'auto',\n paddingTop: '2%',\n paddingBottom: '2%'\n },\n label: {\n display: 'block'\n },\n input: {\n display: 'block',\n width: '85%',\n margin: 'auto',\n height: 40,\n border: '1px solid grey',\n borderRadius: 3,\n textAlign: 'center',\n fontSize: 20,\n color: 'black',\n opacity: 0.8\n }\n}\n\n/**\n * React komponent pre zobrazenie bočného panelu s JSROOT projekciami.\n * Zobrazenie SVG elementu s histogramom a potrebným formulárom pre nastavenie atribútov.\n * @component\n * @param {Object} histogram - Objekt histogramu, z ktorého je potrebné spraviť projekciu\n * @param {Array} projectionAxes - Pole obsahuje názvy osí, podľa ktorých sa má vytvoriť projekcia\n * @param {Object} projections - Objekt obsahujúci súborovú štruktúru s projekciami\n * @param {Number} projIndex - Index projekcie v poli, ktorá sa má zobraziť\n * @example\n * const histogram = {\n * gitlab: // vytvorený alebo prečítany z root súboru JSROOT-tom\n * projections: // prečítaná z root súboru JSROOT-tom\n * }\n * return (\n * <JSrootHistogram\n * histogram={histogram.gitlab}\n * projectionAxes={['X','Y']}\n * projections={histogram.projections}\n * projIndex={0}/>\n * )\n */\nconst JsrootHistogram = ({\n histogram,\n projectionAxes,\n projections,\n projIndex\n}) => {\n let subscription\n const [axis, setAxis] = useState('X')\n const [selectedBin, setSelectedBin] = useState(null)\n\n // const histogram = props.histogram object of histogram in props\n const handleInputChange = (event) => {\n setAxis(event.target.value)\n }\n\n // handle subscription\n const handleSubscription = (data) => {\n setSelectedBin(data)\n }\n\n const renderForm = () => {\n return (\n <div className='form-group' style={styles.form}>\n <label htmlFor='formGroupExampleInput' style={styles.label}>\n Projection axis\n </label>\n <select\n onChange={handleInputChange}\n className='form-control'\n id='axisProjection'\n style={styles.input}\n >\n <option value={projectionAxes[0]}>\n {histogram[`f${projectionAxes[0]}axis`].fTitle\n ? histogram[`f${projectionAxes[0]}axis`].fTitle\n : projectionAxes[0]}\n </option>\n <option value={projectionAxes[1]}>\n {histogram[`f${projectionAxes[1]}axis`].fTitle\n ? histogram[`f${projectionAxes[1]}axis`].fTitle\n : projectionAxes[1]}\n </option>\n </select>\n </div>\n )\n }\n\n const createAndDisplayProjection = () => {\n if (projections !== null) {\n jsrootService.openTH1Projection(\n axis,\n { obj: histogram, bin: selectedBin },\n 'projectionContainer',\n projectionAxes,\n projections,\n projIndex\n )\n } else {\n jsrootService.createTH1Projection(\n axis,\n { obj: histogram, bin: selectedBin },\n 'projectionContainer',\n projectionAxes\n )\n setTimeout(() => {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n 'th-mapping',\n '500px',\n '500px'\n )\n }, 500)\n }\n }\n\n // subscribe for bin data\n useEffect(() => {\n jsrootService.jsrootLibrary = window.JSROOT\n setSelectedBin(null)\n\n subscription = jsrootSubject.getServiceEvent().subscribe(handleSubscription)\n // console.log(histogram)\n return () => subscription.unsubscribe()\n }, [histogram])\n\n // update projection\n useEffect(() => {\n if (selectedBin != null) createAndDisplayProjection()\n }, [axis, selectedBin, projections])\n\n return (\n <div style={styles.box}>\n {projections === null && selectedBin !== null && renderForm()}\n <div id='projectionContainer' style={styles.projection} />\n </div>\n )\n}\n\nexport default JsrootHistogram\n","// service to manage scene camera\n/** @module CameraSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre kameru.\n * @class\n */\nclass CameraSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia signálu s hodnotou špecifikujúcou vstupné zariadenie pre zobrazenie prišných panelov.\n * @return {void}\n */\n setVisibilityOfBanners(inputDevice) {\n this.#subject.next({\n device: inputDevice\n })\n }\n\n /**\n * Publikácia signálu s hodnotou \"shift\" pre posúvanie panelov.\n * @return {void}\n */\n shiftBanners() {\n this.#subject.next('shift')\n }\n\n /**\n * Publikácia signálu s hodnotou \"show\" pre zobrazenie prislúchajúcich panelov.\n * @return {void}\n */\n setUserState() {\n this.#subject.next('show')\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getCameraSubject() {\n return this.#subject.asObservable()\n }\n}\n\nconst cameraSubject = new CameraSubject()\nexport default cameraSubject\n","// service to manage camera\n/** @module CameraService */\n\n/**\n * Servis pre ovládanie a manipuláciu pozície kamery.\n * @class\n */\nexport class CameraService {\n #cameraWrapper\n constructor() {\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n }\n\n /**\n * Zmena vertikálnej polohy kamery.\n * @param {boolean} moveUp - Ak je True, kamera vyššie ak je False kamera nižšie\n * @param {number} speed - Rýchlosť zmeny pozície kamery\n * @return {void}\n */\n verticalMoveCamera = (moveUp, speed) => {\n // if we have not a cameraWrapper\n if (this.#cameraWrapper === null)\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n if (this.#cameraWrapper !== null) {\n if (moveUp) {\n this.#cameraWrapper.object3D.position.y += speed\n } else {\n if (this.#cameraWrapper.object3D.position.y > 0)\n this.#cameraWrapper.object3D.position.y -= speed\n }\n }\n }\n\n /**\n * Zmena horizontálnej polohy kamery.\n * @param {string} axis - Os po ktorej je ralizovaný pohyb kamery\n * @param {number} increment - Hodnota posunu kamery\n * @param {number} speed - Rýchlosť zmeny pozície kamery\n * @return {void}\n */\n horizontalMoveCamera = (axis, increment, speed) => {\n // if we have not a cameraWrapper\n if (this.#cameraWrapper === null)\n this.#cameraWrapper = document.getElementById('cameraWrapper')\n if (this.#cameraWrapper !== null) {\n if (increment) {\n this.#cameraWrapper.object3D.position[axis] += speed\n } else {\n this.#cameraWrapper.object3D.position[axis] -= speed\n }\n }\n }\n\n /**\n * Zmena vertikálnej polohy kamery.\n * @param {HTMLElement} elm - Cieľový element\n * @param {Object} offset - Ofsety zobrazenej sekcie\n * @param {number} rotation - Rotácia kamery\n * @return {void}\n */\n #setVerticalOffset = (elm, offset, rotation) => {\n if (this.#cameraWrapper !== null && elm !== null) {\n // this.#cameraWrapper.object3D.rotation.y = rotation\n const newXPos = elm.object3D.position.x + 1 * elm.object3D.position.x\n const newZPos = elm.object3D.position.z + 1 * elm.object3D.position.z\n const newYPos = offset\n // this.#cameraWrapper.object3D.position.x = newXPos + 1\n // this.#cameraWrapper.object3D.position.z = newZPos + 1\n // this.#cameraWrapper.object3D.position.y = newYPos\n this.#cameraWrapper.setAttribute(\n 'animation',\n `property: position; to: ${newXPos + 1} ${newYPos} ${\n newZPos + 1\n }; dur: 100;`\n )\n this.#cameraWrapper.setAttribute(\n 'animation__1',\n `property: rotation; to: ${\n this.#cameraWrapper.object3D.rotation.x\n } ${rotation} ${this.#cameraWrapper.object3D.rotation.z}; dur: 100;`\n )\n }\n }\n\n /**\n * Zmena vertikálnej polohy kamery podľa ofsetov.\n * @param {Object} offsets - Ofsety zobrazenej sekcie\n * @return {void}\n */\n setCameraPosition = (offsets) => {\n if (this.#cameraWrapper !== null) {\n let newZPos = this.#cameraWrapper.object3D.position.y\n if (offsets.zOffset !== undefined) {\n // this.#cameraWrapper.object3D.position.y = offsets.zOffset + 2\n newZPos = offsets.zOffset * 2\n }\n const newXPos = offsets.xOffset + offsets.xOffset\n const newYPos = offsets.yOffset + offsets.yOffset\n // this.#cameraWrapper.object3D.position.x = newXPos - 3\n // this.#cameraWrapper.object3D.position.z = newYPos - 3\n setTimeout(() => {\n this.#cameraWrapper.setAttribute(\n 'animation',\n `property: position; to: ${newXPos - 3} ${newZPos} ${\n newYPos - 3\n }; dur: 40;`\n )\n }, 1800)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície.\n * @return {void}\n */\n setPredefinedDownPosition = () => {\n // get target element\n const labelElement = document.getElementById('downLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 180)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedUpPosition = () => {\n // get target element\n const labelElement = document.getElementById('upLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 0)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedRightPosition = () => {\n // get target element\n const labelElement = document.getElementById('rightLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 90)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedLeftPosition = () => {\n // get target element\n const labelElement = document.getElementById('leftLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 0, 270)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedDownPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('downLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 180)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedUpPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('upLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 0)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedRightPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('rightLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 90)\n }\n }\n\n /**\n * Zmena polohy kamery podľa predefinovanej pozície\n * @return {void}\n */\n setPredefinedLeftPositionWithOffset = () => {\n // get target element\n const labelElement = document.getElementById('leftLabel')\n if (labelElement !== undefined) {\n this.#setVerticalOffset(labelElement, 10, 270)\n }\n }\n}\n","// service to manage histogram views\n/** @module HistogramSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre histogram.\n * Prezobrazovanie sekcií histogramu.\n * @class\n */\nclass HistogramSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia signálu pre prezobrazenie sekcie histogramu.\n * @param {string} axis - Názov osi podľa, po ktorej sa budú posúvať ofsety\n * @param {string} histogramType - Typ histogramu (TH2 alebo TH3)\n * @param {boolean} increment - Ak je True tak sa hodnota prípočíta k ofsetu, ak False tak sa odpočíta\n * @param {boolean} defaultRange - Ak je True tak sa použije predvolená hodnota (1), ak False tak nastavený rozsah\n * @return {void}\n */\n changeHistogramSectionByOffset(axis, histogramType, increment, defaultRange) {\n this.#subject.next({\n name: histogramType,\n axis: axis,\n increment: increment,\n defaultRange: defaultRange\n })\n }\n\n /**\n * Publikácia signálu pre zmenu vizuálneho módu.\n * @param {string} typeFunction - Názov funkcie podľa, ktorej sa zmení vizualizačný mód\n * @param {string} histogramType - Typ histogramu (TH2 alebo TH3)\n * @return {void}\n */\n changeHistogramFunction(typeFunction, histogramType) {\n this.#subject.next({\n fFunction: typeFunction,\n name: histogramType\n })\n }\n\n /**\n * Publikácia signálu pre zmenu zobrazeného údaju na bine.\n * @param {string} histogramType - Typ histogramu (TH2 alebo TH3)\n * @return {void}\n */\n changeTypeOfBinMark(value, histogramType) {\n this.#subject.next({\n binMarkMode: value,\n name: histogramType\n })\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getChangedSection() {\n return this.#subject.asObservable()\n }\n}\n\nconst histogramTH2Service = new HistogramSubject()\nconst histogramTH3Service = new HistogramSubject()\nexport { histogramTH2Service, histogramTH3Service }\n","// service to manage histogram views\n/** @module BinSubject */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre biny.\n * @class\n */\nclass BinSubject {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia signálnu s hodnotou True pre označenie daného binu.\n * @return {void}\n */\n saveSelectedBinToLocalStorage() {\n this.#subject.next(true)\n }\n\n /**\n * Publikácia signálnu s hodnotou False pre odznačenie daného binu.\n * @return {void}\n */\n deleteBinFromLocalStorage() {\n this.#subject.next(false)\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getKeyboardEvent() {\n return this.#subject.asObservable()\n }\n}\n\nconst binSubject = new BinSubject()\nexport default binSubject\n","/* add listeners for keyboard controller */\n/**\n * Modul obsahuje implementované metódy, ktoré reagujú na vstupy používateľa.\n * Funkcie sú určené pre komponenty slúžiace definovanie listenerov pre klávesnicu počítača.\n * @module keyboardController\n */\nimport { Subject } from 'rxjs'\nimport { CameraService } from '../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../observables/histogramSubject'\nimport binSubject from '../observables/binSubject'\nimport jsrootService from '../services/jsrootService'\nimport cameraSubject from '../observables/cameraSubject'\n\nconst keyPressed = {}\nlet cameraService = new CameraService()\nlet aframeObj\nlet geoAttributes\nconst toolsSelector = new Subject()\nlet activeTool\n\n/**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @param {string} property - Definuje názov atribútu histogramu (poloha, rozmer, rotácia), ktorý bude modifikovaný\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst handlePositioning = (property, event) => {\n let difference = 0.2\n\n if (property.name === 'scale') difference = 0.01\n else if (property.name === 'rotation') difference = 2\n\n if (event.key === 'ArrowDown') {\n property.xValue = property.xValue + difference\n } else if (event.key === 'ArrowUp') {\n property.xValue = property.xValue - difference\n } else if (event.key === '=') {\n property.yValue = property.yValue + difference\n } else if (event.key === '-') {\n property.yValue = property.yValue - difference\n } else if (event.key === 'ArrowRight') {\n property.zValue = property.zValue + difference\n } else if (event.key === 'ArrowLeft') {\n property.zValue = property.zValue - difference\n }\n aframeObj.setAttribute(\n property.name,\n `${property.xValue} ${property.yValue} ${property.zValue}`\n )\n}\n\n// handle histogram section change by default range = 1\n/**\n * Zmena zobrazovanej sekcie histogramu o predvolený rozsah (1) na klávesnici\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst handleChangeHistogramSectionByDefaultRange = (event) => {\n if (event.key === 'k' || event.key === 'K') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'i' || event.key === 'I') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n true\n )\n } else if (event.key === 'u' || event.key === 'U') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n true\n )\n } else if (event.key === 'o' || event.key === 'O') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'l' || event.key === 'L') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n true\n )\n } else if (event.key === 'j' || event.key === 'J') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n true\n )\n }\n}\n\n// handle histogram section change by user's range = user sets this range\n/**\n * Zmena zobrazovanej sekcie histogramu o vlastný rozsah (podľa nastavení používateľa) na klávesnici\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst handleChangeHistogramSectionByOwnRange = (event) => {\n if (event.key === 'k' || event.key === 'K') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'i' || event.key === 'I') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n false\n )\n } else if (event.key === 'u' || event.key === 'U') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n false\n )\n } else if (event.key === 'o' || event.key === 'O') {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'l' || event.key === 'L') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n false\n )\n } else if (event.key === 'j' || event.key === 'J') {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n false\n )\n }\n}\n\n// key press handler\n/**\n * Funkcia, vukonávajúca sa na klik používateľa.\n * Funkcia detekuje, uloží stlačenú klávesu do poľa stlašených kláves a zavolá náležitú funkciu\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst keyPressHandlerFunction = (event) => {\n keyPressed[event.key] = true\n\n if (keyPressed.Z || keyPressed.z) {\n handlePositioning(geoAttributes[0], event)\n }\n if (keyPressed.X || keyPressed.x) {\n handlePositioning(geoAttributes[1], event)\n }\n if (keyPressed.C || keyPressed.c) {\n handlePositioning(geoAttributes[2], event)\n }\n if (keyPressed.Shift) {\n handleChangeHistogramSectionByOwnRange(event)\n }\n handleChangeHistogramSectionByDefaultRange(event)\n // change camera up\n if (event.key === ' ') {\n cameraService.verticalMoveCamera(true, 0.3)\n }\n // change camera down\n if (event.shiftKey) {\n cameraService.verticalMoveCamera(false, 0.3)\n }\n if (event.key === '1') {\n // cameraService.setPredefinedDownPosition()\n toolsSelector.next(1)\n activeTool = 1\n }\n if (event.key === '2') {\n // cameraService.setPredefinedUpPosition()\n toolsSelector.next(2)\n activeTool = 2\n }\n\n if (event.key === '3') {\n // cameraService.setPredefinedRightPosition()\n toolsSelector.next(3)\n activeTool = 3\n }\n if (event.key === '4') {\n // cameraService.setPredefinedLeftPosition()\n toolsSelector.next(4)\n activeTool = 4\n }\n if (event.key === '5') {\n // cameraService.setPredefinedDownPositionWithOffset()\n toolsSelector.next(5)\n activeTool = 5\n }\n if (event.key === '6') {\n // cameraService.setPredefinedUpPositionWithOffset()\n toolsSelector.next(6)\n activeTool = 6\n }\n if (event.key === '7') {\n // cameraService.setPredefinedRightPositionWithOffset()\n toolsSelector.next(7)\n activeTool = 7\n }\n if (event.key === '8') {\n // cameraService.setPredefinedLeftPositionWithOffset()\n toolsSelector.next(8)\n activeTool = 8\n }\n if (event.key === '9') {\n // cameraService.setPredefinedLeftPositionWithOffset()\n toolsSelector.next(9)\n activeTool = 9\n }\n if (event.key === '0') {\n // cameraService.setPredefinedLeftPositionWithOffset()\n toolsSelector.next(0)\n activeTool = 0\n }\n\n if (event.key === 'Enter') {\n binSubject.saveSelectedBinToLocalStorage()\n ;[\n 'th-mapping',\n 'bannerId_1',\n 'bannerId_2',\n 'bannerId_3',\n 'bannerId_4'\n ].forEach((targetId) => {\n if (document.getElementById(targetId) !== null) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n targetId,\n '500px',\n '400px'\n )\n }\n })\n }\n if (event.key === 'r' || event.key === 'R') {\n binSubject.deleteBinFromLocalStorage()\n }\n if (event.key === 'm' || event.key === 'M') {\n histogramTH2Service.changeHistogramFunction('feet', 'TH2')\n }\n if (event.key === 'n' || event.key === 'N') {\n histogramTH2Service.changeHistogramFunction('default', 'TH2')\n }\n if (event.key === 'c' || event.key === 'C') {\n cameraSubject.setUserState()\n }\n if (event.key === 'v' || event.key === 'V') {\n cameraSubject.setVisibilityOfBanners('keyboard')\n }\n if (event.key === 'x' || event.key === 'X') {\n cameraSubject.shiftBanners()\n }\n if (event.key === 'x' || event.key === 'X') {\n cameraSubject.shiftBanners()\n }\n}\n\nconst switchDisplayModeOnBin = (event) => {\n event.preventDefault()\n\n let binDisplayMode\n if (event.deltaY > 0) {\n binDisplayMode = 1\n } else {\n binDisplayMode = -1\n }\n\n histogramTH2Service.changeTypeOfBinMark(binDisplayMode, 'TH2')\n histogramTH3Service.changeTypeOfBinMark(binDisplayMode, 'TH3')\n}\n\nconst getActiveTool = () => {\n return activeTool\n}\n\n// delete function key from array\n/**\n * Funkcia vymaže klávesu z poľa stlačených kláves\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst keyReleaseHandlerFunction = (event) => {\n delete keyPressed[event.key]\n}\n\n/**\n * Funkcia inicializuje všetky údaje o histograme a samotnú referenciu na histogram\n * @param {Object} data - Objekt obsahuje všetky atribúty (rozmer, pozícia, rotácia)\n * @param {HTMLElement} object - Referencia na element histogramu, ktorý sa má modifikovať\n * @return {void}\n */\nconst initialKeyboardController = (data, object) => {\n aframeObj = object\n geoAttributes = [data.position, data.scale, data.rotation]\n // if (this.#cameraService === null) this.#cameraService = new CameraService()\n // set initial position, scale, rotation of the histogram\n for (let i = 0; i < 3; i++) {\n aframeObj.setAttribute(\n geoAttributes[i].name,\n `${geoAttributes[i].xValue} ${geoAttributes[i].yValue} ${geoAttributes[i].zValue}`\n )\n }\n}\n\n/**\n * Funkcia aktualizuje referenciu servis kamery\n * @return {void}\n */\nconst keyboardUpdateCameraReference = () => {\n cameraService = new CameraService()\n}\n\nexport {\n initialKeyboardController,\n keyPressHandlerFunction,\n keyReleaseHandlerFunction,\n keyboardUpdateCameraReference,\n switchDisplayModeOnBin,\n toolsSelector,\n getActiveTool\n}\n","/* object for manipulating local storage */\n/** @module NdmVrStorageService */\n\n/**\n * Servis pre ovládanie lokálneho úložiska.\n * Ukladanie a načítavanie dát o ofsetoch a histograme.\n * @class\n */\nexport class NdmVrStorageService {\n #storage\n #camera\n #selectedBins = []\n\n /**\n * Nastavenie referencií a potrebných identifikátorov.\n * Načítanie poľa označených binov z lokalneho úložiska, ak nejaké sú.\n * @return {void}\n */\n constructor() {\n this.#storage = window.localStorage\n this.#camera = document.getElementById('cameraWrapper')\n this.#selectedBins = this.getBinsFromLocalStorage()\n }\n\n /*\n initLocalStorage() {\n if (!this.loadProperty('TH2')) {\n this.storeProperty('TH2', {})\n }\n if (!this.loadProperty('TH3')) {\n this.storeProperty('TH3', {})\n }\n if (!this.#storage.getItem('rootFile')) {\n this.storeFilePath(\n 'https://eos.ndmspc.io/eos/ndmspc/scratch/test/gitlab-hist.root'\n )\n }\n this.storeTH2Offsets(1, 1, 6)\n this.storeTH3Offsets(1, 1, 1, 6)\n }\n */\n\n /**\n * Funkcia pre uloženie binu do zoznamu označených binov.\n * @param {Object} binData - Objekt obsahujúci všetky dáta o zvolenom bine\n * @return {void}\n */\n storeCurrentBinToLocalStorage(binData) {\n this.#storage.setItem('currentBin', JSON.stringify(binData))\n }\n\n getCurrentBinFromLocalStorage() {\n const currentBin = JSON.parse(this.#storage.getItem('currentBin'))\n if (currentBin === undefined || currentBin === '') {\n return null\n }\n return currentBin\n }\n\n /**\n * Funkcia pre načítanie aktuálnych informácií o histograme.\n * @param {string} property - Objekt označujúci typ histogramu, pre ktorý sa majú získať ofsety\n * @return {Object} - Objekt obsahujúci informácie o sekciách určitého histogramu\n */\n loadProperty(property) {\n return JSON.parse(this.#storage.getItem(property))\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme.\n * @param {string} property - Objekt označujúci typ histogramu, pre ktorý sa majú získať ofsety\n * @param {Object} object - Objekt obsahujúci informácie o sekciách určitého histogramu\n * @return {void}\n */\n storeProperty(property, object) {\n this.#storage.setItem(property, JSON.stringify(object))\n }\n\n /*\n storeTH2HistogramLimits(histogram) {\n const object = this.loadProperty('TH2')\n object.binScales = this.#getBinTH2Scales(histogram)\n object.limits = {\n xOffset: histogram.fXaxis.fXmax / object.binScales.xWidth,\n yOffset: histogram.fYaxis.fXmax / object.binScales.yWidth\n }\n this.storeProperty('TH2', object)\n }\n\n storeTH3HistogramLimits(histogram) {\n const object = this.loadProperty('TH3')\n object.binScales = this.#getBinTH3Scales(histogram)\n object.limits = {\n xOffset: histogram.fXaxis.fXmax / object.binScales.xWidth,\n yOffset: histogram.fYaxis.fXmax / object.binScales.yWidth,\n zOffset: histogram.fZaxis.fXmax / object.binScales.zWidth\n }\n this.storeProperty('TH3', object)\n }\n\n storeHistogramLimits(type, histogram) {\n if (type.includes('TH3') || type.includes('th3')) {\n this.storeTH3HistogramLimits(histogram)\n } else if (type.includes('TH2') || type.includes('th2')) {\n this.storeTH2HistogramLimits(histogram)\n }\n }\n\n loadTH3Limits() {\n const object = this.loadProperty('TH3')\n return object.limits\n }\n\n loadTH2Limits() {\n const object = this.loadProperty('TH2')\n return object.limits\n }\n\n loadLimits(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n return this.loadTH3Limits()\n } else if (type.includes('TH2') || type.includes('th2')) {\n return this.loadTH2Limits()\n }\n }\n */\n /*\n #getBinTH2Scales = (histogram) => {\n const xWidth = histogram.fXaxis.fXmax / histogram.fXaxis.fNbins\n const yWidth = histogram.fYaxis.fXmax / histogram.fYaxis.fNbins\n return {\n xWidth: xWidth,\n yWidth: yWidth\n }\n }\n\n #getBinTH3Scales = (histogram) => {\n const xcenter = histogram.fXaxis.GetBinCenter(1)\n const xmin = histogram.fXaxis.GetBinLowEdge(1)\n const xmax = xcenter + (xcenter - xmin)\n const xWidth = xmax - xmin\n const ycenter = histogram.fYaxis.GetBinCenter(1)\n const ymin = histogram.fYaxis.GetBinLowEdge(1)\n const ymax = ycenter + (ycenter - ymin)\n const yWidth = ymax - ymin\n const zcenter = histogram.fZaxis.GetBinCenter(1)\n const zmin = histogram.fZaxis.GetBinLowEdge(1)\n const zmax = zcenter + (zcenter - zmin)\n const zWidth = zmax - zmin\n return {\n xWidth: xWidth,\n yWidth: yWidth,\n zWidth: zWidth\n }\n }\n */\n /*\n loadBinScale(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n const object = this.loadProperty('TH3')\n return object.binScales\n } else if (type.includes('TH2') || type.includes('th2')) {\n const object = this.loadProperty('TH2')\n return object.binScales\n }\n }\n */\n\n initHistogramData(histogram) {\n if (histogram._typename.includes('TH3')) {\n this.storeTH3HistogramLimits(histogram)\n } else if (histogram._typename.includes('TH2')) {\n this.storeTH2HistogramLimits(histogram)\n }\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme TH2.\n * @param {number} xOffset - Hodnota reprezentujúca ofset na osi X\n * @param {number} yOffset - Hodnota reprezentujúca ofset na osi Y\n * @param {number} range - Hodnota reprezentujúca rozsah binov na osiach\n * @return {void}\n */\n storeTH2Offsets(xOffset, yOffset, range) {\n let object = this.loadProperty('TH2')\n let section\n if (object === null) {\n object = {}\n section = {\n name: 'TH2',\n xOffset: 1,\n yOffset: 1,\n range: 8\n }\n } else {\n section = {\n name: 'TH2',\n xOffset: xOffset,\n yOffset: yOffset,\n range: range\n }\n }\n object.section = section\n this.storeProperty('TH2', object)\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme TH3.\n * @param {number} xOffset - Hodnota reprezentujúca ofset na osi X\n * @param {number} yOffset - Hodnota reprezentujúca ofset na osi Y\n * @param {number} zOffset - Hodnota reprezentujúca ofset na osi Z\n * @param {number} range - Hodnota reprezentujúca rozsah binov na osiach\n * @return {void}\n */\n storeTH3Offsets(xOffset, yOffset, zOffset, range) {\n let object = this.loadProperty('TH3')\n let section\n if (object === null) {\n object = {}\n section = {\n name: 'TH3',\n xOffset: 1,\n yOffset: 1,\n zOffset: 1,\n range: 4\n }\n } else {\n section = {\n name: 'TH3',\n xOffset: xOffset,\n yOffset: yOffset,\n zOffset: zOffset,\n range: range\n }\n }\n object.section = section\n this.storeProperty('TH3', object)\n }\n\n /**\n * Funkcia pre uloženie aktuálnych informácií o histograme.\n * @param {Object} section - Objekt obsahujúci ofsety a rozsah pre histogramy. Objekt obsahuje aj typ histogramu podľa ktorého sa uloží správna sekcia do lokálneho úložiska\n * @return {void}\n */\n storeOffsets(section) {\n if (section.name.includes('TH3') || section.name.includes('th3')) {\n this.storeTH3Offsets(\n section.xOffset,\n section.yOffset,\n section.zOffset,\n section.range\n )\n } else if (section.name.includes('TH2') || section.name.includes('th2')) {\n this.storeTH2Offsets(section.xOffset, section.yOffset, section.range)\n }\n }\n\n /**\n * Uloženie názvu root súboru.\n * @param {string} filePath - URL cesta k súboru\n * @return {void}\n */\n storeFilePath(filePath) {\n this.#storage.setItem('rootFile', filePath)\n }\n\n /**\n * Načítanie názvu root súboru.\n * @return {string} - URL root súboru\n */\n loadFilePath() {\n const filename = this.#storage.getItem('rootFile')\n if (filename === null || filename === undefined) {\n // throw new Error('The filename is empty')\n return 'defaultHistogram'\n }\n return filename\n }\n\n /**\n * Načítanie informácií o TH2 histograme\n * @return {Object} - Object obsahujúci ofsety, rozsah, typ histogramu. Ak sa nenachádza v lokálnom uložisku vracia null\n */\n loadTH2Offsets() {\n const object = this.loadProperty('TH2')\n if (object !== null) {\n return object.section\n } else {\n return null\n }\n }\n\n /**\n * Načítanie informácií o TH3 histograme.\n * @return {Object} - Object obsahujúci ofsety, rozsah, typ histogramu. Ak sa nenachádza v lokálnom uložisku vracia null\n */\n loadTH3Offsets() {\n const object = this.loadProperty('TH3')\n if (object !== null) {\n return object.section\n } else {\n return null\n }\n }\n\n /**\n * Načítanie informácií o histograme.\n * @param {string} type - Typ histogramu podľa, ktorého sa získa správny objekt obsahujúci informácie o histograme\n * @return {Object} - Object obsahujúci ofsety, rozsah, typ histogramu. Ak sa nenachádza v lokálnom uložisku vracia null\n */\n loadOffsets(type) {\n if (type.includes('TH3') || type.includes('th3')) {\n return this.loadTH3Offsets()\n } else if (type.includes('TH2') || type.includes('th2')) {\n return this.loadTH2Offsets()\n }\n }\n\n /*\n #getValidOffset = (\n histogramType,\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n ) => {\n if (increment) {\n if (defaultRange) {\n offsets[axisOffset] += 1\n } else {\n offsets[axisOffset] += offsets.range + 1\n }\n if (limits[axisOffset] <= offsets.range) {\n offsets[axisOffset] = 1\n return offsets\n }\n if (offsets[axisOffset] > limits[axisOffset] - offsets.range - 1) {\n offsets[axisOffset] = limits[axisOffset] - offsets.range\n return offsets\n }\n } else {\n if (offsets[axisOffset] - offsets.range + 1 <= 1) {\n offsets[axisOffset] = 1\n return offsets\n }\n if (defaultRange) {\n offsets[axisOffset] -= 1\n } else {\n offsets[axisOffset] -= offsets.range + 1\n }\n }\n return offsets\n }\n */\n\n /*\n editTH2OffsetByOffset(axisOffset, increment, defaultRange) {\n const limits = this.loadTH2Limits()\n const offsets = this.loadTH2Offsets()\n const result = this.#getValidOffset(\n 'TH2',\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n // this.storeTH2Offsets(result.xOffset, result.yOffset, result.range)\n return result\n }\n */\n\n /*\n editTH3OffsetByOffset(axisOffset, increment, defaultRange) {\n const limits = this.loadTH3Limits()\n const offsets = this.loadTH3Offsets()\n const result = this.#getValidOffset(\n 'TH3',\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n // this.storeTH3Offsets(result.xOffset, result.yOffset, result.zOffset, result.range)\n return result\n }\n */\n\n // set offset value\n /*\n setOffsetValue = (typeName, range) => {\n if (typeName.includes('TH2')) {\n if (range > 16) {\n return 16\n } else if (range < 2) {\n return 2\n } else {\n return range\n }\n } else if (typeName.includes('TH3')) {\n if (range > 10) {\n return 10\n } else if (range < 2) {\n return 2\n } else {\n return range\n }\n }\n }\n */\n\n #deleteCurrentBin = (binData) => {\n return this.#selectedBins.filter((item) => item.id !== binData.id)\n }\n\n // check containing bin\n /**\n * Overenie, či je bin v poli označených binov.\n * @param {Object} binData - Objekt obsahujúci informácie o bine\n * @return {boolean} - Ak je True bin je v poli označených binov, ak False bin nie je v poli označených binov\n */\n containThisBin = (binData) => {\n const updatedArray = this.#selectedBins.filter(\n (item) => item.id === binData.id\n )\n return updatedArray.length !== 0\n }\n\n // store bin to local storage\n /**\n * Uloženie binu, uloženie do poľa označených binov.\n * @param {Object} binData - Objekt obsahujúci informácie o bine\n * @return {void}\n */\n storeBinToLocalStorage = (binData) => {\n // let bins = JSON.parse(this.#storage.getItem('currentBin'))\n if (!this.containThisBin(binData)) {\n this.#selectedBins.push(binData)\n this.#storage.setItem('selectedBins', JSON.stringify(this.#selectedBins))\n }\n }\n\n /**\n * Odstránenie binu, vymzanie binu z poľa označených binov.\n * @param {Object} binData - Objekt obsahujúci informácie o bine\n * @return {void}\n */\n deleteBinFromLocalStorage = (binData) => {\n // let bins = JSON.parse(this.#storage.getItem('currentBin'))\n if (this.containThisBin(binData)) {\n this.#selectedBins = this.#deleteCurrentBin(binData)\n this.#storage.setItem('selectedBins', JSON.stringify(this.#selectedBins))\n }\n }\n\n // get bin from local storage\n /**\n * Načítanie všetkých binov z poľa označených binov.\n * @return {Array} - Pole s označenými binmi\n */\n getBinsFromLocalStorage = () => {\n const selectedBins = JSON.parse(this.#storage.getItem('selectedBins'))\n if (selectedBins === null) {\n return []\n } else {\n return selectedBins\n }\n }\n}\n\nconst localStorageService = new NdmVrStorageService()\nexport { localStorageService }\n","// bin distributor\n/** @module BinDataDistributor */\nimport { Subject } from 'rxjs'\n\n/**\n * Subjekt pre publikáciu signálov a dát pre biny.\n * @class\n */\nclass BinDataDistributor {\n #subject\n constructor() {\n this.#subject = new Subject()\n }\n\n /**\n * Publikácia dat oznaceneho binu.\n * @return {void}\n */\n sendDataOfTheSelectedBin(binData) {\n this.#subject.next(binData)\n }\n\n /**\n * Získanie objektu pre prístup k odberu signálov a dát.\n * @return {Subject} - Vracia inštanciu objektu, na ktorý sa dá prihlásiť a odoberať publikované informácie a signály\n */\n getBinDistributor() {\n return this.#subject.asObservable()\n }\n}\n\nconst binDataDistributor = new BinDataDistributor()\nexport default binDataDistributor\n","import AFRAME from 'aframe'\nimport { Subject } from 'rxjs'\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport binSubject from '../observables/binSubject'\nimport jsrootSubject from '../observables/jsrootSubject'\nimport binDataDistributor from '../observables/binDataDistributor'\nimport { getActiveTool } from '../controllers/keyboardController'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite, ktorá spracuváva prieniky medzi entitou a raycastrom používateľa.\n * @component mouseevent\n * @module cursorEventAframeComponent\n */\nconst binData = new Subject()\n// aframe component for set events on bin\nAFRAME.registerComponent('mouseevent', {\n init: function () {\n let subscription\n\n const el = this.el\n\n let clickCount = 0\n let checked = false\n // add mouse listener on mouseenter\n el.addEventListener('mouseenter', function setHover(evt) {\n checked = false\n // subscribe for events\n const intersection = evt.detail.intersection\n subscription = binSubject.getKeyboardEvent().subscribe((save) => {\n if (save) {\n localStorageService.storeBinToLocalStorage(this.userData)\n localStorageService.storeCurrentBinToLocalStorage(this.userData)\n binDataDistributor.sendDataOfTheSelectedBin(this.userData)\n this.userData.markedColor = this.userData.selectColor\n this.setAttribute('material', 'opacity', '0.70')\n jsrootSubject.showBinProjection(this.userData)\n } else {\n localStorageService.deleteBinFromLocalStorage(this.userData)\n this.userData.markedColor = this.userData.color\n this.setAttribute('material', 'opacity', '0.50')\n }\n })\n if (intersection.face.normal.x !== 0) {\n this.setAttribute('material', 'color', this.userData.axisZ)\n } else if (intersection.face.normal.y !== 0) {\n this.setAttribute('material', 'color', this.userData.axisY)\n } else {\n this.setAttribute('material', 'color', this.userData.axisX)\n }\n this.setAttribute('material', 'opacity', '0.70')\n })\n\n // add mouse listener on mouseleave\n el.addEventListener('mouseleave', function setPassive() {\n subscription.unsubscribe()\n if (checked === false) {\n this.setAttribute('material', 'color', this.userData.markedColor)\n this.setAttribute('material', 'opacity', '0.50')\n }\n clickCount = 0\n })\n\n // add mouse listener on click\n el.addEventListener('click', function setActive(evt) {\n clickCount = clickCount + 1\n checked = false\n setTimeout(() => {\n clickCount = 0\n }, 600)\n // add mouse listener on double click\n // change position\n if (clickCount === 2) {\n clickCount = 0\n checked = true\n this.setAttribute('material', 'color', '#99ff00')\n this.setAttribute('material', 'opacity', '1')\n // get camera\n const camera = document.getElementById('cameraWrapper')\n // set pos of camera\n if (camera !== null) {\n camera.object3D.position.y = this.object3D.position.y + 0.4\n // camera.object3D.rotation.y = 180\n if (this.userData.content > 0.5) {\n // camera.object3D.position.x = -1.5 + this.object3D.position.x\n // camera.object3D.position.z = this.object3D.position.z - 1.2\n camera.setAttribute(\n 'animation',\n `property: position; to: ${-0.5 + this.object3D.position.x} ${\n this.object3D.position.y\n } ${this.object3D.position.z}\n ; dur: 600; easing: linear;`\n )\n } else if (this.userData.content > 0.2) {\n // camera.object3D.position.x = -0.5 + this.object3D.position.x\n // camera.object3D.position.y = this.object3D.position.y + 0.1\n // camera.object3D.position.z = this.object3D.position.z + 4.5\n camera.setAttribute(\n 'animation',\n `property: position; to: ${-0.5 + this.object3D.position.x} ${\n this.object3D.position.y + 0.1\n } ${this.object3D.position.z + 0.5}\n ; dur: 600; easing: linear;`\n )\n } else {\n // camera.object3D.position.x = this.object3D.position.x + 2\n // camera.object3D.position.y = this.object3D.position.y + 0.1\n // camera.object3D.position.z = this.object3D.position.z + 8.5\n camera.setAttribute(\n 'animation',\n `property: position; to: ${this.object3D.position.x + 2} ${\n this.object3D.position.y + 0.1\n } ${this.object3D.position.z + 8.5}\n ; dur: 600; easing: linear;`\n )\n }\n }\n // change store info to localstorage\n } else if (clickCount === 1) {\n this.setAttribute('material', 'color', '#99ff00')\n this.setAttribute('material', 'opacity', '1')\n localStorageService.storeCurrentBinToLocalStorage(this.userData) // !!!!!!!!!!!!!!!!!!\n jsrootSubject.showBinProjection(this.userData)\n switch (getActiveTool()) {\n case 1:\n binData.next(this.userData)\n\n break\n }\n }\n\n // get reference to info-banner element\n let infoBanner = document.getElementById('th2-banner')\n if (infoBanner === null) {\n infoBanner = document.getElementById('th3-banner')\n }\n\n // if we have any information banner\n if (infoBanner !== null) {\n const planes = infoBanner.childNodes\n // set message to display\n if (this.userData.typeName === 'TH3' && planes.length === 5) {\n const zCor = `[${this.userData.zTitle}] [${this.userData.zMin},${\n this.userData.zMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const xCor = `[${this.userData.xTitle}] [${this.userData.xMin},${\n this.userData.xMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const yCor = `[${this.userData.yTitle}] [${this.userData.yMin},${\n this.userData.yMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const content = `Content: ${this.userData.absoluteContent} [${this.userData.content}]\\n`\n\n planes[0].setAttribute(\n 'text',\n `value: ${content}; color: ${this.userData.color}; align: center; width: 30; height: auto;`\n )\n planes[1].setAttribute(\n 'text',\n `value: ${xCor}; color: ${this.userData.axisX}; align: center; width: 30; height: auto;`\n )\n planes[2].setAttribute(\n 'text',\n `value: ${yCor}; color: ${this.userData.axisY}; align: center; width: 30; height: auto;`\n )\n planes[3].setAttribute(\n 'text',\n `value: ${zCor}; color: ${this.userData.axisZ}; align: center; width: 30; height: auto;`\n )\n } else {\n const content = `Content: ${this.userData.absoluteContent} [${this.userData.content}]\\n`\n const xCor = `[${this.userData.xTitle}] [${this.userData.xMin},${\n this.userData.xMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n const yCor = `[${this.userData.yTitle}] [${this.userData.yMin},${\n this.userData.yMax\n }] ${\n this.userData.binName !== '' ? this.userData.binName + '\\n' : '\\n'\n }`\n planes[0].setAttribute(\n 'text',\n `value: ${content}; color: ${this.userData.color}; align: center; baseline: center; width: 30; height: auto;`\n )\n planes[1].setAttribute(\n 'text',\n `value: ${xCor}; color: ${this.userData.axisX}; align: center; width: 30; height: auto;`\n )\n planes[2].setAttribute(\n 'text',\n `value: ${yCor}; color: ${this.userData.axisY}; align: center; width: 30; height: auto;`\n )\n }\n }\n })\n },\n update: function () {\n const el = this.el\n el.setAttribute('material', 'color', el.userData.markedColor)\n el.setAttribute('material', 'opacity', '0.75')\n }\n})\n\nexport { binData }\n","import React, { useState, useEffect } from 'react'\nimport 'aframe'\nimport cameraSubject from '../../observables/cameraSubject'\nimport jsrootService from '../../services/jsrootService'\nimport { toolsSelector } from '../../controllers/keyboardController'\nimport { binData } from '../../aframeComponents/cursorEventAframeComponent'\nconst AFRAME = window.AFRAME\n\n/**\n * React komponent pre vytvorenie kamery a jej menežment.\n * @component\n * @example\n * return (\n * <NdmVrCamera />\n * )\n */\n\nconst NdmVrCamera = () => {\n let subscription\n let activeToolHighlight = '0 -0.75 -1'\n let binDataSubscription\n\n const [selectedBinData, setSelectedBinData] = useState(\n 'value: Bin data:\\nX: null\\nY: null\\nZ: null;color: black;'\n )\n const offset = 30\n const [rotation, setRotation] = useState(0)\n const [prevPosition, setPrevPosition] = useState(null)\n const [inputDevice, setInputDevice] = useState('keyboard')\n const [show, setShow] = useState(false)\n const [showProjection, setShowProjection] = useState(false)\n const [activeTool, setActiveTool] = useState(3)\n\n toolsSelector.subscribe((value) => {\n setActiveTool(value)\n if (value === 1) {\n binDataSubscription = binData.subscribe((value) =>\n setSelectedBinData(\n String(\n 'value: Bin data:\\n' +\n 'X: ' +\n value.xPos +\n '\\n' +\n 'Y: ' +\n value.yPos +\n '\\n' +\n 'Z: ' +\n value.zPos +\n '; color: black;'\n )\n )\n )\n } else {\n if (binDataSubscription) binDataSubscription.unsubscribe()\n }\n })\n\n const handleSubscription = (data) => {\n if (data.device) {\n if (inputDevice !== data.device) {\n setInputDevice(data.device)\n }\n setShow(!show)\n } else if (data === 'shift') {\n compileRotation()\n } else if (data === 'show') {\n setShowProjection(!showProjection)\n }\n }\n\n const compileRotation = () => {\n let currentRotation = rotation + 90\n if (currentRotation >= 360) currentRotation = 0\n setRotation(currentRotation)\n }\n\n // function compileRotation(){\n // let currentRotation = rotation + 90\n // if (currentRotation >= 360) currentRotation = 0\n // setRotation(currentRotation)\n // }\n\n // render banners for projection\n const renderProjectionsBanners = () => {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n material='color: white'\n >\n <a-entity\n // geometry='primitive: box; width: 18; height: 5; depth: 0.5;'\n /* geometry={\n inputDevice === 'oculus'\n ? 'primitive: box; width: 40; height: 10; depth: 0.1;'\n : 'primitive: box; width: 18; height: 5; depth: 0.1;'\n } */\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n // position={`8 ${inputDevice === 'oculus' ? 3 - offset : 3} -5`}\n // position={inputDevice === 'oculus' ? '-30 28 0' : '8 3 -5'}\n position='-30 28 0'\n // rotation='0 -45 0'\n // rotation={inputDevice === 'oculus' ? '45 90 0' : '0 -45 0'}\n rotation='45 90 0'\n material='color:white;'\n >\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press C to show help panels'\n : 'Press Button X to show help panels'\n }\n // position={inputDevice === 'oculus' ? '-18 0 1' : '-8 0 1'}\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press V to switch to histogram view'\n : 'Press Button Y to switch to histogram view'\n }\n // position='-8 1 1'\n // position={inputDevice === 'oculus' ? '-18 2.8 1' : '-8 1 1'}\n position='-20 0 1'\n />\n <a-text\n color='black'\n // width='20'\n // width={inputDevice === 'oculus' ? '50' : '20'}\n width={50}\n value={\n inputDevice === 'keyboard'\n ? 'Press X to shift panels'\n : 'Press right Trigger to shift panels'\n }\n // position='-8 -1 1'\n // position={inputDevice === 'oculus' ? '-18 -2.8 1' : '-8 -1 1'}\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n id='bannerId_1'\n scale='80 50 2'\n animation__position='property: position; from: 0 0 -60; to: 0 -1 -42; delay: 0; dur: 800; easing: linear;'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 0 0 -60; to: 0 0 -42.5; delay: 0; dur: 800; easing: linear;'\n material='color: white;'\n />\n <a-box\n id='bannerId_2'\n scale='80 50 2'\n animation__position='property: position; from: 60 0 0; to: 42 -1 0; delay: 200; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 60 0 0; to: 42.5 0 0; delay: 200; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='color: white;'\n />\n <a-box\n id='bannerId_3'\n scale='80 50 2'\n animation__position='property: position; from: 0 0 60; to: 0 -1 42; delay: 400; dur: 800; easing: linear;'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: 0 0 60; to: 0 0 42.5; delay: 400; dur: 800; easing: linear;'\n material='color: white;'\n />\n <a-box\n id='bannerId_4'\n scale='80 50 2'\n animation__position='property: position; from: -60 0 0; to: -42 -1 0; delay: 600; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='transparent:true'\n />\n <a-box\n scale='80 52 2'\n animation__position='property: position; from: -60 0 0; to: -42.5 0 0; delay: 600; dur: 800; easing: linear;'\n rotation='0 90 0'\n material='color: white;'\n />\n </a-entity>\n )\n }\n\n // render banners for controls\n const renderBannersWithControls = () => {\n if (inputDevice === 'keyboard') {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n material='color: white'\n >\n <a-entity\n // geometry='primitive: box; width: 15; height: 5; depth: 0.5;'\n // position='8 3 -5'\n // rotation='0 -45 0'\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n position='-30 28 0'\n rotation='45 90 0'\n material='color: white'\n >\n <a-text\n color='black'\n // width='20'\n width='50'\n // value='Press C to show projection panels'\n value={\n showProjection\n ? 'Press C to show help panels'\n : 'Press C to show projection panels'\n }\n // position='-6 0 1'\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n // width='20'\n width='50'\n value='Press V to switch to histogram view'\n // position='-6 1 1'\n position='-20 0 1'\n />\n <a-text\n color='black'\n // width='20'\n width='50'\n value='Press X to shift panels'\n // position='-6 -1 1'\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -30 0 60; to: -30 0 30; delay: 0; dur: 800; easing: linear;'\n rotation='0 -45 0'\n // src='https://i.imgur.com/x78XYHM.png'\n src='./ndmvr/keyboardControls/keyboard.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -30 0 -60; to: -30 0 -30; delay: 200; dur: 800; easing: linear;'\n rotation='0 45 0'\n src='./ndmvr/keyboardControls/keyboard1.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 30 0 -60; to: 30 0 -30; delay: 400; dur: 800; easing: linear;'\n rotation='0 -45 0'\n src='./ndmvr/keyboardControls/keyboard2.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 30 0 60; to: 30 0 30; delay: 600; dur: 800; easing: linear;'\n rotation=' 0 45 0'\n src='./ndmvr/keyboardControls/keyboard3.png'\n />\n </a-entity>\n )\n } else {\n return (\n <a-entity\n position={\n prevPosition === null\n ? `0 ${offset} 0`\n : `${prevPosition.x} ${offset} ${prevPosition.z}`\n }\n animation__rotation={`property: rotation; to: 0 ${rotation} 0; dur: 1000; easing: linear;`}\n >\n <a-entity\n geometry='primitive: box; width: 50; height: 10; depth: 0.1;'\n position='-30 28 0'\n rotation='45 90 0'\n material='color: white'\n >\n <a-text\n color='black'\n width='50'\n // value='Press Button X to show projection panels'\n value={\n showProjection\n ? 'Press Button X to show help panels'\n : 'Press Button X to show projection panels'\n }\n position='-20 2.8 1'\n />\n <a-text\n color='black'\n width='50'\n value='Press Button Y to switch to histogram view'\n position='-20 0 1'\n />\n <a-text\n color='black'\n width='50'\n value='Press right Trigger to shift panels'\n position='-20 -2.8 1'\n />\n </a-entity>\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -35 0 60; to: -32 0 32; delay: 0; dur: 800; easing: linear;'\n rotation='-10 -45 0'\n src='./ndmvr/oculusControls/oculus.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: -35 0 -60; to: -32 0 -32; delay: 200; dur: 800; easing: linear;'\n rotation='10 45 0'\n src='./ndmvr/oculusControls/oculus2.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 35 0 -60; to: 32 0 -32; delay: 400; dur: 800; easing: linear;'\n rotation='10 -45 0'\n src='./ndmvr/oculusControls/oculus1.png'\n />\n <a-box\n scale='80 50 2'\n animation__position='property: position; from: 35 0 60; to: 32 0 32; delay: 600; dur: 800; easing: linear;'\n rotation='-10 45 0'\n src='./ndmvr/oculusControls/oculus3.png'\n />\n </a-entity>\n )\n }\n }\n\n const hideMappingBanner = () => {\n const banner = document.getElementById('th-mapping')\n if (banner !== undefined) {\n banner.setAttribute('material', 'opacity', 0)\n }\n }\n\n const showMappingBanner = () => {\n const banner = document.getElementById('th-mapping')\n if (banner !== undefined) {\n banner.setAttribute('material', 'opacity', 1)\n }\n }\n\n useEffect(() => {\n subscription = cameraSubject\n .getCameraSubject()\n .subscribe(handleSubscription)\n\n return () => subscription.unsubscribe()\n }, [show, showProjection, rotation])\n\n useEffect(() => {\n const camera = document.getElementById('camera')\n if (!show) {\n camera.object3D.position.y = 1.6\n if (prevPosition !== null) {\n camera.object3D.position.x = prevPosition.x\n camera.object3D.position.z = prevPosition.z\n camera.object3D.position.y = prevPosition.y\n }\n showMappingBanner()\n } else {\n setPrevPosition({\n x: camera.object3D.position.x,\n y: camera.object3D.position.y,\n z: camera.object3D.position.z\n })\n camera.object3D.position.y = camera.object3D.position.y + offset\n hideMappingBanner()\n }\n }, [show, inputDevice])\n\n useEffect(() => {\n if (showProjection) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n 'bannerId_1',\n '500px',\n '400px'\n )\n }\n }, [showProjection])\n // testing the branch\n\n const renderActiveTool = () => {\n switch (activeTool) {\n case 1:\n activeToolHighlight = '-0.675 -0.825 -1'\n break\n case 2:\n activeToolHighlight = '-0.525 -0.825 -1'\n break\n case 3:\n activeToolHighlight = '-0.375 -0.825 -1'\n\n break\n case 4:\n activeToolHighlight = '-0.225 -0.825 -1'\n break\n case 5:\n activeToolHighlight = '-0.075 -0.825 -1'\n break\n case 6:\n activeToolHighlight = '0.075 -0.825 -1'\n break\n case 7:\n activeToolHighlight = '0.225 -0.825 -1'\n break\n case 8:\n activeToolHighlight = '0.375 -0.825 -1'\n break\n case 9:\n activeToolHighlight = '0.525 -0.825 -1'\n break\n case 0:\n activeToolHighlight = '0.675 -0.825 -1'\n break\n }\n\n const tools = ['info', 2, 3, 4, 5, 6, 7, 8, 9, 0]\n let toolNumXPos = -0.825\n\n return (\n <React.Fragment>\n {tools.map((tool) => {\n let txt\n toolNumXPos = toolNumXPos + 0.15\n const txtPos = String(toolNumXPos + ' -0.78' + ' -1')\n if (tools.indexOf(tool) + 1 === activeTool)\n txt = String(\n 'value: ' + tool + '; color: #0F52BA;width:1.4;align:center'\n )\n else\n txt = String(\n 'value: ' + tool + '; color: black;width:1;align:center'\n )\n\n return (\n <a-entity\n key={tools.indexOf(tool)}\n text={txt}\n position={txtPos}\n material='shader: flat;'\n ></a-entity>\n )\n })}\n\n <a-entity\n geometry='primitive: plane; height: 0.007; width: 0.17'\n position={activeToolHighlight}\n material='color: #0F52BA;'\n ></a-entity>\n </React.Fragment>\n )\n }\n\n const renderOculusControls = () => {\n return (\n <React.Fragment>\n <a-entity\n laser-controls='hand: right'\n raycaster='objects: .clickable; \n lineOpacity: 0.5; \n far: 20;'\n ></a-entity>\n <a-entity oculus-touch-controls='hand: left' left-controller-logging />\n <a-entity\n oculus-touch-controls='hand: right'\n right-controller-logging\n />\n </React.Fragment>\n )\n }\n\n return (\n <a-entity id='cameraWrapper' rotation='0 -135 0' position='-7 2 -7'>\n {show && !showProjection && renderBannersWithControls()}\n {show && showProjection && renderProjectionsBanners()}\n\n <a-camera\n id='camera'\n look-control\n wasd-controls-enabled='acceleration:=50'\n >\n {/* ////////////HUD/////////// */}\n\n <a-entity\n geometry='primitive: plane; height: 0.2; width: 2'\n position='0 -0.825 -1'\n material='color: #eee;shader: flat;'\n ></a-entity>\n\n <a-entity\n geometry='primitive: plane; height: 0.001; width: 1.75'\n position='0 -0.825 -1'\n material='color: #aaa;shader: flat;'\n ></a-entity>\n\n {activeTool === 1 && (\n <a-entity text={selectedBinData} position='-0.8 0.7 -1' />\n )}\n\n {renderActiveTool()}\n {/* <a-plane width= \"0.5\" \n height =\"0.7\" \n rotation=\"-10 15 10\" \n position=\"-1 -0.3 -0.8\"\n ></a-plane> */}\n {!AFRAME.utils.device.checkHeadsetConnected() && (\n <a-entity\n cursor='fuse: false; fuseTimeout: 2000;'\n raycaster='objects: .clickable; showLine: false; far: 100;'\n animation__click='property: scale; startEvents: click; from: 0.1 0.1 0.1; to: 1.4 1.4 1.4; dur: 150'\n animation__mouseenter='property: scale; startEvents: mouseenter; from: 1 1 1; to: 1.4 1.4 1.4; dur: 180'\n animation__mouseleave='property: scale; startEvents: mouseleave; from: 1.4 1.4 1.4; to: 1 1 1; dur: 180'\n line='color: orange; opacity: 0.5'\n far='100'\n position='0 0 -1'\n geometry='primitive: ring; radiusInner: 0.02; radiusOuter: 0.03'\n material='color: white; shader: flat'\n />\n )}\n </a-camera>\n {AFRAME.utils.device.checkHeadsetConnected() && renderOculusControls()}\n </a-entity>\n )\n}\n\nexport default NdmVrCamera\n","// component to insert data to th3i bin\nimport AFRAME from 'aframe'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite binu TH3 histogram, ktorá umožňuje zmenu atribútov entity.\n * @component binth3\n * @param {string} id - Identifikátor binu\n * @param {number} content - Hodnota optimalizovaného obsahu binu (predvolená 0)\n * @param {number} absoluteContent - Hodnota neoptimalizovaného obsahu binu (predvolená 0)\n * @param {string} binName - Meno binu\n * @param {string} xTitle - Titulok na osi x\n * @param {string} yTitle - Titulok na osi y\n * @param {number} xMin - Súradnica min binu na osi x\n * @param {number} yMin - Súradnica min binu na osi y\n * @param {number} zMin - Súradnica min binu na osi z\n * @param {number} xMax - Súradnica max binu na osi x\n * @param {number} yMax - Súradnica max binu na osi y\n * @param {number} zMax - Súradnica max binu na osi z\n * @param {number} xPos - Realna poloha max binu na osi x\n * @param {number} yPos - Realna poloha max binu na osi y\n * @param {number} zPos - Realna poloha max binu na osi z\n * @param {number} xCenter - Súradnica stredu binu na osi x\n * @param {number} yCenter - Súradnica stredu binu na osi y\n * @param {number} zCenter - Súradnica stredu binu na osi z\n * @param {number} xWidth - Šírka binu na osi x\n * @param {number} yWidth - Šírka binu na osi y\n * @param {number} zWidth - Šírka binu na osi z\n * @param {string} color - Farba binu\n * @param {string} axisX - Farba označení na osi x\n * @param {string} axisY - Farba označení na osi y\n * @param {string} axisZ - Farba označení na osi z\n * @param {string} selectColor - Farba určená za zvolenie binu\n * @param {string} markedColor - Farba určená pre označenie binu (v poli označených binov)\n * @module th2AframeComponent\n */\n\nAFRAME.registerComponent('binth', {\n schema: {\n id: { type: 'string' },\n typeName: { type: 'string' },\n content: { default: 0 },\n absoluteContent: { default: 0 },\n binName: { default: '' },\n xTitle: { type: 'string' },\n yTitle: { type: 'string' },\n zTitle: { type: 'string' },\n xMin: { type: 'number' },\n yMin: { type: 'number' },\n zMin: { type: 'number' },\n xMax: { type: 'number' },\n yMax: { type: 'number' },\n zMax: { type: 'number' },\n xPos: { type: 'number' },\n yPos: { type: 'number' },\n zPos: { type: 'number' },\n xCenter: { type: 'number' },\n yCenter: { type: 'number' },\n zCenter: { type: 'number' },\n xWidth: { type: 'number' },\n yWidth: { type: 'number' },\n zWidth: { type: 'number' },\n color: { type: 'string' },\n axisX: { type: 'string' },\n axisY: { type: 'string' },\n axisZ: { type: 'string' },\n selectColor: { type: 'string' },\n markedColor: { type: 'string' }\n },\n\n init: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: this.data.typeName,\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n zTitle: this.data.zTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n zMin: this.data.zMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n zMax: this.data.zMax,\n xPos: this.data.xPos,\n yPos: this.data.yPos,\n zPos: this.data.zPos,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n zCenter: this.data.zCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n zWidth: this.data.zWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n },\n\n update: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: this.data.typeName,\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n zTitle: this.data.zTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n zMin: this.data.zMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n zMax: this.data.zMax,\n xPos: this.data.xPos,\n yPos: this.data.yPos,\n zPos: this.data.zPos,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n zCenter: this.data.zCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n zWidth: this.data.zWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n }\n})\n","// component for modification aframe entity of histogram\nimport AFRAME from 'aframe'\n// import { setPositioning } from '../utils/histogramFactory'\nimport {\n initialKeyboardController,\n keyReleaseHandlerFunction,\n keyPressHandlerFunction,\n switchDisplayModeOnBin,\n keyboardUpdateCameraReference\n} from '../controllers/keyboardController'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite histogram, ktorá umožňuje zmenu atribútov entity.\n * @component histogram-control\n * @param {Object} histogram - Objekt histogramu, z ktorého je potrebné spraviť projekciu\n * @param {Array} projectionAxes - Pole obsahuje názvy osí, podľa ktorých sa má vytvoriť projekcia\n * @param {Object} projections - Objekt obsahujúci súborovú štruktúru s projekciami\n * @param {Number} projIndex - Index projekcie v poli, ktorá sa má zobraziť\n * @module histogramAframeComponent\n */\n\n// aframe component for positioning histogram in scene\nAFRAME.registerComponent('histogram-control', {\n schema: {\n position: {\n name: 'position',\n xValue: 0,\n yValue: 0,\n zValue: 0\n },\n scale: {\n name: 'scale',\n xValue: 2,\n yValue: 2,\n zValue: 2\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 0,\n zValue: 0\n }\n },\n init: function () {\n const el = this.el\n\n // set controllers\n // setPositioning(el, this.schema)\n initialKeyboardController(this.schema, el)\n // keyboard listeners\n document.addEventListener('keydown', keyPressHandlerFunction)\n document.addEventListener('keyup', keyReleaseHandlerFunction)\n document.addEventListener('wheel', switchDisplayModeOnBin)\n },\n\n update: function () {\n keyboardUpdateCameraReference()\n }\n})\n","// component to change text value of the entity after delay\nimport AFRAME from 'aframe'\n/**\n * A-Frame komponent zabezpečí oneskorené aktualizovanie označenia na entite.\n * @component label-handler\n * @param {string} value - Hodnota označenia, na ktorú sa má aktuálne označenie zmeniť\n * @param {number} delay - Hodnota oneskorenia aktualizácie označenia na entite\n * @module labelHandlerAframeComponent\n */\n\n// aframe component for handle labels on entity\nAFRAME.registerComponent('label-handler', {\n schema: {\n value: { type: 'string' },\n delay: { type: 'number' }\n },\n\n init: function () {\n const el = this.el\n this.value = this.data.value\n el.setAttribute('text', 'value', this.data.value)\n },\n\n update: function () {\n const el = this.el // Entity.\n if (this.value !== this.data.value) {\n setTimeout(() => {\n el.setAttribute('text', 'value', this.data.value)\n }, this.data.delay)\n this.value = this.data.value\n }\n }\n})\n","export default {\n def: {\n colorPalette: [\n '#4b0066',\n '#8300b3',\n '#bb00ff',\n '#cf4dff',\n '#e499ff',\n '#ffffcc',\n '#ffff99',\n '#ffff66',\n '#ffff33',\n '#fcba03'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#4b0066',\n secondary: '#FF3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n fire: {\n colorPalette: [\n '#5b0000',\n '#7b2100',\n '#a23b00',\n '#c84900',\n '#df5900',\n '#f18800',\n '#f1a000',\n '#ffae00',\n '#ffcd19',\n '#ffe159'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#5b0000',\n secondary: '#b000d4'\n },\n font: {\n primary: 'black',\n secondary: 'black'\n }\n },\n nebula: {\n colorPalette: [\n '#13004b',\n '#320065',\n '#4e0085',\n '#6100a5',\n '#7000b8',\n '#9800c6',\n '#ab00c6',\n '#b900d2',\n '#d700da',\n '#ff6efc'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#13004b',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n rainforest: {\n colorPalette: [\n '#005b01',\n '#007b23',\n '#00a23d',\n '#00c84c',\n '#00df5c',\n '#00f18b',\n '#00ffb1',\n '#19ffd0',\n '#a6fffe',\n '#56fffe'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#005b01',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n nature: {\n colorPalette: [\n '#4a691a',\n '#5e8425',\n '#79a834',\n '#91c640',\n '#9ed64b',\n '#a8dc59',\n '#b0e166',\n '#bfeb7c',\n '#d7fba2',\n '#deffad'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#4a691a',\n secondary: '#b000d4'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n water: {\n colorPalette: [\n '#00545a',\n '#00717a',\n '#0097a2',\n '#00bac8',\n '#00cede',\n '#00dff0',\n '#00edff',\n '#45f2ff',\n '#7ef6ff',\n '#bdfaff'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#00545a',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n sunflower: {\n colorPalette: [\n '#1e3600',\n '#2e4d00',\n '#507001',\n '#91a004',\n '#b4bb06',\n '#d2d309',\n '#eeed0f',\n '#ffff28',\n '#ffff85',\n '#ffffc2'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#1e3600',\n secondary: '#ff3700'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n blood: {\n colorPalette: [\n '#470101',\n '#6e0101',\n '#800b0b',\n '#940c0c',\n '#a30000',\n '#bd0909',\n '#e01f1f',\n '#d43b3b',\n '#db5e5e',\n '#f78888'\n ],\n axis: {\n x: '#ad0c00',\n y: '#0206de',\n z: '#007d1d'\n },\n accent: {\n primary: '#470101',\n secondary: '#f6ff00'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n magma: {\n colorPalette: [\n '#dbff1d',\n '#d5e814',\n '#d5d007',\n '#cc9b00',\n '#b87600',\n '#9c4a00',\n '#812f00',\n '#661900',\n '#661420',\n '#2b0000'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#2b0000',\n secondary: '#ae2000'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n jupiter: {\n colorPalette: [\n '#00340f',\n '#00344f',\n '#006e3a',\n '#00976a',\n '#26efd0',\n '#9c4a00',\n '#9c4a00',\n '#812f00',\n '#661900',\n '#2b0000'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#00340f',\n secondary: '#e3ff5b'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n },\n magic: {\n colorPalette: [\n '#342000',\n '#6e5e00',\n '#888500',\n '#919700',\n '#8dbe00',\n '#caef26',\n '#cf6e85',\n '#b300b8',\n '#6b0090',\n '#3b0066'\n ],\n axis: {\n x: '#8a0000',\n y: '#03017a',\n z: '#015e03'\n },\n accent: {\n primary: '#342000',\n secondary: '#c85bff'\n },\n font: {\n // primary text titles\n primary: 'black',\n // secondary labels and atc\n secondary: 'black'\n }\n }\n}\n","/** @module ThemeProvider */\n/* object provides all necessary color palettes and schemes */\nimport palette from './theme'\n\n/**\n * Provider pre zabezpečenie všetkých potrebných farieb a štýlov.\n * @class\n */\nexport default class ThemeProvider {\n /**\n * Konštruktor pre nastavenie všetkých potrebných atribútov objektu.\n * @param {Object} theme - Objekt obsahujúci všetky potrebné palety a údaje o témach a fontoch\n * @return {void}\n */\n constructor(theme) {\n if (palette[theme]) {\n // set selected theme\n this.xAxis = palette[theme].axis.x\n this.yAxis = palette[theme].axis.y\n this.zAxis = palette[theme].axis.z\n this.palette = palette[theme].colorPalette\n this.primaryAccent = palette[theme].accent.primary\n this.secondaryAccent = palette[theme].accent.secondary\n this.primaryFont = palette[theme].font.primary\n this.secondaryFont = palette[theme].font.secondary\n } else {\n // set default theme\n this.xAxis = palette.def.axis.x\n this.yAxis = palette.def.axis.y\n this.zAxis = palette.def.axis.z\n this.palette = palette.def.colorPalette\n this.primaryAccent = palette.def.accent.primary\n this.secondaryAccent = palette.def.accent.secondary\n this.primaryFont = palette.def.font.primary\n this.secondaryFont = palette.def.font.secondary\n }\n }\n\n /**\n * Získanie kompetentnej farby pre entitu osi.\n * @param {string} axis - Označenie osi\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getAxisColor(axis) {\n if (axis === 'x' || axis === 'X') return this.xAxis\n if (axis === 'y' || axis === 'Y') return this.yAxis\n if (axis === 'z' || axis === 'Z') return this.zAxis\n return null\n }\n\n /**\n * Získanie hlavnej farby pre zvýraznenie a označenie.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getPrimaryAccentColor() {\n return this.primaryAccent\n }\n\n /**\n * Získanie sekundárnej farby pre zvýraznenie a označenie.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getSecondaryAccentColor() {\n return this.secondaryAccent\n }\n\n /**\n * Získanie hlavnej farby písma.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getPrimaryFontColor() {\n return this.primaryFont\n }\n\n /**\n * Získanie sekundárnej farby písma.\n * @return {string} - Vracia null alebo aktuálnu farbu pre entitu\n */\n getSecondaryFontColor() {\n return this.secondaryFont\n }\n\n // set bin colors get color\n /**\n * Získanie kompetentnej farby pre bin podľa obsahu binu.\n * @param {number} content - Hodnota definujúca obsah binu\n * @return {string} - Vracia null alebo aktuálnu farbu pre bin, ktorá náleží binu podľa obsahu\n */\n getBinColor(content) {\n const fullContent = 1\n\n let color = this.palette[0]\n\n if (content >= fullContent) {\n return this.palette[9]\n }\n\n const difference = 0.12\n let sum = difference\n\n // find right color\n for (let i = 0; i <= 9; i++) {\n if (content <= sum) {\n color = this.palette[i]\n break\n }\n sum += difference\n }\n // return right color from palette\n return color\n }\n}\n","/** @module HistogramReactFactory */\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport 'aframe'\nimport ThemeProvider from '../resources/themeProvider'\n\n/**\n * Vytvorenie objektu pre generovanie entít histogramu.\n * @class HistogramReactFactory - Histogram generator\n */\nexport default class HistogramReactFactory {\n #id = ''\n #selectedBins = []\n #histogram = null\n #type = ''\n #projections = null\n #themeProvider = null\n // current offsets\n #xOffset = 1\n #yOffset = 1\n #zOffset = 1\n // current histogram limits\n #xLimit = 0\n #yLimit = 0\n #zLimit = 0\n // bin scales\n #xWidth = 1\n #yWidth = 1\n #zWidth = 1\n // range\n #range = 8\n // shiftin scene (shift to initial position)\n #labels = {\n xInitial: 0,\n yInitial: 0,\n zInitial: 0\n }\n\n // constants\n #contentScale = 1\n #minDisplayedContent = 0\n #binScaleCoef = 2\n\n // option for animation\n #shift = {\n xOffset: 0,\n yOffset: 0,\n zOffset: 0\n }\n\n // older elements\n #previousBins = []\n\n /**\n * Inicializácia objektu pre vytváranie elementov histogramu.\n * @param {string} uniqueName - Identifikátor histogramu\n * @param {Object} histogram - Objekt histogramu určený na vizualizáciu\n * @param {Object} section - Objekt definujúci ofsety a rozsah histogramu\n * @param {number} range - Rozsah, ak sa nedefinujú ofsety ale len rozsah\n * @param {Object} projections - Objekt definujúci súborovú štruktúru s projekciami\n * @param {string} theme - string Definujúci názov témy, ktorá má byť použitá pri vizualizovaní\n * @return {void}\n */\n constructor(uniqueName, histogram, section, range, projections, theme) {\n this.initializeFactory(\n uniqueName,\n histogram,\n section,\n range,\n projections,\n theme\n )\n }\n\n /**\n * Inicializácia objektu pre vytváranie elementov histogramu.\n * @param {string} uniqueName - Identifikátor histogramu\n * @param {Object} histogram - Objekt histogramu určený na vizualizáciu\n * @param {Object} section - Objekt definujúci ofsety a rozsah histogramu\n * @param {number} range - Rozsah, ak sa nedefinujú ofsety ale len rozsah\n * @param {Object} projections - Objekt definujúci súborovú štruktúru s projekciami\n * @param {string} theme - String definujúci názov témy, ktorá má byť použitá pri vizualizovaní\n * @return {void}\n */\n initializeFactory(uniqueName, histogram, section, range, projections, theme) {\n this.setUniqueName(uniqueName)\n this.setTheme(theme)\n this.setHistogram(histogram, projections)\n this.setSection(section)\n this.setRange(range)\n }\n\n /**\n * Nastaví nove unikátne meno pre histogram\n */\n setUniqueName(uniqueName) {\n this.#id = uniqueName\n }\n\n /**\n * Nastaví ofsety pre zobrazenie sekcie histogramu\n */\n setSection(section) {\n // set current section offsets\n if (section !== null && section !== undefined) {\n if (section.xOffset)\n this.#xOffset = this.#checkOffsetValue(section.xOffset, this.#xLimit)\n if (section.yOffset)\n this.#yOffset = this.#checkOffsetValue(section.yOffset, this.#yLimit)\n }\n // define third dimension for th3 histogram\n if (this.#histogram._typename.includes('TH3')) {\n // set current section offsets\n if (section !== null && section !== undefined) {\n if (section.zOffset)\n this.#zOffset = this.#checkOffsetValue(section.zOffset, this.#zLimit)\n }\n }\n }\n\n /**\n * Nastaví histogram a všetky potrebné atribúty\n */\n setHistogram(histogram, projections) {\n this.#projections = projections\n this.#histogram = histogram\n this.#type = histogram._typename\n // set current limits\n this.#xLimit = histogram.fXaxis.fNbins\n this.#yLimit = histogram.fYaxis.fNbins\n // bin scales\n this.#xWidth =\n (histogram.fXaxis.fXmax - histogram.fXaxis.fXmin) /\n histogram.fXaxis.fNbins\n this.#yWidth =\n (histogram.fYaxis.fXmax - histogram.fYaxis.fXmin) /\n histogram.fYaxis.fNbins\n // bin shift in the scene\n this.#labels.xInitial = histogram.fXaxis.fXmin\n this.#labels.yInitial = histogram.fYaxis.fXmin\n\n this.#xOffset = this.#checkOffsetValue(this.#xOffset, this.#xLimit)\n this.#yOffset = this.#checkOffsetValue(this.#yOffset, this.#yLimit)\n\n // define third dimension for th3 histogram\n if (histogram._typename.includes('TH3')) {\n // set current limits\n this.#zLimit = histogram.fZaxis.fNbins\n // bin scales\n this.#zWidth = histogram.fZaxis.fXmax / histogram.fZaxis.fNbins\n // bin shift in the scene\n this.#labels.zInitial = histogram.fZaxis.fXmin\n\n this.#zOffset = this.#checkOffsetValue(this.#zOffset, this.#zLimit)\n }\n }\n\n /**\n * Nastaví range pre požet zobrazených binoch v danom rozmere\n */\n setRange(range) {\n if (range) {\n if (range < 4) this.#range = 4\n this.#range = range\n }\n }\n\n /**\n * Nastaví tému pre vizualizáciu\n */\n setTheme(theme) {\n this.#themeProvider = new ThemeProvider(theme)\n }\n\n /**\n * Vracia atribút objektu offset x.\n * @return {number} offsetX - Offset na osi x\n */\n getXOffset = () => {\n return this.#xOffset\n }\n\n /**\n * Vracia atribút objektu offset y.\n * @return {number} offsetX - Offset na osi y\n */\n getYOffset = () => {\n return this.#yOffset\n }\n\n /**\n * Vracia atribút objektu offset y.\n * @return {number} offsetX - Offset na osi y\n */\n getZOffset = () => {\n return this.#zOffset\n }\n\n /**\n * Vracia atribút objektu range.\n * @return {number} range - Vracia rozsah sekcie\n */\n getRange = () => {\n return this.#range\n }\n\n /**\n * Funkcia overí korektnosť hodnoty offsetu.\n * Porovná aktuálny upravený offset s limitom na danej osi.\n * @param {number} offsetValue - Hodnota offsetu, ktorú je potrebné overiť\n * @param {number} limit - Hodnota offsetu, ktorá predstavuje limit pre danú os.\n * @return {number} currOffset - Vracia upravený offset\n */\n #checkOffsetValue = (offsetValue, limit) => {\n let currOffset =\n offsetValue > limit - this.#range ? limit - this.#range : offsetValue\n\n if (currOffset < 1) {\n currOffset = 1\n }\n return currOffset\n }\n\n /**\n * Funkcia overí stav binu.\n * @param {string} binId - Identifikátor binu, ktorý je potrebné overiť\n * @return {boolean} state - Vracia True ak je bin v poli označených binov, True ak nie je v poli označených binov\n */\n #checkBinState = (binId) => {\n const updatedArray = this.#selectedBins.filter((item) => item.id === binId)\n return updatedArray.length !== 0\n }\n\n /**\n * Funkcia vytvorí entitu reprezentujúcu označenie na osi.\n * @param {string} id - Identifikátor, ktorým bude disponovať vytvorená entita\n * @param {number} positionX - X pozícia entity\n * @param {number} positionY - Y pozícia entity\n * @param {number} positionZ - Z pozícia entity\n * @param {number} rotationX - X rotácia entity\n * @param {number} rotationY - Y rotácia entity\n * @param {number} rotationZ - Z rotácia entity\n * @param {number} width - Šírka entity\n * @param {number} height - Výška entity\n * @param {number} value - Hodnota definujúca časové omeškanie pre zobrazenie označenia v entite\n * @param {string} color - HEX hodnota farby entity\n * @param {string} fontColor - HEX hodnota farby fontu entity\n * @return {HTMLElement} entita - Vytvorená entita\n */\n #createAxisEntity = (\n id,\n positionX,\n positionY,\n positionZ,\n rotationX,\n rotationY,\n rotationZ,\n width,\n height,\n value,\n color,\n fontColor\n ) => {\n return {\n key: id + this.#id,\n geometry: {\n primitive: 'plane',\n width: width,\n height: height\n },\n text: {\n color: fontColor,\n width: 4,\n height: 'auto'\n },\n labelHandler: {\n value: value,\n delay: 500\n },\n rotation: {\n x: rotationX,\n y: rotationY,\n z: rotationZ\n },\n material: {\n color: color\n },\n animation: {\n fromX: positionX + this.#shift.xOffset,\n fromY: positionY + this.#shift.zOffset,\n fromZ: positionZ + this.#shift.yOffset,\n toX: positionX,\n toY: positionY,\n toZ: positionZ\n }\n } /* (\n <a-entity\n key={id + this.#id}\n geometry={`primitive: plane; width:${width}; height:${height};`}\n text={`color: ${fontColor}; width: 4; height:auto; align:center;`}\n label-handler={`value: ${value}; delay:${500}`}\n rotation={`${rotationX} ${rotationY} ${rotationZ}`}\n // position={`${positionX} ${positionY} ${positionZ}`}\n material={`color: ${color};`}\n animation='property: text.width; from: 0; to: 4; dur: 1000;'\n animation__1='property: material.opacity; from: 0; to: 0.8; dur: 1500;'\n animation__2={`property: position; from: ${\n positionX + this.#shift.xOffset\n } ${positionY + this.#shift.zOffset} ${\n positionZ + this.#shift.yOffset\n }; to: ${positionX} ${positionY} ${positionZ}; dur: 1005;`}\n />\n ) */\n }\n\n /**\n * Funkcia na základe atribútov objektu vytvorí všetky potrebné entity pre histogram TH3.\n * @return {Object} elements - Vracia objekt obsahujúci roztriedené všetky potrebné entity histogramu pre VR\n */\n #createTH3Histogram = () => {\n // get selected bins from local storage\n this.#selectedBins = localStorageService.getBinsFromLocalStorage()\n\n // react elements to draw the histograms\n const elements = {\n type: 'TH3',\n bins: [],\n labels: [],\n banners: [],\n ground: {},\n titles: [],\n axisLabels: []\n }\n // variables for rendering the histogram\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let zcenter, zmin, zmax, zwidth\n const binName = ''\n let absoluteContent\n let c\n let count = 0\n\n // load th3 limits from localstorage\n // const binScale = ndmVrStorage.loadBinScale('TH3')\n // console.log(binScale)\n\n const maxXLength =\n this.#xOffset + this.#range > this.#xLimit\n ? this.#xLimit\n : this.#xOffset + this.#range\n const maxYLength =\n this.#yOffset + this.#range > this.#yLimit\n ? this.#yLimit\n : this.#yOffset + this.#range\n const maxZLength =\n this.#zOffset + this.#range > this.#zLimit\n ? this.#zLimit\n : this.#zOffset + this.#range\n\n const xTitle = this.#histogram.fXaxis.fTitle\n const yTitle = this.#histogram.fYaxis.fTitle\n const zTitle = this.#histogram.fZaxis.fTitle\n const xLabels = this.#histogram.fXaxis.fLabels\n ? this.#histogram.fXaxis.fLabels.arr\n : []\n const yLabels = this.#histogram.fYaxis.fLabels\n ? this.#histogram.fYaxis.fLabels.arr\n : []\n const zLabels = this.#histogram.fZaxis.fLabels\n ? this.#histogram.fZaxis.fLabels.arr\n : []\n\n const currentBinScales = []\n\n // generate react elements of the bins\n for (let iz = this.#zOffset; iz <= maxZLength; iz++)\n for (let iy = this.#yOffset; iy <= maxYLength; iy++)\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n xcenter = this.#histogram.fXaxis.GetBinCenter(ix)\n xmin = this.#histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = this.#histogram.fYaxis.GetBinCenter(iy)\n ymin = this.#histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n zcenter = this.#histogram.fZaxis.GetBinCenter(iz)\n zmin = this.#histogram.fZaxis.GetBinLowEdge(iz)\n zmax = zcenter + (zcenter - zmin)\n zwidth = zmax - zmin\n absoluteContent = this.#histogram.getBinContent(ix, iy, iz)\n c = this.#optimizeBinContent(\n absoluteContent,\n this.#histogram.fMaximum\n )\n\n // set a-frame entity box\n // set children component\n if (c > this.#minDisplayedContent) {\n let size = c\n if (c < 0.15) size = 0.15\n\n const color = this.#themeProvider.getBinColor(c)\n // check bin status\n const id =\n this.#id +\n xmin +\n 'th3' +\n xmax +\n 'th3' +\n zmin +\n 'th3' +\n zmax +\n 'th3' +\n ymin +\n 'th3' +\n ymax\n let markedColor\n if (this.#checkBinState(id)) {\n markedColor = this.#themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n typeName: 'TH2'\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: ${zTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${zmin};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${zmax};\n xPos: ${ix};\n yPos: ${iy};\n zPos: ${iz};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n zCenter: ${zcenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${zwidth};\n markedColor: ${markedColor};\n selectColor: ${this.#themeProvider.getSecondaryAccentColor()};\n axisX: ${this.#themeProvider.getAxisColor('x')};\n axisY: ${this.#themeProvider.getAxisColor('y')};\n axisZ: ${this.#themeProvider.getAxisColor('z')}`\n\n const width = size * 0.8\n // const posX = (ix - 1) / this.#xWidth\n // const posY = (iz - 1) / this.#zWidth + 0.2\n // const posZ = (iy - 1) / this.#yWidth\n const posX = ix - 1\n const posY = iz - 1\n const posZ = iy - 1\n elements.bins[count] = {\n id: id,\n color: color,\n binData: binData,\n content: absoluteContent,\n animation: {\n fromWidth: this.#getPreviousBinScales(id),\n fromHeight: this.#getPreviousBinScales(id),\n fromDepth: this.#getPreviousBinScales(id),\n toWidth: width,\n toHeight: width,\n toDepth: width\n },\n animation2: {\n fromX: posX + this.#shift.xOffset,\n fromY: posY + this.#shift.zOffset,\n fromZ: posZ + this.#shift.yOffset,\n toX: posX,\n toY: posY,\n toZ: posZ\n },\n animation3: {\n fromColor: this.#getPreviousBinColor(id),\n toColor: markedColor\n }\n }\n /* (\n <a-box\n key={id}\n class='clickable'\n material={`color: ${markedColor};`}\n binth3={binData}\n // position={`${posX} ${posY} ${posZ}`}\n // height={width}\n // width={width}\n // depth={width}\n mouseevent\n animation={`property: scale; from: ${this.#getPreviousBinScales(\n id\n )} ${this.#getPreviousBinScales(\n id\n )} ${this.#getPreviousBinScales(\n id\n )}; to: ${width} ${width} ${width}; dur: 1500; easing: linear;`}\n // animation={`property: scale; to: ${width} ${width} ${width}; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.75; dur: 2600;'\n animation__2={`property: position; from: ${\n posX + this.#shift.xOffset\n } ${posY + this.#shift.zOffset} ${\n posZ + this.#shift.yOffset\n }; to: ${posX} ${posY} ${posZ}; dur: 1000;`}\n animation__3={`property: material.color; from: ${this.#getPreviousBinColor(\n id\n )}; to: ${markedColor}; dur: 2600;`}\n />\n )\n */\n currentBinScales[count] = {\n key: id,\n scale: width,\n color: markedColor\n }\n }\n count++\n }\n\n this.#previousBins = currentBinScales\n // create arrays for labels\n const normalAxis = []\n const reversedAxis = []\n // set axis\n count = 0\n for (let iz = this.#yOffset; iz <= maxYLength; iz++) {\n normalAxis[count] = this.#createAxisEntity(\n 50000 + count,\n -2.5 + this.#xOffset,\n this.#zOffset - 1,\n iz - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `${\n yLabels[iz - 1]\n ? yLabels[iz - 1].fString\n : Math.round(\n (this.#labels.yInitial + iz - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 55000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n iz - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `${\n yLabels[iz - 1]\n ? yLabels[iz - 1].fString\n : Math.round(\n (this.#labels.yInitial + iz - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n }\n // add z label\n elements.axisLabels[0] = {\n id: 'leftLabel',\n key: 6000 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 270,\n z: 0\n },\n animation: {\n fromX: this.#xOffset - 4 + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset + 0.5 + this.#shift.yOffset,\n toX: this.#xOffset - 4,\n toY: this.#zOffset - 1,\n toZ: this.#yOffset + 0.5\n }\n } /* (\n <a-entity\n id='leftLabel'\n key={60000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n /* position={`${this.#xOffset - 4} ${this.#zOffset - 1} ${\n this.#yOffset + 0.5\n }`}\n animation={`property: position; from: ${\n this.#xOffset - 4 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n this.#yOffset + 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 4} ${this.#zOffset - 1} ${\n this.#yOffset + 0.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[1] = {\n id: 'rightLabel',\n key: 64001 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 90,\n z: 0\n },\n animation: {\n fromX: maxXLength + 2 + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: maxYLength - 2.5 + this.#shift.yOffset,\n toX: maxXLength + 2,\n toY: this.#zOffset - 1,\n toZ: maxYLength - 2.5\n }\n } /* (\n <a-entity\n id='rightLabel'\n key={65000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n // position={`${maxXLength + 2} ${this.#zOffset - 1} ${maxYLength - 2.5}`}\n animation={`property: position; from: ${\n maxXLength + 2 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n maxYLength - 2.5 + this.#shift.yOffset\n }; to: ${maxXLength + 2} ${this.#zOffset - 1} ${\n maxYLength - 2.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n // generate x and y axis\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n normalAxis[count] = this.#createAxisEntity(\n 70000 + count,\n ix - 1,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 270,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial + ix - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 75000 + count,\n ix - 1,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 90,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial + ix - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n }\n // add x label\n elements.axisLabels[2] = {\n id: 'downLabel',\n key: 84002 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 180,\n z: 0\n },\n animation: {\n fromX: this.#xOffset + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset - 4 + this.#shift.yOffset,\n toX: this.#xOffset,\n toY: this.#zOffset - 1,\n toZ: this.#yOffset - 4\n }\n } /* (\n <a-entity\n id='downLabel'\n key={80000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n // position={`${this.#xOffset} ${this.#zOffset - 1} ${this.#yOffset - 4}`}\n animation={`property: position; from: ${\n this.#xOffset + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n this.#yOffset - 4 + this.#shift.yOffset\n }; to: ${this.#xOffset} ${this.#zOffset - 1} ${\n this.#yOffset - 4\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[3] = {\n id: 'upLabel',\n key: 85003 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 0,\n z: 0\n },\n animation: {\n fromX: maxXLength - 2.5 + this.#shift.xOffset,\n fromY: this.#zOffset - 1 + this.#shift.zOffset,\n fromZ: maxYLength + 2 + this.#shift.yOffset,\n toX: maxXLength - 2.5,\n toY: this.#zOffset - 1,\n toZ: maxYLength + 2\n }\n } /* (\n <a-entity\n id='upLabel'\n key={85000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n // position={`${maxXLength - 2.5} ${this.#zOffset - 1} ${maxYLength + 2}`}\n animation={`property: position; from: ${\n maxXLength - 2.5 + this.#shift.xOffset\n } ${this.#zOffset - 1 + this.#shift.zOffset} ${\n maxYLength + 2 + this.#shift.yOffset\n }; to: ${maxXLength - 2.5} ${this.#zOffset - 1} ${\n maxYLength + 2\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n // y axis\n normalAxis[count] = this.#createAxisEntity(\n 90000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 91000 + count,\n maxXLength + 0.5,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 90,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n normalAxis[count] = this.#createAxisEntity(\n 92000 + count,\n this.#xOffset - 2.5,\n this.#zOffset - 1,\n maxYLength + 0.5,\n 270,\n 270,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 93000 + count,\n this.#xOffset - 2.5,\n this.#zOffset - 1,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `${\n zLabels[this.#zOffset - 1]\n ? zLabels[this.#zOffset - 1].fString\n : Math.round(\n (this.#labels.zInitial + this.#zOffset - 1 + Number.EPSILON) * 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n // add y label\n elements.axisLabels[4] = {\n id: 'upLabel1',\n key: 95004 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 270,\n z: 90\n },\n animation: {\n fromX: this.#xOffset - 1.5 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset - 2 + this.#shift.yOffset,\n toX: this.#xOffset - 1.5,\n toY: maxZLength - 1,\n toZ: this.#yOffset - 2\n }\n } /* (\n <a-entity\n key={95000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${270} ${90}`}\n /* position={`${this.#xOffset - 1.5} ${maxZLength - 1} ${\n this.#yOffset - 2\n }`}\n animation={`property: position; from: ${\n this.#xOffset - 1.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n this.#yOffset - 2 + this.#shift.yOffset\n }; to: ${this.#xOffset - 1.5} ${maxZLength - 1} ${\n this.#yOffset - 2\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[5] = {\n id: 'upLabel2',\n key: 100005 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 90,\n z: 90\n },\n animation: {\n fromX: maxXLength - 0.5 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: maxYLength + this.#shift.yOffset,\n toX: maxXLength - 0.5,\n toY: maxZLength - 1,\n toZ: maxYLength\n }\n } /* (\n <a-entity\n key={100000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${90} ${90}`}\n // position={`${maxXLength - 0.5} ${maxZLength - 1} ${maxYLength}`}\n animation={`property: position; from: ${\n maxXLength - 0.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n maxYLength + this.#shift.yOffset\n }; to: ${maxXLength - 0.5} ${maxZLength - 1} ${maxYLength}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[6] = {\n id: 'upLabel3',\n key: 105006 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 360,\n z: 90\n },\n animation: {\n fromX: this.#xOffset - 2 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: maxYLength - 0.5 + this.#shift.yOffset,\n toX: this.#xOffset - 2,\n toY: maxZLength - 1,\n toZ: maxYLength - 0.5\n }\n } /* (\n <a-entity\n key={105000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${360} ${90}`}\n // position={`${this.#xOffset - 2} ${maxZLength - 1} ${maxYLength - 0.5}`}\n animation={`property: position; from: ${\n this.#xOffset - 2 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n maxYLength - 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 2} ${maxZLength - 1} ${\n maxYLength - 0.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[7] = {\n id: 'upLabel4',\n key: 105007 + this.#id,\n text: {\n value: zTitle,\n color: this.#themeProvider.getAxisColor('y')\n },\n rotation: {\n x: 0,\n y: 180,\n z: 90\n },\n animation: {\n fromX: maxXLength - 0.5 + this.#shift.xOffset,\n fromY: maxZLength - 1 + this.#shift.zOffset,\n fromZ: this.#yOffset - 1.5 + this.#shift.yOffset,\n toX: maxXLength - 0.5,\n toY: maxZLength - 1,\n toZ: this.#yOffset - 1.5\n }\n } /* (\n <a-entity\n key={110000 + count + this.#id}\n text={`value: ${zTitle}; color: ${this.#themeProvider.getAxisColor(\n 'y'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${0} ${180} ${90}`}\n /* position={`${maxXLength - 0.5} ${maxZLength - 1} ${\n }`}\n animation={`property: position; from: ${\n maxXLength - 0.5 + this.#shift.xOffset\n } ${maxZLength - 1 + this.#shift.zOffset} ${\n this.#yOffset - 1.5 + this.#shift.yOffset\n }; to: ${maxXLength - 0.5} ${maxZLength - 1} ${\n this.#yOffset - 1.5\n }; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n\n // add histogram title\n // elements.titles[0] = {\n // key: 150000 + this.#id,\n // text: {\n // value: this.#histogram.fTitle,\n // color: this.#themeProvider.getPrimaryFontColor()\n // },\n // rotation: {\n // x: 0,\n // y: 123,\n // z: 0\n // },\n // position: {\n // x: this.#xOffset - 90,\n // y: maxZLength + 16.5,\n // z: this.#yOffset + 90\n // },\n // innerText: {\n // value: 'Press V to show projections or controls',\n // color: this.#themeProvider.getPrimaryFontColor()\n // }\n // }\n /* \n (\n <a-entity\n key={115000 + count + this.#id}\n text={`value: ${\n this.#histogram.fTitle\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 270; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${this.#xOffset - 90} ${maxZLength + 16.5} ${\n this.#yOffset + 90\n }`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press V to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) \n // add file title\n elements.titles[1] = {\n key: 120001 + this.#id,\n text: {\n value: this.#histogram.fName,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 330,\n z: 0\n },\n position: {\n x: this.#xOffset + 120,\n y: maxZLength + 16.5,\n z: this.#yOffset - 70\n },\n innerText: {\n value: 'Press buttonY to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={120000 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fName\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + 120} ${maxZLength + 16.5} ${\n this.#yOffset - 70\n }`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press buttonY to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) */\n count++\n const bannerWidthX =\n this.#range > this.#xLimit ? this.#xLimit + 1 : this.#range\n const bannerWidthY =\n this.#range > this.#yLimit ? this.#yLimit + 1 : this.#range\n elements.ground = {\n key: 125000 + count + this.#id,\n scale: {\n width: bannerWidthX + 8,\n height: 0.2,\n depth: bannerWidthY + 8\n },\n animation: {\n fromX: this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset,\n fromY: this.#zOffset - 1.5 + this.#shift.zOffset,\n fromZ: this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset,\n toX: this.#xOffset + bannerWidthX * 0.5 - 1,\n toY: this.#zOffset - 1.5,\n toZ: this.#yOffset + bannerWidthY * 0.5 - 0.5\n }\n } /* (\n <a-box\n key={125000 + count + this.#id}\n width={bannerWidthX + 8}\n material='color: #171717'\n height={0.2}\n depth={bannerWidthY + 8}\n // position={`${this.#xOffset + 2.5} -0.5 ${this.#yOffset + 2.5}`}\n animation={`property: position; from: ${\n this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset\n } ${this.#zOffset - 1.5 + this.#shift.zOffset}\n ${this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset};\n to: ${this.#xOffset + bannerWidthX * 0.5 - 1} ${this.#zOffset - 1.5} ${\n this.#yOffset + bannerWidthY * 0.5 - 0.5\n }dur: 1100;`}\n />\n ) */\n // add banner\n /*\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th3-banner'\n text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + this.#range / 2 + 2.5} ${\n this.#zOffset + this.#range / 2 + 1.5\n } ${maxYLength + 8}`}\n >\n <a-entity rotation='0 180 0' position='0 6 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n // add banner with mappings\n count++\n elements.banners[1] = {\n key: 130000 + count + this.#id,\n id: 'th-mapping',\n geometry: {\n width: 1,\n height: 15,\n depth: 22\n },\n position: {\n x: maxXLength + 8,\n y: this.#zOffset + this.#range / 2 + 0.5,\n z: this.#yOffset + this.#range / 2 + 2.5\n },\n material: {\n color: '#ffffff',\n transparent: true\n }\n } /* (\n <a-box\n key={130000 + count + this.#id}\n id='th-mapping'\n geometry='width:1; height:15; depth:22;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8} ${this.#zOffset + this.#range / 2 + 0.5}\n ${this.#yOffset + this.#range / 2 + 2.5}`}\n material='transparent:true'\n />\n ) */\n /*\n count++\n elements.banners[2] = {\n key: 135000 + count + this.#id,\n id: 'th-background',\n geometry: {\n width: 0.2,\n height: 15,\n depth: 24\n },\n position: {\n x: maxXLength + 8.2,\n y: this.#zOffset + this.#range / 2 + 0.5,\n z: this.#yOffset + 1 + this.#range / 2 + 1.5\n },\n material: {\n color: '#ffffff',\n transparent: false\n }\n } (\n <a-box\n key={135000 + count + this.#id}\n id='th-background'\n geometry='width:0.2; height:15; depth:24;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8.2} ${this.#zOffset + this.#range / 2 + 0.5}\n ${this.#yOffset + 1 + this.#range / 2 + 1.5}`}\n material='color: white, transparent:false'\n />\n ) */\n // add normal and reversed labels into elements\n elements.labels = [...normalAxis, ...reversedAxis]\n\n return elements\n }\n\n /**\n * Funkcia na základe atribútov objektu vytvorí všetky potrebné entity pre histogram TH2.\n * @param {string} projectionFunction - parameter určuje, ktorý vizualizačný mód bude použity pri vytvorení entít\n * @return {Object} elements - vracia objekt obsahujúci roztriedené všetky potrebné entity histogramu pre VR\n */\n #createTH2Histogram = (projectionFunction) => {\n // get selected bins from local storage\n this.#selectedBins = localStorageService.getBinsFromLocalStorage()\n\n // react elements to draw the histogram\n const elements = {\n type: 'TH2',\n bins: [],\n labels: [],\n banners: [],\n ground: {},\n titles: [],\n axisLabels: []\n }\n // variables for rendering the histogram\n let centeredYPosition\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let c\n const binName = ''\n let absoluteContent\n let count = 0\n // bin attributes\n // const binScale = ndmVrStorage.loadBinScale('TH2')\n // max length\n const maxXLength =\n this.#xOffset + this.#range > this.#histogram.fXaxis.fNbins\n ? this.#histogram.fXaxis.fNbins\n : this.#xOffset + this.#range\n const maxYLength =\n this.#yOffset + this.#range > this.#histogram.fYaxis.fNbins\n ? this.#histogram.fYaxis.fNbins\n : this.#yOffset + this.#range\n const xTitle =\n this.#histogram.fXaxis.fTitle !== '' ? this.#histogram.fXaxis.fTitle : 'x'\n const yTitle =\n this.#histogram.fYaxis.fTitle !== '' ? this.#histogram.fYaxis.fTitle : 'y'\n const xLabels = this.#histogram.fXaxis.fLabels\n ? this.#histogram.fXaxis.fLabels.arr\n : []\n const yLabels = this.#histogram.fYaxis.fLabels\n ? this.#histogram.fYaxis.fLabels.arr\n : []\n // reset previous bins\n const currentBinScales = []\n\n // generate react elements of the bins\n for (let iy = this.#yOffset; iy <= maxYLength; iy++) {\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n xcenter = this.#histogram.fXaxis.GetBinCenter(ix)\n xmin = this.#histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = this.#histogram.fYaxis.GetBinCenter(iy)\n ymin = this.#histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n absoluteContent = this.#histogram.getBinContent(ix, iy)\n c = this.#optimizeBinContent(absoluteContent, this.#histogram.fMaximum)\n centeredYPosition = (c * this.#range * this.#contentScale) / 16\n\n // set a-frame entity box\n // set children component\n if (c > this.#minDisplayedContent) {\n const projectionColor = this.#projectionFunction(\n projectionFunction,\n xmin,\n ymin\n )\n const color =\n projectionColor === ''\n ? this.#themeProvider.getBinColor(c)\n : projectionColor\n\n // check bin status\n const id =\n this.#id + xmin + 'th2' + xmax + 'th2' + ymin + 'th2' + ymax\n let markedColor\n if (this.#checkBinState(id)) {\n markedColor = this.#themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n typeName: 'TH2'\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: 'none';\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${0};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${0};\n xPos: ${ix};\n yPos: ${iy};\n zPos: ${0};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n yCenter: ${0};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${0};\n markedColor: ${markedColor};\n selectColor: ${this.#themeProvider.getSecondaryAccentColor()};\n axisX: ${this.#themeProvider.getAxisColor('x')};\n axisY: ${this.#themeProvider.getAxisColor('y')};\n axisZ: ${this.#themeProvider.getAxisColor('z')}`\n\n const width = xwidth / this.#xWidth / this.#binScaleCoef\n const depth = ywidth / this.#yWidth / this.#binScaleCoef\n const posX = ix - 1\n const posY = iy - 1\n elements.bins[count] = {\n id: id,\n color: color,\n binData: binData,\n content: absoluteContent,\n animation: {\n fromWidth: width,\n fromHeight: this.#getPreviousBinScales(id),\n fromDepth: depth,\n toWidth: width,\n toHeight: (c * this.#range * this.#contentScale) / 8,\n toDepth: depth\n },\n animation2: {\n fromX: posX + this.#shift.xOffset,\n fromY: centeredYPosition,\n fromZ: posY + this.#shift.yOffset,\n toX: posX,\n toY: centeredYPosition,\n toZ: posY\n },\n animation3: {\n fromColor: this.#getPreviousBinColor(id),\n toColor: markedColor\n }\n }\n /* (\n <a-box\n key={id}\n class='clickable'\n material={`color: ${markedColor}; opacity: 0.75;`}\n binth2={binData}\n // position={`${posX} ${centeredYPosition} ${posY}`}\n mouseevent\n animation={`property: scale; from: ${width} ${this.#getPreviousBinScales(\n id\n )} ${depth}; to: ${width} ${c} ${depth}; delay:100; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.75; dur: 2000;'\n animation__2={`property: position; from: ${\n posX + this.#shift.xOffset\n } ${centeredYPosition} ${\n posY + this.#shift.yOffset\n }; to: ${posX} ${centeredYPosition} ${posY}; dur: 1000;`}\n // animation__3={`property: material.color; from: ${this.#getPreviousBinColor(\n // >/ id\n // )}; to: ${markedColor}; dur: 2600;`}\n />\n ) */\n currentBinScales[count] = {\n key: id,\n scale: c,\n color: markedColor\n }\n }\n count++\n }\n }\n this.#previousBins = currentBinScales\n // create arrays for labels\n const normalAxis = []\n const reversedAxis = []\n // set axis\n count = 0\n for (let iy = this.#yOffset; iy <= maxYLength; iy++) {\n normalAxis[count] = this.#createAxisEntity(\n 1500 + count,\n this.#xOffset - 2.5,\n 0,\n iy - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `${\n yLabels[iy - 1]\n ? yLabels[iy - 1].fString\n : Math.round(\n (this.#labels.yInitial +\n (iy - 1) * this.#yWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 3000 + count,\n maxXLength + 0.5,\n 0,\n iy - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `${\n yLabels[iy - 1]\n ? yLabels[iy - 1].fString\n : Math.round(\n (this.#labels.yInitial +\n (iy - 1) * this.#yWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('z'),\n this.#themeProvider.getSecondaryFontColor()\n )\n // axis title\n count++\n }\n // add y label\n elements.axisLabels[0] = {\n id: 'leftLabel',\n key: 4500 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 270,\n z: 0\n },\n animation: {\n fromX: this.#xOffset - 4 + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: this.#yOffset + 0.5 + this.#shift.yOffset,\n toX: this.#xOffset - 4,\n toY: 0,\n toZ: this.#yOffset + 0.5\n }\n } /* (\n <a-entity\n id='leftLabel'\n key={4500 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n // position={`${this.#xOffset - 4} ${0} ${this.#yOffset + 0.5}`}\n animation={`property: position; from: ${\n this.#xOffset - 4 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n this.#yOffset + 0.5 + this.#shift.yOffset\n }; to: ${this.#xOffset - 4} ${0} ${this.#yOffset + 0.5}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[1] = {\n id: 'rightLabel',\n key: 6001 + this.#id,\n text: {\n value: yTitle,\n color: this.#themeProvider.getAxisColor('z')\n },\n rotation: {\n x: 270,\n y: 90,\n z: 0\n },\n animation: {\n fromX: maxXLength + 2 + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: maxYLength - 2.5 + this.#shift.yOffset,\n toX: maxXLength + 2,\n toY: 0,\n toZ: maxYLength - 2.5\n }\n }\n /* (\n <a-entity\n id='rightLabel'\n key={6000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: ${this.#themeProvider.getAxisColor(\n 'z'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n // position={`${maxXLength + 2} ${0} ${maxYLength - 2.5}`}\n animation={`property: position; from: ${\n maxXLength + 2 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n maxYLength - 2.5 + this.#shift.yOffset\n }; to: ${maxXLength + 2} ${0} ${maxYLength - 2.5}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n // generate x axis\n for (let ix = this.#xOffset; ix <= maxXLength; ix++) {\n normalAxis[count] = this.#createAxisEntity(\n 7500 + count,\n ix - 1,\n 0,\n this.#yOffset - 2.5,\n 270,\n 270,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial +\n (ix - 1) * this.#xWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 9000 + count,\n ix - 1,\n 0,\n maxYLength + 0.5,\n 270,\n 90,\n 0,\n 2,\n 1,\n `${\n xLabels[ix - 1]\n ? xLabels[ix - 1].fString\n : Math.round(\n (this.#labels.xInitial +\n (ix - 1) * this.#xWidth +\n Number.EPSILON) *\n 100\n ) / 100\n }`,\n this.#themeProvider.getAxisColor('x'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n }\n // add x label\n elements.axisLabels[2] = {\n id: 'downLabel',\n key: 10502 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 180,\n z: 0\n },\n animation: {\n fromX: this.#xOffset + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: this.#yOffset - 4 + this.#shift.yOffset,\n toX: this.#xOffset,\n toY: 0,\n toZ: this.#yOffset - 4\n }\n } /* (\n <a-entity\n id='downLabel'\n key={10500 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n // position={`${this.#xOffset} ${0} ${this.#yOffset - 4}`}\n animation={`property: position; from: ${\n this.#xOffset + this.#shift.xOffset\n } ${this.#shift.zOffset} ${\n this.#yOffset - 4 + this.#shift.yOffset\n }; to: ${this.#xOffset} ${0} ${this.#yOffset - 4}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n elements.axisLabels[3] = {\n id: 'upLabel',\n key: 12003 + this.#id,\n text: {\n value: xTitle,\n color: this.#themeProvider.getAxisColor('x')\n },\n rotation: {\n x: 270,\n y: 0,\n z: 0\n },\n animation: {\n fromX: maxXLength - 2.5 + this.#shift.xOffset,\n fromY: this.#shift.zOffset,\n fromZ: maxYLength + 2 + this.#shift.yOffset,\n toX: maxXLength - 2.5,\n toY: 0,\n toZ: maxYLength + 2\n }\n } /* (\n <a-entity\n id='upLabel'\n key={12000 + count + this.#id}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: ${this.#themeProvider.getAxisColor(\n 'x'\n )}; width: 10; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n // position={`${maxXLength - 2.5} ${0} ${maxYLength + 2}`}\n animation={`property: position; from: ${\n maxXLength - 2.5 + this.#shift.xOffset\n } ${this.#shift.zOffset} ${maxYLength + 2 + this.#shift.yOffset}; to: ${\n maxXLength - 2.5\n } ${0} ${maxYLength + 2}; dur: 1000;`}\n material='opacity: 0;'\n />\n ) */\n\n // generate y axis\n normalAxis[count] = this.#createAxisEntity(\n 13500 + count,\n maxXLength + 0.5,\n 0,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 15000 + count,\n maxXLength + 0.5,\n 0,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n count++\n normalAxis[count] = this.#createAxisEntity(\n 16500 + count,\n this.#xOffset - 2.5,\n 0,\n maxYLength + 0.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n reversedAxis[count] = this.#createAxisEntity(\n 18000 + count,\n this.#xOffset - 2.5,\n 0,\n this.#yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n `0`,\n this.#themeProvider.getAxisColor('y'),\n this.#themeProvider.getSecondaryFontColor()\n )\n // add histogram title\n count++\n elements.titles[0] = {\n key: 195000 + this.#id,\n text: {\n value: this.#histogram.fTitle,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 123,\n z: 0\n },\n position: {\n x: this.#xOffset - 90,\n y: 16.5,\n z: this.#yOffset + 90\n },\n innerText: {\n value: 'Press V to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={19500 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fTitle\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 270; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${this.#xOffset - 90} ${16.5} ${this.#yOffset + 90}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press V to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) \n // add file title\n elements.titles[1] = {\n key: 195001 + this.#id,\n text: {\n value: this.#histogram.fName,\n color: this.#themeProvider.getPrimaryFontColor()\n },\n rotation: {\n x: 0,\n y: 330,\n z: 0\n },\n position: {\n x: this.#xOffset + 120,\n y: 16.5,\n z: this.#yOffset - 70\n },\n innerText: {\n value: 'Press buttonY to show projections or controls',\n color: this.#themeProvider.getPrimaryFontColor()\n }\n } /* (\n <a-entity\n key={21000 + count + this.#id}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${\n this.#histogram.fName\n }; color: ${this.#themeProvider.getPrimaryFontColor()}; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + 120} ${16.5} ${this.#yOffset - 70}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-text\n value='Press buttonY to show projections or controls'\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={this.#themeProvider.getPrimaryFontColor()}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white;'\n />\n </a-entity>\n ) */\n // add banner\n count++\n const bannerWidthX =\n this.#range > this.#xLimit ? this.#xLimit + 1 : this.#range\n const bannerWidthY =\n this.#range > this.#yLimit ? this.#yLimit + 1 : this.#range\n elements.ground = {\n key: 22500 + count + this.#id,\n scale: {\n width: bannerWidthX + 8,\n height: 0.2,\n depth: bannerWidthY + 8\n },\n animation: {\n fromX: this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset,\n fromY: -0.5,\n fromZ: this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset,\n toX: this.#xOffset + bannerWidthX * 0.5 - 1,\n toY: -0.5,\n toZ: this.#yOffset + bannerWidthY * 0.5 - 0.5\n }\n } /* (\n <a-box\n key={22500 + count + this.#id}\n width={bannerWidthX + 8}\n material='color: #171717'\n height={0.2}\n depth={bannerWidthY + 8}\n // position={`${this.#xOffset + 2.5} -0.5 ${this.#yOffset + 2.5}`}\n animation={`property: position; from: ${\n this.#xOffset + bannerWidthX * 0.5 - 1 + this.#shift.xOffset\n }\n -0.5\n ${this.#yOffset + bannerWidthY * 0.5 - 0.5 + this.#shift.yOffset};\n to:\n ${this.#xOffset + bannerWidthX * 0.5 - 1} -0.5 ${\n this.#yOffset + bannerWidthY * 0.5 - 0.5\n }; dur: 1000;`}\n />\n ) */\n /*\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th2-banner'\n // text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${this.#xOffset + this.#range / 2 + 2.5} 4.5 ${\n maxYLength + 8\n }`}\n >\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n // add banner with mappings\n count++\n elements.banners[1] = {\n key: 240000 + count + this.#id,\n id: 'th-mapping',\n geometry: {\n width: 0.1,\n height: 15,\n depth: 22\n },\n position: {\n x: maxXLength + 8,\n y: 7,\n z: this.#yOffset + this.#range / 2 + 2.5\n },\n material: {\n color: '#ffffff',\n transparent: true\n }\n } /* (\n <a-box\n key={24000 + count + this.#id}\n id='th-mapping'\n geometry='width:0.1; height:15; depth:22;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8} 7\n ${this.#yOffset + this.#range / 2 + 2.5}`}\n material='transparent:true'\n />\n )\n count++\n elements.banners[2] = {\n key: 255000 + count + this.#id,\n id: 'th-background',\n geometry: {\n width: 0.2,\n height: 16,\n depth: 24\n },\n position: {\n x: maxXLength + 8.2,\n y: 7,\n z: this.#yOffset + 1 + this.#range / 2 + 1.5\n },\n material: {\n color: '#ffffff',\n transparent: false\n }\n } (\n <a-box\n key={25500 + count + this.#id}\n id='th-background'\n geometry='width:0.2; height:16; depth:24;'\n // text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${maxXLength + 8.2} 7\n ${this.#yOffset + 1 + this.#range / 2 + 1.5}`}\n material='color: white, transparent:false'\n />\n ) */\n\n // add normal and reversed labels into elements\n elements.labels = [...normalAxis, ...reversedAxis]\n\n return elements\n }\n\n /**\n * Funkcia mapuje hodnotu obsahu do určitého rozsahu.\n * @param {number} binContent - Aktuálny obsah binu, ktorý obsahuje objekt histogramu\n * @param {number} maxContent - Maximálny možný obsah, ktorý bin môže nadobudnúť\n * @return {number} binContent - Vracia optimalizovaný obsah v potrebnom rozsahu\n */\n getElements(projectionFunction) {\n // generate all necessary element\n let elements = {}\n if (this.#type.includes('TH2')) {\n elements = this.#createTH2Histogram(projectionFunction)\n } else if (this.#type.includes('TH3')) {\n elements = this.#createTH3Histogram()\n }\n return elements\n }\n\n /**\n * Funkcia mapuje hodnotu obsahu do určitého rozsahu.\n * @param {number} binContent - Aktuálny obsah binu, ktorý obsahuje objekt histogramu\n * @param {number} maxContent - Maximálny možný obsah, ktorý bin môže nadobudnúť\n * @return {number} binContent - Vracia optimalizovaný obsah v potrebnom rozsahu\n */\n #optimizeBinContent = (binContent, maxContent) => {\n if (binContent <= 0) return 0\n if (maxContent > 1) {\n // round to 2 decimal numbers\n binContent =\n Math.round((binContent / maxContent + Number.EPSILON) * 100) / 100\n }\n\n return binContent\n }\n\n updateSection(axisOffset, increment, defaultRange) {\n if (this.#type.includes('TH3'))\n return this.#editTH3OffsetByOffset(axisOffset, increment, defaultRange)\n else if (this.#type.includes('TH2'))\n return this.#editTH2OffsetByOffset(axisOffset, increment, defaultRange)\n }\n\n /**\n * Funkcia upraví ofset, určí všetky podmienky a na základe nich vráti modifikované ofsety.\n * @param {Object} limits - Objekt, obsahujúci najvyššie povolené ofsety pre histogram\n * @param {Object} offsets - Objekt, obsahujúci všetky aktuálne ofsety pre histogram\n * @param {number} increment - Hodnota obsahujúca hodnotu, o ktoru sa modifikuje ofset\n * @param {string} axisOffset - Názov ofsetu, ktorý je potrebné modifikovať\n * @param {boolean} defaultRange - Ak je True, inkrement je predvolený (1), ak False použije sa hodnota parametra increment\n * @return {Object} result - Vracia objekt obsahujúci všetky aktualizované ofsety\n */\n #getValidOffset = (limits, offsets, increment, axisOffset, defaultRange) => {\n this.#shift = {\n xOffset: 0,\n yOffset: 0,\n zOffset: 0\n }\n if (increment) {\n if (defaultRange) {\n offsets[axisOffset] += 1\n this.#shift[axisOffset] = -1\n } else {\n offsets[axisOffset] += offsets.range\n this.#shift[axisOffset] = -offsets.range\n }\n if (limits[axisOffset] <= offsets.range) {\n offsets[axisOffset] = 1\n this.#shift[axisOffset] = 0\n return offsets\n }\n if (offsets[axisOffset] > limits[axisOffset] - offsets.range) {\n offsets[axisOffset] = limits[axisOffset] - offsets.range\n this.#shift[axisOffset] = 0\n return offsets\n }\n } else {\n if (defaultRange) {\n offsets[axisOffset] -= 1\n this.#shift[axisOffset] = 1\n } else {\n offsets[axisOffset] -= offsets.range\n this.#shift[axisOffset] = offsets.range\n }\n if (offsets[axisOffset] < 1) {\n offsets[axisOffset] = 1\n this.#shift[axisOffset] = 0\n return offsets\n }\n }\n return offsets\n }\n\n /**\n * Funkcia upravuje ofset sekcie pre TH3 histogram.\n * @param {string} axisOffset - Označenie ofsetu, ktorý je potrebné modifikovať\n * @param {number} increment - Hodnota, o ktorú je potrebné upraviť ofset\n * @param {boolean} defaultRange - Ak je True, inkrement je predvolený (1), ak False použije sa hodnota parametra increment\n * @return {Object} result - Vracia objekt obsahujúci všetky aktualizované ofsety\n */\n #editTH3OffsetByOffset = (axisOffset, increment, defaultRange) => {\n // set object with limits\n const limits = {\n xOffset: this.#xLimit,\n yOffset: this.#yLimit,\n zOffset: this.#zLimit\n }\n // set object with current offsets\n const offsets = {\n name: 'TH3',\n xOffset: this.#xOffset,\n yOffset: this.#yOffset,\n zOffset: this.#zOffset,\n range: this.#range\n }\n const result = this.#getValidOffset(\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n this.#xOffset = result.xOffset\n this.#yOffset = result.yOffset\n this.#zOffset = result.zOffset\n // return result as object\n return result\n }\n\n /**\n * Funkcia určuje upravený vzhľad binov, závislom na špeciálnej funkcií.\n * @param {string} projectionFunction - Definuje názov módu, ktorý bude použitý\n * @param {number} xMin - X súradnica binu, ktorý je potrebné upraviť\n * @param {number} yMin - Y súradnica binu, ktorý je potrebné upraviť\n * @return {string} color - Vracia HEX hodnotu farby, ktorá binu prislúcha\n */\n #projectionFunction = (projectionFunction, xMin, yMin) => {\n if (projectionFunction === 'feet' && this.#projections !== null) {\n const xIndex = xMin / this.#xWidth\n const yIndex = yMin / this.#yWidth\n try {\n const projectionHistogram =\n this.#projections.fFolders.arr[xIndex].fFolders.arr[yIndex].fFolders\n .arr[0]\n const LineColor = projectionHistogram.fFunctions.arr[0].fLineColor\n\n if (LineColor === 600) {\n return 'blue'\n } else if (LineColor === 632) {\n return 'red'\n }\n } catch (e) {\n return ''\n }\n }\n return ''\n }\n\n /**\n * Funkcia upravuje ofset sekcie pre TH2 histogram.\n * @param {string} axisOffset - Označenie ofsetu, ktorý je potrebné modifikovať\n * @param {number} increment - Hodnota, o ktorú je potrebné upraviť ofset\n * @param {boolean} defaultRange - Ak je True, inkrement je predvolený (1), ak False použije sa hodnota parametra increment\n * @return {Object} result - Vracia objekt obsahujúci všetky aktualizované ofsety\n */\n #editTH2OffsetByOffset = (axisOffset, increment, defaultRange) => {\n // set object with limits\n const limits = {\n xOffset: this.#xLimit,\n yOffset: this.#yLimit\n }\n // set object with current offsets\n const offsets = {\n name: 'TH2',\n xOffset: this.#xOffset,\n yOffset: this.#yOffset,\n range: this.#range\n }\n const result = this.#getValidOffset(\n limits,\n offsets,\n increment,\n axisOffset,\n defaultRange\n )\n this.#xOffset = result.xOffset\n this.#yOffset = result.yOffset\n // return result as object\n return result\n }\n\n /**\n * Funkcia určuje predošlú veľkosť binu, Pri zmene veľkosti binu sa bin upráví z predošlej hodnoty na novú hodnotu.\n * @param {string} id - Identifikátor binu\n * @return {number} result - Vracia predošlú veľkosť binu\n */\n #getPreviousBinScales = (id) => {\n const previousBin = this.#previousBins.filter(\n (prevBin) => prevBin.key === id\n )\n if (previousBin[0] && previousBin[0].scale) {\n return previousBin[0].scale\n }\n return 0\n }\n\n /**\n * Funkcia určuje predošlú farbu binu, Pri zmene farby binu sa bin zmení z predošlej farby na novú farbu.\n * @param {string} id - Identifikátor binu\n * @return {string} result - Vracia HEX hodnotu predošlej farby binu\n */\n #getPreviousBinColor = (id) => {\n const previousBin = this.#previousBins.filter(\n (prevBin) => prevBin.key === id\n )\n if (previousBin[0] && previousBin[0].scale) {\n return previousBin[0].color\n }\n return '#ffffff'\n }\n}\n","import React, { useState, useEffect } from 'react'\nimport 'aframe'\nimport '../../aframeComponents/cursorEventAframeComponent'\nimport '../../aframeComponents/thAframeComponent'\nimport '../../aframeComponents/histogramAframeComponent'\nimport '../../aframeComponents/labelHandlerAframeComponent'\nimport HistogramReactFactory from '../../utils/histogramGenerator'\n// import { CameraService } from '../../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../../observables/histogramSubject'\n\n/**\n * React komponent pre vytvorenie histogramu.\n * @component\n * @param {string} name - Názov pre histogram\n * @param {Object} histogram - Objekt histogramu, ktorý sa bude v komponente vizualizovať\n * @param {Object} histoSection - Objekt obsahujúci údaje o sekcií a rozsahu, ktorý bude zobrazený\n * @param {Object} projections - Objekt obsahujúci súborovú štruktúru s projekciami\n * @param {number} range - Definuje rozsah, v prípade ak sa vizualizuje bez určených ofsetov iba určitý rozsah\n * @param {string} theme - Definuje tému pre vizualizáciu histogramu\n * @example\n * return (\n * <NdmVrHistogram3D\n * name={info.name}\n * histogram={data.histogram}\n * histoSection={data.section}\n * projections={data.projections}\n * range={data.range}\n * theme={info.theme}/>\n * )\n */\nconst NdmVrHistogram3D = ({\n name,\n histogram,\n histoSection,\n projections,\n range,\n theme\n}) => {\n // const unmounted = useRef(false)\n // pressed keys\n let subscription\n // const cameraService = new CameraService()\n // create factory\n const [factory] = useState(\n new HistogramReactFactory(\n name,\n histogram,\n histoSection || null,\n range,\n projections,\n theme || 'def'\n )\n )\n const [mode, setMode] = useState('default')\n const [elements, setElements] = useState(factory.getElements(mode))\n const [binMarkState, setBinMarkState] = useState(1)\n\n // handler functions\n // handle subscription\n const handleSubscription = (data) => {\n if (histogram._typename.includes(data.name)) {\n // save new section to local storage\n if (data.axis) {\n factory.updateSection(data.axis, data.increment, data.defaultRange)\n setElements(factory.getElements(mode))\n } else if (data.binMarkMode) {\n setBinMarkState((prevState) => {\n if (prevState + data.binMarkMode > 2) return 2\n if (prevState + data.binMarkMode < 1) return 1\n return prevState + data.binMarkMode\n })\n } else {\n setMode((prevState) =>\n prevState !== data.fFunction ? data.fFunction : prevState\n )\n }\n }\n }\n\n // use effect hooks\n // update histogram unique name\n useEffect(() => {\n factory.setUniqueName(name)\n setElements(factory.getElements(mode))\n }, [name])\n\n // update histogram and projection\n useEffect(() => {\n factory.setHistogram(histogram, projections)\n setElements(factory.getElements(mode))\n }, [histogram, projections])\n\n // update histogram section\n useEffect(() => {\n factory.setSection(histoSection)\n setElements(factory.getElements(mode))\n }, [histoSection])\n\n // update histogram section range\n useEffect(() => {\n factory.setRange(range)\n setElements(factory.getElements(mode))\n }, [range])\n\n // update histogram unique name\n useEffect(() => {\n factory.setTheme(theme)\n setElements(factory.getElements(mode))\n }, [theme])\n\n // update histogram with certain mode\n useEffect(() => {\n setElements(factory.getElements(mode))\n }, [mode])\n\n // subscription after render histogram\n useEffect(() => {\n if (histogram._typename.includes('TH2')) {\n subscription = histogramTH2Service\n .getChangedSection()\n .subscribe(handleSubscription)\n } else if (histogram._typename.includes('TH3')) {\n // toto\n subscription = histogramTH3Service\n .getChangedSection()\n .subscribe(handleSubscription)\n }\n return () => subscription.unsubscribe()\n }, [elements])\n\n if (elements?.bins) {\n return (\n <a-entity histogram-control>\n {elements.bins.map((bin) => (\n <a-box\n key={bin.id}\n class='clickable'\n material={`color: ${bin.color}; transparent: true`}\n binth={bin.binData}\n mouseevent\n animation={`property: scale; from: ${bin.animation.fromWidth} ${bin.animation.fromHeight} ${bin.animation.fromDepth}; to: ${bin.animation.toWidth} ${bin.animation.toHeight} ${bin.animation.toDepth}; delay:100; dur: 1500; easing: linear;`}\n animation__1='property: material.opacity; from: 0; to: 0.50; dur: 2000;'\n animation__2={`property: position; from: ${bin.animation2.fromX} ${bin.animation2.fromY} ${bin.animation2.fromZ}; to: ${bin.animation2.toX} ${bin.animation2.toY} ${bin.animation2.toZ}; dur: 1000;`}\n animation__3={`property: material.color; from: ${bin.animation3.fromColor}; to: ${bin.animation3.toColor}; dur: 1600;`}\n >\n <a-text\n value={bin.content}\n align='center'\n width='10'\n color='black'\n geometry='primitive:plane; width: 1; height: 1'\n material={`color: ${bin.animation3.toColor}; opacity: 0.50; transparent: true`}\n rotation='270 180 0'\n position={`0 ${binMarkState === 1 ? -0.5 : 0.501} 0`}\n />\n </a-box>\n ))}\n\n {elements.labels.map((label) => (\n <a-entity\n key={label.key}\n geometry={`primitive: ${label.geometry.primitive}; width:${label.geometry.width}; height:${label.geometry.height};`}\n text={`color: ${label.text.color}; width: ${label.text.width}; height: ${label.text.height}; align:center;`}\n label-handler={`value: ${label.labelHandler.value}; delay:${label.labelHandler.delay}`}\n rotation={`${label.rotation.x} ${label.rotation.y} ${label.rotation.z}`}\n material={`color: ${label.material.color}; transparent: true`}\n animation='property: text.width; from: 0; to: 4; dur: 1000;'\n animation__1='property: material.opacity; from: 0; to: 0.8; dur: 1500;'\n animation__2={`property: position; from: ${label.animation.fromX} ${label.animation.fromY} ${label.animation.fromZ}; to: ${label.animation.toX} ${label.animation.toY} ${label.animation.toZ}; dur: 1005;`}\n />\n ))}\n {elements.titles.map((title) => (\n <a-entity\n key={title.key}\n text={`value: ${title.text.value}; color: ${title.text.color}; width: 230; height:auto; align:center;`}\n rotation={`${title.rotation.x} ${title.rotation.y} ${title.rotation.z}`}\n position={`${title.position.x} ${title.position.y} ${title.position.z}`}\n material='transparent: true'\n >\n <a-text\n value={title.innerText.value}\n position='0 10 0'\n width='150'\n height='auto'\n align='center'\n color={title.innerText.color}\n />\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.9; color: white; transparent: true'\n />\n </a-entity>\n ))}\n {elements.axisLabels.map((axisLabel) => (\n <a-entity\n id={axisLabel.id}\n key={axisLabel.key}\n text={`value: ${axisLabel.text.value}; color: ${axisLabel.text.color}; width: 10; height:auto; align:center;`}\n rotation={`${axisLabel.rotation.x} ${axisLabel.rotation.y} ${axisLabel.rotation.z}`}\n animation={`property: position; from: ${axisLabel.animation.fromX} ${axisLabel.animation.fromY} ${axisLabel.animation.fromZ}; to: ${axisLabel.animation.toX} ${axisLabel.animation.toY} ${axisLabel.animation.toZ}; dur: 1000;`}\n material='opacity: 0; transparent: true'\n />\n ))}\n {elements.ground && (\n <a-box\n key={elements.ground.key}\n width={elements.ground.scale.width}\n material='color: #fafafa'\n height={elements.ground.scale.height}\n depth={elements.ground.scale.depth}\n animation={`property: position; from: ${elements.ground.animation.fromX} ${elements.ground.animation.fromY} ${elements.ground.animation.fromZ};\n to:\n ${elements.ground.animation.toX} ${elements.ground.animation.toY} ${elements.ground.animation.toZ}; dur: 1000;`}\n />\n )}\n {elements.banners.map((banner) => (\n <a-box\n key={banner.key}\n id={banner.id}\n geometry={`width:${banner.geometry.width}; height:${banner.geometry.height}; depth:${banner.geometry.depth};`}\n position={`${banner.position.x} ${banner.position.y} ${banner.position.z}`}\n material={`color: ${banner.material.color}, transparent: ${banner.material.transparent}`}\n />\n ))}\n </a-entity>\n )\n } else {\n return (\n <a-box\n animation__1='property: rotation; to: 0 180 360; dur: 10000; easing: linear; loop: true'\n animation__2='property: scale; from: 1 1 1; to: 10 10 10; dur: 15000; timeout: 15000; loop: true; easing: linear; dir: alternate'\n animation__color='property: material.color; from: #003682; to: #7d0002; dur: 80000: easing: linear: loop: true; dir: alternate'\n position='0 1.5 -2'\n />\n )\n }\n}\n\nexport default NdmVrHistogram3D\n","import React from 'react'\n\nexport default function NdmVrLaboratory() {\n return (\n <React.Fragment>\n <a-sky color='#dbf0fe'></a-sky>\n <a-plane\n rotation='-90 0 0'\n position='0 -0.5 0'\n width='1000'\n height='1000'\n color='#aaa'\n material='shader:flat;'\n ></a-plane>\n </React.Fragment>\n )\n}\n","import React from 'react'\nimport NdmVrCamera from '../NdmVrCamera'\nimport NdmVrHistogram3D from '../NdmVrHistogram3D'\nimport NdmVrLaboratory from '../NdmVrLaboratory'\n\n/**\n * React komponent pre vytvorenie VR scény s všetkými potrebnými komponentami.\n * @component\n * @param {Object} data - Objekt obsahuje objekty histogramu, sekcie poprípade projekcie\n * @param {Object} info - Objekt obsahuje sekundárne údaje (meno, témy, atribúty pozadia v scéne)\n * @example\n * data = {\n * histogram: histograms.physics,\n * projections: histograms.projections,\n * section: section\n * }\n * info = {\n * name: 'Physics',\n * theme: theme,\n * background: {\n * url: './ndmvr/backgrounds/background1.jpg',\n * radius: '3000',\n * height: '2048',\n * width: '2048'\n * }\n * }\n * return (\n * <NdmVrScene data={data} info={info} />\n * )\n */\nconst NdmVrScene = ({ data, info }) => {\n return (\n <a-scene\n embedded\n style={{\n zIndex: '1',\n width: '100%',\n minHeight: 'calc(90vh)'\n }}\n >\n <a-assets>\n <img id='skyTexture' src={info.background.url} alt='background' />\n </a-assets>\n\n <NdmVrLaboratory />\n\n <NdmVrCamera />\n <NdmVrHistogram3D\n name={info.name}\n histogram={data.histogram}\n histoSection={data.section}\n projections={data.projections}\n range={data.range}\n theme={info.theme}\n />\n {/* <a-sky\n height={info.background.height ? info.background.height : '2048'}\n radius={info.background.radius ? info.background.radius : '3000'}\n width={info.background.width ? info.background.width : '2048'}\n src={\n info.background.url\n ? info.background.url\n : './ndmvr/backgrounds/background1.jpg'\n }\n position={`${info.background.xPosition ? info.background.xPosition : 0}\n ${info.background.yPosition ? info.background.yPosition : 1000}\n ${info.background.zPosition ? info.background.zPosition : 1000}`}\n /> */}\n </a-scene>\n )\n}\n\nexport default NdmVrScene\n","/* object for creating the entity builder from templates */\n\nexport default class EntityBuilder {\n model = null\n constructor(model) {\n this.model = model\n }\n\n updateElement(count, histogramElm, element, entityType) {\n if (this.model[element].elements[count]) {\n if (element === 'titles') {\n this.createTitle(\n this.model[element].elements[count],\n this.model[element].attributes[count]\n )\n } else {\n this.createElement(\n this.model[element].elements[count],\n this.model[element].attributes[count],\n entityType\n )\n }\n } else {\n let newElement\n\n if (element === 'titles') {\n newElement = this.createTitle(\n undefined,\n this.model[element].attributes[count]\n )\n } else {\n newElement = this.createElement(\n undefined,\n this.model[element].attributes[count],\n entityType\n )\n }\n this.model[element].elements[count] = newElement\n histogramElm.appendChild(newElement)\n }\n }\n\n deleteUnnecessaryElements(count, element) {\n const newLength = count\n // overbins\n if (element.length === 1) {\n while (this.model[element[0]].elements[count]) {\n this.model[element[0]].elements[count].remove()\n count++\n }\n this.model[element[0]].elements.length = newLength\n this.model[element[0]].attributes.length = newLength\n } else {\n while (this.model[element[0]].elements[count]) {\n this.model[element[0]].elements[count].remove()\n this.model[element[1]].elements[count].remove()\n count++\n }\n this.model[element[0]].elements.length = newLength\n this.model[element[0]].attributes.length = newLength\n this.model[element[1]].elements.length = newLength\n this.model[element[1]].attributes.length = newLength\n }\n }\n\n createElement(Element, data, type) {\n let element = Element\n if (element === undefined || element === null) {\n const entityType = this.checkEntityType(type)\n element = document.createElement(entityType)\n }\n for (const feature in data) {\n element.setAttribute(feature, data[feature])\n }\n return element\n }\n\n createBannerElement(Element, linesCount, data) {\n let parent = Element\n if (parent === undefined || parent === null) {\n parent = document.createElement('a-entity')\n const array = this.createBannerLines(linesCount, data)\n array.map((element) => parent.append(element))\n }\n parent.setAttribute('position', data.position)\n parent.setAttribute('id', data.id)\n return parent\n }\n\n createBannerLines(linesCount, data) {\n const array = []\n for (let i = linesCount - 1; i > -1; i--) {\n data.line.position.y = 2 * i\n const line = document.createElement('a-entity')\n line.setAttribute('rotation', data.line.rotation)\n line.setAttribute('position', data.line.position)\n line.setAttribute('text', data.line.text)\n array.push(line)\n }\n const background = document.createElement('a-entity')\n background.setAttribute('geometry', data.background.geometry)\n background.setAttribute('position', data.background.position)\n background.setAttribute('material', data.background.material)\n array.push(background)\n return array\n }\n\n createTitle(Element, data) {\n let parent = Element\n if (parent === undefined || parent === null) {\n parent = document.createElement('a-entity')\n const child = this.createElement(undefined, data.background)\n parent.appendChild(child)\n }\n delete data.background\n return this.createElement(parent, data)\n }\n\n checkEntityType(type) {\n if (\n type === 'a-box' ||\n type === 'a-sphere' ||\n type === 'a-text' ||\n type === 'a-circle' ||\n type === 'a-text'\n ) {\n return type\n } else {\n return 'a-entity'\n }\n }\n}\n","/* object for creating the entity templates for entities */\n\nexport default class EntityTemplate {\n bannerTemplate(data, lineData, backgroundData) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const id = data.id\n const background = this.bannerBackgroundTemplate(backgroundData)\n const line = this.lineTemplate(lineData)\n return {\n position: position,\n id: id,\n background: background,\n line: line\n }\n }\n\n binTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const scale = {\n x: data.scaleX,\n y: data.scaleY,\n z: data.scaleZ\n }\n const material = {\n color: data.color,\n opacity: 0.75\n }\n const clas = data.class\n const binTh2 = data.data\n const id = data.id\n return {\n position: position,\n scale: scale,\n material: material,\n id: id,\n class: clas,\n binth2: binTh2,\n mouseevent: ''\n }\n }\n\n labelTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const geometry = {\n primitive: 'plane',\n width: 4,\n height: 1\n }\n const text = {\n value: data.value,\n color: data.color,\n width: 10,\n height: 'auto',\n align: 'center'\n }\n const material = {\n opacity: 0\n }\n const id = data.id\n return {\n position: position,\n rotation: rotation,\n geometry: geometry,\n text: text,\n material: material,\n id: id\n }\n }\n\n axisTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const geometry = {\n primitive: 'plane',\n width: data.width,\n height: data.height\n }\n const text = {\n value: data.value,\n color: 'black',\n width: 4,\n height: 'auto',\n align: 'center'\n }\n const material = {\n color: data.color,\n opacity: 0.8\n }\n return {\n position: position,\n rotation: rotation,\n geometry: geometry,\n text: text,\n material: material\n }\n }\n\n titleTemplate(data, textData) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const material = {\n opacity: 0\n }\n const text = {\n value: data.title,\n color: data.color,\n width: 230,\n height: 'auto',\n align: 'center'\n }\n const back = this.titleTextTemplate(textData)\n return {\n position: position,\n rotation: rotation,\n material: material,\n text: text,\n background: back\n }\n }\n\n titleTextTemplate(data) {\n const geometry = {\n primitive: 'plane',\n width: data.width,\n height: data.height\n }\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const material = {\n color: data.color,\n opacity: 0.6\n }\n return {\n position: position,\n geometry: geometry,\n material: material\n }\n }\n\n lineTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const rotation = {\n x: data.rotationX,\n y: data.rotationY,\n z: data.rotationZ\n }\n const text = {\n value: '',\n width: 14,\n height: 'auto',\n align: 'center'\n }\n return {\n position: position,\n rotation: rotation,\n text: text\n }\n }\n\n bannerBackgroundTemplate(data) {\n const position = {\n x: data.positionX,\n y: data.positionY,\n z: data.positionZ\n }\n const geometry = {\n primitive: 'box',\n width: data.width,\n height: data.height,\n depth: data.depth\n }\n const material = {\n color: data.color\n }\n return {\n position: position,\n geometry: geometry,\n material: material\n }\n }\n}\n","// import React from 'react'\nimport { localStorageService } from '../services/ndmVrStorageService'\nimport 'aframe'\nimport EntityBuilder from './EntityBuilder'\nimport EntityTemplate from './EntityTemplate'\nimport ThemeProvider from '../resources/themeProvider'\n\nlet selectedBins = []\n\nfunction checkBinState(binId) {\n const updatedArray = selectedBins.filter((item) => item.id === binId)\n return updatedArray.length !== 0\n}\n// create axis entity\n/*\nfunction createAxisEntity(\n id,\n positionX,\n positionY,\n positionZ,\n rotationX,\n rotationY,\n rotationZ,\n width,\n height,\n value,\n color\n) {\n const element = document.createElement('a-entity')\n element.setAttribute('position', {\n x: positionX,\n y: positionY,\n z: positionZ\n })\n element.setAttribute('rotation', {\n x: rotationX,\n y: rotationY,\n z: rotationZ\n })\n element.setAttribute('geometry', {\n primitive: 'plane',\n width: width,\n height: height\n })\n element.setAttribute('text', {\n value: value,\n color: 'black',\n width: 14,\n height: 'auto',\n align: 'center'\n })\n element.setAttribute('material', {\n color: color,\n opacity: 0.8\n })\n return element\n}\n*/\n// create th3 histogram\n/*\n function createTH3Histogram(histogram, xOffset, yOffset, zOffset, range) {\n // get selected bins from local storage\n selectedBins = localStorageService.getBinsFromLocalStorage()\n // react elements to draw the histograms\n const elements = {\n bins: [],\n normalAxis: [],\n reversedAxis: [],\n banners: []\n }\n // variables for rendering the histogram\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let zcenter, zmin, zmax, zwidth\n const binName = ''\n let absoluteContent\n let c\n let count = 0\n\n const maxXLength =\n xOffset + range > histogram.fXaxis.fXmax\n ? histogram.fXaxis.fXmax\n : xOffset + range\n const maxYLength =\n yOffset + range > histogram.fYaxis.fXmax\n ? histogram.fYaxis.fXmax\n : yOffset + range\n const maxZLength =\n zOffset + range > histogram.fZaxis.fXmax\n ? histogram.fZaxis.fXmax\n : zOffset + range\n\n const xTitle = histogram.fXaxis.fTitle\n const yTitle = histogram.fYaxis.fTitle\n const zTitle = histogram.fZaxis.fTitle\n\n // generate react elements of the bins\n for (let iz = zOffset; iz <= maxZLength; iz++)\n for (let iy = yOffset; iy <= maxYLength; iy++)\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n xcenter = histogram.fXaxis.GetBinCenter(ix)\n xmin = histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = histogram.fYaxis.GetBinCenter(iy)\n ymin = histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n zcenter = histogram.fZaxis.GetBinCenter(iz)\n zmin = histogram.fZaxis.GetBinLowEdge(iz)\n zmax = zcenter + (zcenter - zmin)\n zwidth = zmax - zmin\n absoluteContent = histogram.getBinContent(ix, iy, iz)\n c = optimizeBinContent(absoluteContent, histogram.fMaximum)\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n let size = c\n if (c < 0.15) size = 0.15\n\n const color = setBinColor(c)\n // check bin status\n const id =\n xmin +\n 'th3' +\n xmax +\n 'th3' +\n zmin +\n 'th3' +\n zmax +\n 'th3' +\n ymin +\n 'th3' +\n ymax\n let markedColor\n if (checkBinState(id)) {\n markedColor = '#FF3700'\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n zTitle: ${zTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n zMin: ${zmin};\n xMax: ${xmax};\n yMax: ${ymax};\n zMax: ${zmax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n zCenter: ${zcenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n zWidth: ${zwidth};\n markedColor: ${markedColor}`\n elements.bins[count] = `\n <a-box\n key=${count}\n class='clickable'\n material=color: ${markedColor}; opacity: 0.75;\n bin-th3=${binData}\n position=${xmin} ${zmin + 0.2} ${ymin}\n height=${size * 0.9}\n width=${size * 0.9}\n depth=${size * 0.9}\n mouseEvent\n />\n `\n }\n count++\n }\n\n // set axis\n count = 0\n for (let iz = yOffset; iz <= maxYLength; iz++) {\n const normalAxis = createAxisEntity(\n 1500 + count,\n -2.5 + xOffset,\n zOffset - 1,\n iz - 1,\n 270,\n 180,\n 0,\n 2,\n 1,\n `__${iz - 1}`,\n 'green'\n )\n const reversedAxis = createAxisEntity(\n 4500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n iz - 1,\n 270,\n 360,\n 0,\n 2,\n 1,\n `____\\n${iz - 1}`,\n 'green'\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add z label\n elements.normalAxis[count] = (\n <a-entity\n id='leftLabel'\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: green; width: 14; height:auto; align:center;`}\n rotation={`${270} ${270} ${0}`}\n position={`${xOffset - 4} ${zOffset - 1} ${yOffset + 0.5}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='rightLabel'\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${yTitle}; color: green; width: 14; height:auto; align:center;`}\n rotation={`${270} ${90} ${0}`}\n position={`${maxXLength + 2} ${zOffset - 1} ${maxYLength - 2.5}`}\n material='opacity: 0;'\n />\n )\n count++\n // generate x and y axis\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n const normalAxis = createAxisEntity(\n 1500 + count,\n ix - 1,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 1,\n 2,\n `''''|\\n${ix - 1}`,\n 'darkred'\n )\n const reversedAxis = createAxisEntity(\n 4500 + count,\n ix - 1,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 1,\n 2,\n `|''''\\n${ix - 1}`,\n 'darkred'\n )\n elements.normalAxis[count] = normalAxis\n elements.reversedAxis[count] = reversedAxis\n count++\n }\n // add x label\n elements.normalAxis[count] = (\n <a-entity\n id='downLabel'\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: red; width: 14; height:auto; align:center;`}\n rotation={`${270} ${180} ${0}`}\n position={`${xOffset} ${zOffset - 1} ${yOffset - 4}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n id='upLabel'\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${xTitle}; color: red; width: 14; height:auto; align:center;`}\n rotation={`${270} ${0} ${0}`}\n position={`${maxXLength - 2.5} ${zOffset - 1} ${maxYLength + 2}`}\n material='opacity: 0;'\n />\n )\n count++\n // y axis\n elements.normalAxis[count] = createAxisEntity(\n 4500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 360,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n elements.reversedAxis[count] = createAxisEntity(\n 1500 + count,\n maxXLength + 0.5,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n count++\n elements.normalAxis[count] = createAxisEntity(\n 1500 + count,\n xOffset - 2.5,\n zOffset - 1,\n maxYLength + 0.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n elements.reversedAxis[count] = createAxisEntity(\n 1500 + count,\n xOffset - 2.5,\n zOffset - 1,\n yOffset - 2.5,\n 270,\n 180,\n 0,\n 2,\n 2,\n zOffset - 1,\n 'blue'\n )\n count++\n // add y label\n /*\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${270} ${90}`}\n position={`${xOffset - 1.5} ${maxZLength - 1.5} ${yOffset - 2}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${90} ${90}`}\n position={`${maxXLength - 0.5} ${maxZLength - 1.5} ${maxYLength}`}\n material='opacity: 0;'\n />\n )\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${360} ${90}`}\n position={`${xOffset - 2} ${maxZLength - 1.5} ${maxYLength - 0.5}`}\n material='opacity: 0;'\n />\n )\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n geometry='primitive: plane; width:4; height:1;'\n text={`value: ${zTitle}; color: blue; width: 14; height:auto; align:center;`}\n rotation={`${0} ${180} ${90}`}\n position={`${maxXLength - 0.5} ${maxZLength - 1.5} ${yOffset - 1.5}`}\n material='opacity: 0;'\n />\n )\n // add histogram title\n count++\n elements.normalAxis[count] = (\n <a-entity\n key={1500 + count}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${histogram.fTitle}; color: black; width: 230; height:auto; align:center;`}\n rotation={`${0} ${123} ${0}`}\n position={`${xOffset - 90} ${maxZLength - 6.5} ${yOffset + 90}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.6; color: white;'\n />\n </a-entity>\n )\n // add file title\n elements.reversedAxis[count] = (\n <a-entity\n key={4500 + count}\n // geometry='primitive: plane; width:170; height:30;'\n text={`value: ${histogram.fName}; color: black; width: 230; height:auto; align:center;`}\n rotation={`${0} ${330} ${0}`}\n position={`${xOffset + 120} ${-6.5} ${yOffset - 70}`}\n // material='opacity: 0.5; color: white;'\n >\n <a-entity\n geometry='primitive: plane; width:170; height:30;'\n position='0 0 -1'\n material='opacity: 0.6; color: white;'\n />\n </a-entity>\n )\n // add banner\n elements.banners[0] = (\n <a-entity\n key={4500 + count + 2}\n id='th3-banner'\n text={`value: \"\"; color: white; width: 230; height:auto; align:center;`}\n // rotation={`${0} ${330} ${0}`}\n position={`${xOffset + range / 2 + 2.5} ${zOffset + range / 2 + 1.5} ${\n maxYLength + 8\n }`}\n >\n <a-entity rotation='0 180 0' position='0 6 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 4 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 2 0' text={`value: \"\";`} />\n <a-entity rotation='0 180 0' position='0 0 0' text={`value: \"\";`} />\n <a-entity\n geometry='primitive: box; width:15; height:15; depth:0.1;'\n position='0 0 0.5'\n material='color: black;'\n />\n </a-entity>\n )\n */\n// add banner with mappings\n/*\n elements.banners[1] = (\n <a-entity\n key={4500 + count + 3}\n id='th3-mapping'\n geometry='primitive: box; width:1; height:15; depth:15;'\n position={`${maxXLength + 8} ${zOffset + range / 2 + 0.5}\n ${yOffset + range / 2 + 2.5}`}\n material='opacity: 1; color: black;'\n />\n )\n\n return elements\n }\n */\n\n// create th2 histogram\nfunction createTH2Histogram(\n Element,\n model,\n histogram,\n xOffset,\n yOffset,\n range,\n theme\n) {\n // get selected bins from local storage\n selectedBins = localStorageService.getBinsFromLocalStorage()\n // react elements to draw the histogram\n\n const entityTemplate = new EntityTemplate()\n const entityBuilder = new EntityBuilder(model)\n const themeProvider = new ThemeProvider(theme)\n\n const data = {}\n\n const histogramElm = Element\n // variables for rendering the histogram\n let centeredYPosition\n let xcenter, xmin, xmax, xwidth\n let ycenter, ymin, ymax, ywidth\n let c\n const binName = ''\n let absoluteContent\n let count = 0\n const maxXLength =\n xOffset + range > histogram.fXaxis.fXmax\n ? histogram.fXaxis.fXmax\n : xOffset + range\n const maxYLength =\n yOffset + range > histogram.fYaxis.fXmax\n ? histogram.fYaxis.fXmax\n : yOffset + range\n const xTitle = histogram.fXaxis.fTitle\n const yTitle = histogram.fYaxis.fTitle\n const xLabels = histogram.fXaxis.fLabels ? histogram.fXaxis.fLabels.arr : []\n const yLabels = histogram.fYaxis.fLabels ? histogram.fYaxis.fLabels.arr : []\n\n // generate react elements of the bins\n for (let iy = yOffset; iy <= maxYLength; iy++) {\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n xcenter = histogram.fXaxis.GetBinCenter(ix)\n xmin = histogram.fXaxis.GetBinLowEdge(ix)\n xmax = xcenter + (xcenter - xmin)\n xwidth = xmax - xmin\n ycenter = histogram.fYaxis.GetBinCenter(iy)\n ymin = histogram.fYaxis.GetBinLowEdge(iy)\n ymax = ycenter + (ycenter - ymin)\n ywidth = ymax - ymin\n absoluteContent = histogram.getBinContent(ix, iy)\n c = optimizeBinContent(absoluteContent, histogram.fMaximum)\n centeredYPosition = c / 2\n\n // set a-frame entity box\n // set children component\n if (c > 0) {\n const color = themeProvider.getBinColor(c)\n // check bin status\n const id = xmin + 'th2' + xmax + 'th2' + ymin + 'th2' + ymax\n let markedColor\n if (checkBinState(id)) {\n markedColor = themeProvider.getSecondaryAccentColor()\n } else {\n markedColor = color\n }\n // fill bin data\n const binData = `id: ${id};\n content: ${c};\n color: ${color};\n yTitle: ${yTitle};\n xTitle: ${xTitle};\n absoluteContent: ${absoluteContent};\n binName: ${binName};\n xMin: ${xmin};\n yMin: ${ymin};\n xMax: ${xmax};\n yMax: ${ymax};\n xCenter: ${xcenter};\n yCenter: ${ycenter};\n xWidth: ${xwidth};\n yWidth: ${ywidth};\n markedColor: ${markedColor};\n selectColor: ${themeProvider.getSecondaryAccentColor()};\n axisX: ${themeProvider.getAxisColor('x')};\n axisY: ${themeProvider.getAxisColor('y')};\n axisZ: ${themeProvider.getAxisColor('z')}`\n\n data.id = id\n data.positionX = xmin\n data.positionY = centeredYPosition\n data.positionZ = ymin\n data.scaleX = xwidth / 2\n data.scaleY = c\n data.scaleZ = ywidth / 2\n data.color = markedColor\n data.class = 'clickable'\n data.data = binData\n\n model.bins.attributes[count] = entityTemplate.binTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'bins', 'a-box')\n count++\n }\n }\n }\n\n entityBuilder.deleteUnnecessaryElements(count, ['bins'])\n\n // generate YYYYYYYYYYYYYYYYYYYYYYYYYYYY axis\n // left up\n data.id = 1500 + count\n data.positionX = maxXLength + 0.5\n data.positionY = 0\n data.positionZ = maxYLength + 0.5\n data.rotationX = 270\n data.rotationY = 360\n data.rotationZ = 0\n data.width = 2\n data.height = 2\n data.value = `0`\n data.color = themeProvider.getAxisColor('y')\n model.normalXAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'normalXAxis', 'a-entity')\n\n // left down\n data.positionZ = yOffset - 2.5\n data.rotationX = 270\n data.rotationY = 180\n model.reversedYAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'reversedYAxis', 'a-entity')\n\n // right up\n data.positionX = xOffset - 2.5\n data.positionZ = maxYLength + 0.5\n\n model.normalYAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'normalYAxis', 'a-entity')\n\n // right down\n data.positionZ = yOffset - 2.5\n data.rotationY = 180\n model.reversedXAxis.attributes[0] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'reversedXAxis', 'a-entity')\n\n // generate ZZZZZZZZZZZZZZZZZZ axis\n count = 1\n for (let iy = yOffset; iy <= maxYLength; iy++) {\n data.id = 1500 + count\n data.positionX = xOffset - 2.5\n data.positionY = 0\n data.positionZ = iy - 1\n data.rotationX = 270\n data.rotationY = 180\n data.rotationZ = 0\n data.width = 2\n data.height = 1\n data.value = `${yLabels[iy - 1] ? yLabels[iy - 1].fString : iy - 1}`\n data.color = themeProvider.getAxisColor('z')\n\n model.normalYAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'normalYAxis', 'a-entity')\n\n data.id = 4500 + count\n data.positionX = maxXLength + 0.5\n data.rotationY = 360\n data.value = `${yLabels[iy - 1] ? yLabels[iy - 1].fString : iy - 1}`\n\n // axis title\n model.reversedYAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(\n count,\n histogramElm,\n 'reversedYAxis',\n 'a-entity'\n )\n count++\n }\n\n entityBuilder.deleteUnnecessaryElements(count, [\n 'normalYAxis',\n 'reversedYAxis'\n ])\n\n count = 1\n // generate XXXXXXXXXXXXXXXX axis\n for (let ix = xOffset; ix <= maxXLength; ix++) {\n data.id = 1500 + count\n data.positionX = ix - 1\n data.positionY = 0\n data.positionZ = yOffset - 2.5\n data.rotationX = 270\n data.rotationY = 270\n data.rotationZ = 0\n data.width = 2\n data.height = 1\n data.value = `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`\n data.color = themeProvider.getAxisColor('x')\n\n model.normalXAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(count, histogramElm, 'normalXAxis', 'a-entity')\n\n data.id = 4500 + count\n data.positionZ = maxYLength + 0.5\n data.rotationX = 270\n data.rotationY = 90\n data.value = `${xLabels[ix - 1] ? xLabels[ix - 1].fString : ix - 1}`\n\n model.reversedXAxis.attributes[count] = entityTemplate.axisTemplate(data)\n entityBuilder.updateElement(\n count,\n histogramElm,\n 'reversedXAxis',\n 'a-entity'\n )\n count++\n }\n\n entityBuilder.deleteUnnecessaryElements(count, [\n 'normalXAxis',\n 'reversedXAxis'\n ])\n // add x label\n data.positionX = xOffset\n data.positionY = 0\n data.positionZ = yOffset - 4\n data.rotationX = 270\n data.rotationY = 180\n data.rotationZ = 0\n data.width = 4\n data.height = 1\n data.value = xTitle\n data.id = 'downLabel'\n\n model.labels.attributes[0] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(0, histogramElm, 'labels', 'a-entity')\n\n data.positionX = maxXLength - 2.5\n data.positionZ = maxYLength + 2\n data.rotationY = 0\n data.id = 'upLabel'\n\n model.labels.attributes[1] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(1, histogramElm, 'labels', 'a-entity')\n\n // add y label\n data.positionX = xOffset - 4\n data.positionY = 0\n data.positionZ = yOffset + 0.5\n data.rotationX = 270\n data.rotationY = 270\n data.rotationZ = 0\n data.width = 4\n data.height = 1\n data.value = yTitle\n data.color = themeProvider.getAxisColor('z')\n data.id = 'leftLabel'\n\n model.labels.attributes[2] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(2, histogramElm, 'labels', 'a-entity')\n\n data.positionX = maxXLength + 2\n data.positionZ = maxYLength - 2.5\n data.rotationX = 270\n data.rotationY = 90\n data.id = 'rightLabel'\n\n model.labels.attributes[3] = entityTemplate.labelTemplate(data)\n entityBuilder.updateElement(3, histogramElm, 'labels', 'a-entity')\n\n data.positionX = xOffset - 90\n data.positionY = -6.5\n data.positionZ = yOffset + 90\n data.rotationX = 0\n data.rotationY = 123\n data.rotationZ = 0\n data.title = histogram.fTitle\n data.color = themeProvider.getPrimaryFontColor()\n\n const back = {}\n back.positionX = 0\n back.positionY = 0\n back.positionZ = -1\n back.width = 170\n back.height = 30\n back.color = 'white'\n\n model.titles.attributes[0] = entityTemplate.titleTemplate(data, back)\n entityBuilder.updateElement(0, histogramElm, 'titles', 'a-entity')\n\n // add file title\n data.positionX = xOffset + 120\n data.positionZ = yOffset - 70\n data.rotationY = 330\n data.title = histogram.fName\n\n model.titles.attributes[1] = entityTemplate.titleTemplate(data, back)\n entityBuilder.updateElement(1, histogramElm, 'titles', 'a-entity')\n}\n\n// edit bin content to range 0 - 1\nconst optimizeBinContent = (binContent, maxContent) => {\n if (binContent <= 0) return 0\n if (maxContent > 1) {\n // round to 2 decimal numbers\n binContent =\n Math.round((binContent / maxContent + Number.EPSILON) * 100) / 100\n }\n\n return binContent\n}\n\nexport { createTH2Histogram }\n// export { createTH3Histogram }\n","// component to insert data to th2i bin\nimport AFRAME from 'aframe'\n/**\n * A-Frame interakčný komponent pridávajúci funkcionalitu entite binu TH2 histogram, ktorá umožňuje zmenu atribútov entity.\n * @component binth2\n * @param {string} id - Identifikátor binu\n * @param {number} content - Hodnota optimalizovaného obsahu binu (predvolená 0)\n * @param {number} absoluteContent - Hodnota neoptimalizovaného obsahu binu (predvolená 0)\n * @param {string} binName - Meno binu\n * @param {string} xTitle - Titulok na osi x\n * @param {string} yTitle - Titulok na osi y\n * @param {number} xMin - Súradnica min binu na osi x\n * @param {number} yMin - Súradnica min binu na osi y\n * @param {number} xMax - Súradnica max binu na osi x\n * @param {number} yMax - Súradnica max binu na osi y\n * @param {number} xCenter - Súradnica stredu binu na osi x\n * @param {number} yCenter - Súradnica stredu binu na osi y\n * @param {number} xWidth - Šírka binu na osi x\n * @param {number} yWidth - Šírka binu na osi y\n * @param {string} color - Farba binu\n * @param {string} axisX - Farba označení na osi x\n * @param {string} axisY - Farba označení na osi y\n * @param {string} axisZ - Farba označení na osi z\n * @param {string} selectColor - Farba určená za zvolenie binu\n * @param {string} markedColor - Farba určená pre označenie binu (v poli označených binov)\n * @module th2AframeComponent\n */\n\n// aframe component for positioning histogram in scene\nAFRAME.registerComponent('binth2', {\n schema: {\n id: { type: 'string' },\n content: { default: 0 },\n absoluteContent: { default: 0 },\n binName: { default: '' },\n xTitle: { type: 'string' },\n yTitle: { type: 'string' },\n xMin: { type: 'number' },\n yMin: { type: 'number' },\n xMax: { type: 'number' },\n yMax: { type: 'number' },\n xCenter: { type: 'number' },\n yCenter: { type: 'number' },\n xWidth: { type: 'number' },\n yWidth: { type: 'number' },\n color: { type: 'string' },\n axisX: { type: 'string' },\n axisY: { type: 'string' },\n axisZ: { type: 'string' },\n selectColor: { type: 'string' },\n markedColor: { type: 'string' }\n },\n\n init: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH2',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n },\n update: function () {\n const el = this.el // Entity.\n el.userData = {\n typeName: 'TH2',\n id: this.data.id,\n content: this.data.content,\n absoluteContent: this.data.absoluteContent,\n binName: this.data.binName,\n xTitle: this.data.xTitle,\n yTitle: this.data.yTitle,\n xMin: this.data.xMin,\n yMin: this.data.yMin,\n xMax: this.data.xMax,\n yMax: this.data.yMax,\n xCenter: this.data.xCenter,\n yCenter: this.data.yCenter,\n xWidth: this.data.xWidth,\n yWidth: this.data.yWidth,\n color: this.data.color,\n axisX: this.data.axisX,\n axisY: this.data.axisY,\n axisZ: this.data.axisZ,\n selectColor: this.data.selectColor,\n markedColor: this.data.markedColor\n }\n }\n})\n","/* object for creating the histogram demos */\n\nexport default class HistogramDemoFactory {\n #jsroot\n\n constructor(jsroot) {\n this.#jsroot = jsroot\n }\n\n createTH2DemoHistogram(xLength, yLength, initialContent, contentIncrement) {\n const histo = this.#jsroot.createHistogram('TH2I', xLength, yLength)\n let cnt = initialContent\n for (let iy = 1; iy <= 20; iy++)\n for (let ix = 1; ix <= 20; ix++) {\n const bin = histo.getBin(ix, iy)\n let val = 0\n val = cnt\n histo.setBinContent(bin, val)\n // cnt += 0.1\n cnt += contentIncrement\n }\n\n histo.fXaxis.fTitle = 'x Axis'\n histo.fYaxis.fTitle = 'y Axis'\n histo.fName = \"You don't have a valid file path\"\n histo.fTitle = 'This is a TH2 histogram demo'\n histo.fMaximum = cnt\n\n return histo\n }\n\n createTH3DemoHistogram(\n xLength,\n yLength,\n zLength,\n initialContent,\n contentIncrement\n ) {\n const histo = this.#jsroot.createHistogram(\n 'TH3I',\n xLength,\n yLength,\n zLength\n )\n let cnt = initialContent\n\n for (let iz = 1; iz <= 20; iz++)\n for (let iy = 1; iy <= 20; iy++)\n for (let ix = 1; ix <= 20; ix++) {\n const bin = histo.getBin(ix, iy, iz)\n let val = 0\n val = cnt\n histo.setBinContent(bin, val)\n // cnt += 0.0005\n cnt += contentIncrement\n }\n\n histo.fXaxis.fTitle = 'x Axis'\n histo.fYaxis.fTitle = 'y Axis'\n histo.fZaxis.fTitle = 'z Axis'\n histo.fName = \"You don't have a valid file path\"\n histo.fTitle = 'This is a TH3 histogram demo'\n histo.fMaximum = cnt\n\n return histo\n }\n}\n","import AFRAME from 'aframe'\nimport { NdmVrStorageService } from '../../services/ndmVrStorageService'\nimport { createTH2Histogram } from '../../utils/histogramAframeFactory'\nimport '../../aframeComponents/cursorEventAframeComponent'\nimport '../../aframeComponents/th2AframeComponent'\nimport '../../aframeComponents/thAframeComponent'\nimport '../../aframeComponents/histogramAframeComponent'\nimport { histogramTH2Service } from '../../observables/histogramSubject'\nimport {\n initialKeyboardController,\n keyReleaseHandlerFunction,\n keyPressHandlerFunction,\n keyboardUpdateCameraReference\n} from '../../controllers/keyboardController'\nimport { CameraService } from '../../services/cameraService'\nimport HistogramDemoFactory from '../../utils/DefaultHistogram'\n\nexport default AFRAME.registerComponent('th2-histogram', {\n schema: {\n section: { type: 'string' },\n filename: { type: 'string' },\n theme: { type: 'string', default: 'def' },\n position: {\n name: 'position',\n xValue: 0,\n yValue: 0,\n zValue: 0\n },\n scale: {\n name: 'scale',\n xValue: 2,\n yValue: 2,\n zValue: 2\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 0,\n zValue: 0\n }\n },\n init: function () {\n const el = this.el\n initialKeyboardController(this.schema, el)\n // keyboard listeners\n document.addEventListener('keydown', keyPressHandlerFunction)\n document.addEventListener('keyup', keyReleaseHandlerFunction)\n this.JSROOT = window.JSROOT\n this.demoHistogramService = new HistogramDemoFactory(this.JSROOT)\n this.localStorageService = new NdmVrStorageService()\n this.cameraService = new CameraService()\n this.render = false\n this.histogram = null\n this.model = {\n bins: {\n elements: [],\n attributes: []\n },\n labels: {\n elements: [],\n attributes: []\n },\n titles: {\n elements: [],\n attributes: []\n },\n banners: {\n elements: [],\n attributes: []\n },\n normalXAxis: {\n elements: [],\n attributes: []\n },\n reversedXAxis: {\n elements: [],\n attributes: []\n },\n normalYAxis: {\n elements: [],\n attributes: []\n },\n reversedYAxis: {\n elements: [],\n attributes: []\n }\n }\n this.section = null\n // functions\n\n const updateHistogramSection = (newSection) => {\n console.log(newSection)\n this.section.xOffset = newSection.xOffset\n this.section.yOffset = newSection.yOffset\n this.range = newSection.range\n\n this.cameraService.setCameraPosition(newSection)\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n }\n const handleSubscription = (section) => {\n this.localStorageService.storeTH2Offsets(\n section.xOffset,\n section.yOffset,\n section.range\n )\n updateHistogramSection(section)\n }\n\n this.subscription = histogramTH2Service\n .getChangedSection()\n .subscribe(handleSubscription)\n },\n update: function () {\n keyboardUpdateCameraReference()\n this.section = JSON.parse(this.data.section)\n this.JSROOT.openFile(this.data.filename)\n .then((file) => file.readObject('hUsersVsProjects'))\n .then((obj) => {\n this.localStorageService.initHistogramData(obj)\n this.histogram = obj\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n })\n .then(() => console.log('drawing completed'))\n .catch((error) => {\n this.histogram = this.demoHistogramService.createTH2DemoHistogram(\n 20,\n 20,\n 0,\n 0.1\n )\n this.localStorageService.initHistogramData(this.histogram)\n createTH2Histogram(\n this.el,\n this.model,\n this.histogram,\n this.section.xOffset,\n this.section.yOffset,\n this.section.range,\n this.data.theme\n )\n this.render = true\n console.log(error)\n })\n },\n tick: function () {\n if (this.render) {\n this.render = false\n console.log(this.section)\n console.log(this.elements)\n }\n },\n remove: function () {\n this.subscription.unsubscribe()\n document.removeEventListener('keydown', keyPressHandlerFunction)\n document.removeEventListener('keyup', keyReleaseHandlerFunction)\n }\n})\n","import AFRAME from 'aframe'\n// import { setBannerPositioning } from '../utils/histogramFactory'\n\n// aframe component for positioning info banner in scene\nexport default AFRAME.registerComponent('banner-control', {\n schema: {\n position: {\n name: 'position',\n xValue: -1.28,\n yValue: 0.3,\n zValue: -1\n },\n scale: {\n name: 'scale',\n xValue: 0.5,\n yValue: 0.7,\n zValue: 0.1\n },\n rotation: {\n name: 'rotation',\n xValue: 0,\n yValue: 20,\n zValue: 0\n }\n },\n init: function () {\n // const el = this.el\n // setBannerPositioning(el, this.schema)\n }\n})\n","/* add listeners for oculus controller */\n/**\n * Modul obsahuje implementované metódy, ktoré reagujú na vstupy používateľa.\n * Funkcie sú určené pre komponenty slúžiace definovanie listenerov pre ovládač Oculusu.\n * @module oculusController\n */\nimport { CameraService } from '../services/cameraService'\nimport {\n histogramTH2Service,\n histogramTH3Service\n} from '../observables/histogramSubject'\nimport binSubject from '../observables/binSubject'\nimport cameraSubject from '../observables/cameraSubject'\nimport jsrootService from '../services/jsrootService'\n\n/*\nexport class OculusController {\n #aframeObj\n #cameraService\n constructor(aframeObj) {\n this.#aframeObj = aframeObj\n this.#cameraService = new CameraService()\n }\n\n #thumbStick = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSection('yOffset', 'TH2', false)\n histogramTH3Service.changeHistogramSection('yOffset', 'TH3', false)\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSection('yOffset', 'TH2', true)\n histogramTH3Service.changeHistogramSection('yOffset', 'TH3', true)\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSection('xOffset', 'TH2', false)\n histogramTH3Service.changeHistogramSection('xOffset', 'TH3', false)\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSection('xOffset', 'TH2', true)\n histogramTH3Service.changeHistogramSection('xOffset', 'TH3', true)\n }\n }\n\n // set listeners for positioning\n setControllerOnEntity(data) {\n const aframeObj = this.#aframeObj\n const geoAttributes = [data.position, data.scale, data.rotation]\n // if (this.#cameraService === null) this.#cameraService = new CameraService()\n // set initial position, scale, rotation of the histogram\n for (let i = 0; i < 3; i++) {\n this.#aframeObj.setAttribute(\n geoAttributes[i].name,\n `${geoAttributes[i].xValue} ${geoAttributes[i].yValue} ${geoAttributes[i].zValue}`\n )\n }\n\n // add positioning listeners\n aframeObj.addEventListener('thumbstickmoved', this.#thumbStick)\n aframeObj.addEventListener('xbuttondown', () => {\n this.#cameraService.verticalMoveCamera(false)\n })\n aframeObj.addEventListener('ybuttondown', () => {\n this.#cameraService.verticalMoveCamera(true)\n })\n }\n}\n*/\n\n// let aframeObj\nlet cameraService = new CameraService()\n\n/**\n * Zmena zobrazovanej sekcie histogramu o predvolený rozsah (1) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickByOwnOffset = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n false\n )\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n false\n )\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n false\n )\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n false\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n false\n )\n }\n}\n\n/**\n * Zmena zobrazovanej sekcie histogramu o špecifikovaný rozsah (podľa nastavení používateľa) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickByDefaultOffset = (event) => {\n if (event.detail.y > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n false,\n true\n )\n }\n if (event.detail.y < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'yOffset',\n 'TH3',\n true,\n true\n )\n }\n if (event.detail.x < -0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n true,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n true,\n true\n )\n }\n if (event.detail.x > 0.95) {\n histogramTH2Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH2',\n false,\n true\n )\n histogramTH3Service.changeHistogramSectionByOffset(\n 'xOffset',\n 'TH3',\n false,\n true\n )\n }\n}\n\n/**\n * Funkcia, zabezpečujúca horizontálny pohyb kamery po osiach.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @param {number} speed - Definuje rýchlosť pohybu\n * @return {void}\n */\nconst thumbStickForMoving = (event, speed) => {\n if (event.detail.y > 0.95) {\n cameraService.horizontalMoveCamera('z', false, speed)\n }\n if (event.detail.y < -0.95) {\n cameraService.horizontalMoveCamera('z', true, speed)\n }\n if (event.detail.x < -0.95) {\n cameraService.horizontalMoveCamera('x', true, speed)\n }\n if (event.detail.x > 0.95) {\n cameraService.horizontalMoveCamera('x', false, speed)\n }\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (len X a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickPredefinedPosition = (event) => {\n if (event.detail.y > 0.95) {\n cameraService.setPredefinedUpPosition()\n }\n if (event.detail.y < -0.95) {\n cameraService.setPredefinedDownPosition()\n }\n if (event.detail.x < -0.95) {\n cameraService.setPredefinedLeftPosition()\n }\n if (event.detail.x > 0.95) {\n cameraService.setPredefinedRightPosition()\n }\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (X a Y a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst thumbStickPredefinedPositionWithOffset = (event) => {\n if (event.detail.y > 0.95) {\n cameraService.setPredefinedUpPositionWithOffset()\n }\n if (event.detail.y < -0.95) {\n cameraService.setPredefinedDownPositionWithOffset()\n }\n if (event.detail.x < -0.95) {\n cameraService.setPredefinedLeftPositionWithOffset()\n }\n if (event.detail.x > 0.95) {\n cameraService.setPredefinedRightPositionWithOffset()\n }\n}\n\n/**\n * Funkcia, zobrazenie novej sekcie smerom hore.\n * @param {boolean} defaultRange - Ak je True tak bude použitý range (1), ak je False tak (nastavený rozsah)\n * @return {void}\n */\nconst oculusUpSection = (defaultRange) => {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n true,\n defaultRange\n )\n}\n\n/**\n * Funkcia, zobrazenie novej sekcie smerom dolu\n * @param {boolean} defaultRange - Ak je True tak bude použitý range (1), ak je False tak (nastavený rozsah)\n * @return {void}\n */\nconst oculusDownSection = (typeOfRange) => {\n histogramTH3Service.changeHistogramSectionByOffset(\n 'zOffset',\n 'TH3',\n false,\n typeOfRange\n )\n}\n\n// const initialOculusController = (el) => {\n// aframeObj = el\n// }\n\n/**\n * Funkcia, aktualizuje servis kamery.\n * @return {void}\n */\nconst oculusUpdateCameraReference = () => {\n cameraService = new CameraService()\n}\n\n/**\n * Zmena zobrazovanej sekcie histogramu o špecifikovaný rozsah (podľa nastavení používateľa) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickFunction = (event) => {\n thumbStickByOwnOffset(event)\n}\n\n/**\n * Zmena zobrazovanej sekcie histogramu o predvolený rozsah (1) na ovladači Oculusu.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickWithGripFunction = (event) => {\n thumbStickByDefaultOffset(event)\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (len X a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickPredefinedCameraPosition = (event) => {\n thumbStickPredefinedPosition(event)\n}\n\n/**\n * Funkcia, zabezpečujúca zmenu pozície kamery na vopred definovanú pozíciu (X a Y a Z súradnica).\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @return {void}\n */\nconst oculusThumbStickPredefinedCameraPositionWithOffset = (event) => {\n thumbStickPredefinedPositionWithOffset(event)\n}\n\n/**\n * Funkcia, zabezpečujúca horizontálny pohyb kamery po osiach.\n * @param {Event} event - Definuje Event obsahujúci informácie o používateľovej interakcií\n * @param {Number} speed - Definuje rýchlosť pohybu\n * @return {void}\n */\nconst oculusThumbStickForMoving = (event, speed) => {\n thumbStickForMoving(event, speed)\n}\n\n/**\n * Funkcia, zabezpečí posunutie kamery smerom hore\n * @param {Number} speed - Určuje rýchlosť pohybu kamery\n * @return {void}\n */\nconst oculusXButtonDownFunction = (speed) => {\n cameraService.verticalMoveCamera(true, speed / 2)\n}\n\n/**\n * Funkcia, zabebpečí posunutie kamery smerom dolu\n * @param {Number} speed - Určuje rýchlosť pohybu kamery\n * @return {void}\n */\nconst oculusYButtonDownFunction = (speed) => {\n cameraService.verticalMoveCamera(false, speed / 2)\n}\n\n/**\n * Funkcia, zabezpečí označenie binu\n * @return {void}\n */\nconst oculusThumbStickMarkBin = () => {\n binSubject.saveSelectedBinToLocalStorage()\n}\n\n/**\n * Funkcia, zabezpečí odznačenie binu\n * @return {void}\n */\nconst oculusThumbStickUnmarkBin = () => {\n binSubject.deleteBinFromLocalStorage()\n}\n\n/**\n * Funkcia, zabezpečí prepnutie do špeciálneho módu, určeného funkciou\n * @return {void}\n */\nconst oculusShowFunctionView = () => {\n histogramTH2Service.changeHistogramFunction('feet', 'TH2')\n}\n\n/**\n * Funkcia, zabezpečí prepnutie do predvoleného vizualizačného módu\n * @return {void}\n */\nconst oculusShowDefaultView = () => {\n histogramTH2Service.changeHistogramFunction('default', 'TH2')\n}\n\n/**\n * Funkcia, zabezpečí prepínanie medzi zobrazeniami\n * @return {void}\n */\nconst oculusSwitchViewWithBanners = () => {\n cameraSubject.setVisibilityOfBanners('oculus')\n}\n\n/**\n * Funkcia, zabezpečí zmenu obsahu na paneloch\n * @return {void}\n */\nconst oculusChangeBannerContent = () => {\n cameraSubject.setUserState()\n}\n\n/**\n * Funkcia, zabezpečí rotovanie panelov\n * @return {void}\n */\nconst oculusShiftBanners = () => {\n cameraSubject.shiftBanners()\n}\n\n/**\n * Funkcia, prekreslí náhľady na paneloch vo VR\n * @return {void}\n */\nconst oculusRedrawHistogramBanners = () => {\n ;[\n 'th-mapping',\n 'bannerId_1',\n 'bannerId_2',\n 'bannerId_3',\n 'bannerId_4'\n ].forEach((targetId) => {\n if (document.getElementById(targetId) !== null) {\n jsrootService.displayImageOfProjection(\n 'projectionContainer',\n targetId,\n '500px',\n '400px'\n )\n }\n })\n}\n\n// export { initialOculusController }\nexport { oculusRedrawHistogramBanners }\nexport { oculusShiftBanners }\nexport { oculusChangeBannerContent }\nexport { oculusSwitchViewWithBanners }\nexport { oculusShowDefaultView }\nexport { oculusShowFunctionView }\nexport { oculusThumbStickUnmarkBin }\nexport { oculusThumbStickMarkBin }\nexport { oculusThumbStickFunction }\nexport { oculusThumbStickWithGripFunction }\nexport { oculusXButtonDownFunction }\nexport { oculusYButtonDownFunction }\nexport { oculusUpdateCameraReference }\nexport { oculusThumbStickPredefinedCameraPosition }\nexport { oculusThumbStickPredefinedCameraPositionWithOffset }\nexport { oculusUpSection }\nexport { oculusDownSection }\nexport { oculusThumbStickForMoving }\n","// component for modification aframe entity of histogram\n// manage functionality of camera\nimport AFRAME from 'aframe'\nimport {\n oculusXButtonDownFunction,\n oculusYButtonDownFunction,\n oculusUpdateCameraReference,\n oculusThumbStickPredefinedCameraPositionWithOffset,\n oculusThumbStickForMoving,\n oculusSwitchViewWithBanners,\n oculusChangeBannerContent\n} from '../controllers/oculusController'\n/**\n * A-Frame interakčný komponent zabezpečí možnosť používateľa interagovať s ľavým ovládačom zariadenia Oculus.\n * @component left-controller-logging\n * @module leftOculusAframeComponent\n */\n\n// aframe component for positioning histogram in scene\nexport default AFRAME.registerComponent('left-controller-logging', {\n init: function () {\n let gripActive = false\n let speed = 1\n const el = this.el\n // oculus listeners\n el.addEventListener('gripdown', () => {\n gripActive = true\n })\n el.addEventListener('gripup', () => {\n gripActive = false\n })\n el.addEventListener('thumbstickdown', () => {\n if (gripActive) {\n speed++\n if (speed > 20) speed = 20\n } else {\n speed--\n if (speed < 1) speed = 1\n }\n })\n el.addEventListener('thumbstickmoved', (event) => {\n if (gripActive) {\n oculusThumbStickPredefinedCameraPositionWithOffset(event)\n } else {\n oculusThumbStickForMoving(event, speed)\n }\n })\n el.addEventListener('ybuttondown', () => {\n if (gripActive) {\n oculusXButtonDownFunction(speed)\n } else {\n oculusSwitchViewWithBanners()\n }\n })\n el.addEventListener('xbuttondown', () => {\n if (gripActive) {\n oculusYButtonDownFunction(speed)\n } else {\n oculusChangeBannerContent()\n }\n })\n },\n\n update: function () {\n oculusUpdateCameraReference()\n }\n})\n","// component for modification aframe entity of histogram\n// manage functionality of histogram\nimport AFRAME from 'aframe'\nimport {\n oculusThumbStickFunction,\n oculusUpdateCameraReference,\n oculusUpSection,\n oculusDownSection,\n oculusThumbStickMarkBin,\n oculusThumbStickWithGripFunction,\n oculusThumbStickUnmarkBin,\n oculusShowFunctionView,\n oculusShowDefaultView,\n oculusRedrawHistogramBanners,\n oculusShiftBanners\n} from '../controllers/oculusController'\n/**\n * A-Frame interakčný komponent zabezpečí možnosť používateľa interagovať s pravým ovládačom zariadenia Oculus.\n * @component right-controller-logging\n * @module rightOculusAframeComponent\n */\n\n// aframe component for positioning histogram in scene\nexport default AFRAME.registerComponent('right-controller-logging', {\n init: function () {\n let gripActive = false\n const el = this.el\n // oculus listeners\n el.addEventListener('gripdown', () => {\n gripActive = true\n })\n el.addEventListener('gripup', () => {\n gripActive = false\n })\n el.addEventListener('thumbstickmoved', (event) => {\n if (gripActive) {\n oculusThumbStickFunction(event)\n } else {\n oculusThumbStickWithGripFunction(event)\n }\n })\n el.addEventListener('bbuttondown', () => {\n if (gripActive) {\n oculusUpSection(false)\n } else {\n oculusUpSection(true)\n }\n })\n el.addEventListener('abuttondown', () => {\n if (gripActive) {\n oculusDownSection(false)\n } else {\n oculusDownSection(true)\n }\n })\n el.addEventListener('thumbstickdown', () => {\n if (gripActive) {\n oculusShowFunctionView()\n } else {\n oculusShowDefaultView()\n }\n })\n el.addEventListener('triggerdown', () => {\n if (gripActive) {\n oculusThumbStickMarkBin()\n oculusRedrawHistogramBanners()\n } else {\n oculusThumbStickUnmarkBin()\n oculusShiftBanners()\n }\n })\n },\n\n update: function () {\n oculusUpdateCameraReference()\n }\n})\n","// imports\nimport JSrootHistogram from './components/JsrootHistogram'\nimport NdmVrScene from './components/NdmVrHistogramScene'\nimport HistogramTH2 from './components/AframeComponent'\nimport { NdmVrStorageService } from './services/ndmVrStorageService'\nimport Banner from './aframeComponents/infoBannerAframeComponent'\nimport LeftController from './aframeComponents/leftOculusController'\nimport RightController from './aframeComponents/rightOculusController'\nimport binDataDistributor from './observables/binDataDistributor'\n\n// create services\nconst ndmVrStorage = new NdmVrStorageService()\n\n// export\nexport {\n // react components\n JSrootHistogram,\n NdmVrScene,\n // export aframe components\n Banner,\n LeftController,\n RightController,\n HistogramTH2,\n // export necessary services\n ndmVrStorage,\n // rxjs bin data distributor\n binDataDistributor\n}\n"],"names":["JsrootSubject","Subject","showBinProjection","binData","next","getServiceEvent","asObservable","jsrootSubject","JsrootService","createTH1Projection","projectionAxis","info","idTargetElm","axisArray","projectionTargetAxis","primary","secondary","primaryAxis","secondaryAxis","binAxis","toLowerCase","h1","createHistogram","obj","fNbins","fXaxis","fXmin","fXmax","fTitle","fLabels","currLabel","arr","length","bin","fString","n","console","log","setBinContent","getBinContent","fName","binName","name","redraw","openTH1Projection","projections","projIndex","xBin","xPos","yBin","yPos","projection","fFolders","setTimeout","displayImageOfProjection","e","idSourceElement","idTargetElement","width","height","sourceSvgElement","document","getElementById","firstElementChild","targetElement","canvas","createElement","setAttribute","svgString","XMLSerializer","serializeToString","ctx","getContext","fillStyle","fillRect","DOMURL","self","URL","webkitURL","img","Image","svg","Blob","type","url","createObjectURL","onload","drawImage","png","toDataURL","revokeObjectURL","src","JSROOT","jsrootService","styles","box","display","margin","textAlign","align","paddingTop","form","paddingBottom","label","input","border","borderRadius","fontSize","color","opacity","JsrootHistogram","histogram","projectionAxes","subscription","useState","axis","setAxis","selectedBin","setSelectedBin","handleInputChange","event","target","value","handleSubscription","data","renderForm","createAndDisplayProjection","useEffect","jsrootLibrary","window","subscribe","unsubscribe","CameraSubject","setVisibilityOfBanners","inputDevice","device","shiftBanners","setUserState","getCameraSubject","cameraSubject","CameraService","verticalMoveCamera","moveUp","speed","object3D","position","y","horizontalMoveCamera","increment","elm","offset","rotation","newXPos","x","newZPos","z","newYPos","setCameraPosition","offsets","zOffset","undefined","xOffset","yOffset","setPredefinedDownPosition","labelElement","setPredefinedUpPosition","setPredefinedRightPosition","setPredefinedLeftPosition","setPredefinedDownPositionWithOffset","setPredefinedUpPositionWithOffset","setPredefinedRightPositionWithOffset","setPredefinedLeftPositionWithOffset","HistogramSubject","changeHistogramSectionByOffset","histogramType","defaultRange","changeHistogramFunction","typeFunction","fFunction","changeTypeOfBinMark","binMarkMode","getChangedSection","histogramTH2Service","histogramTH3Service","BinSubject","saveSelectedBinToLocalStorage","deleteBinFromLocalStorage","getKeyboardEvent","binSubject","keyPressed","cameraService","aframeObj","geoAttributes","toolsSelector","activeTool","handlePositioning","property","difference","key","xValue","yValue","zValue","handleChangeHistogramSectionByDefaultRange","handleChangeHistogramSectionByOwnRange","keyPressHandlerFunction","Z","X","C","c","Shift","shiftKey","forEach","targetId","switchDisplayModeOnBin","preventDefault","binDisplayMode","deltaY","getActiveTool","keyReleaseHandlerFunction","initialKeyboardController","object","scale","i","keyboardUpdateCameraReference","NdmVrStorageService","filter","item","id","containThisBin","updatedArray","storeBinToLocalStorage","push","setItem","JSON","stringify","getBinsFromLocalStorage","selectedBins","parse","getItem","localStorage","storeCurrentBinToLocalStorage","getCurrentBinFromLocalStorage","currentBin","loadProperty","storeProperty","initHistogramData","_typename","includes","storeTH3HistogramLimits","storeTH2HistogramLimits","storeTH2Offsets","range","section","storeTH3Offsets","storeOffsets","storeFilePath","filePath","loadFilePath","filename","loadTH2Offsets","loadTH3Offsets","loadOffsets","localStorageService","BinDataDistributor","sendDataOfTheSelectedBin","getBinDistributor","binDataDistributor","AFRAME","registerComponent","init","el","clickCount","checked","addEventListener","setHover","evt","intersection","detail","save","userData","markedColor","selectColor","face","normal","axisZ","axisY","axisX","setPassive","setActive","camera","content","infoBanner","planes","childNodes","typeName","zCor","zTitle","zMin","zMax","xCor","xTitle","xMin","xMax","yCor","yTitle","yMin","yMax","absoluteContent","update","NdmVrCamera","activeToolHighlight","binDataSubscription","selectedBinData","setSelectedBinData","setRotation","prevPosition","setPrevPosition","setInputDevice","show","setShow","showProjection","setShowProjection","setActiveTool","String","zPos","compileRotation","currentRotation","renderProjectionsBanners","renderBannersWithControls","hideMappingBanner","banner","showMappingBanner","renderActiveTool","tools","toolNumXPos","map","tool","txt","txtPos","indexOf","renderOculusControls","utils","checkHeadsetConnected","schema","xCenter","yCenter","zCenter","xWidth","yWidth","zWidth","delay","def","colorPalette","accent","font","fire","nebula","rainforest","nature","water","sunflower","blood","magma","jupiter","magic","ThemeProvider","theme","palette","xAxis","yAxis","zAxis","primaryAccent","secondaryAccent","primaryFont","secondaryFont","getAxisColor","getPrimaryAccentColor","getSecondaryAccentColor","getPrimaryFontColor","getSecondaryFontColor","getBinColor","fullContent","sum","HistogramReactFactory","uniqueName","xInitial","yInitial","zInitial","getXOffset","getYOffset","getZOffset","getRange","offsetValue","limit","currOffset","binId","positionX","positionY","positionZ","rotationX","rotationY","rotationZ","fontColor","geometry","primitive","text","labelHandler","material","animation","fromX","fromY","fromZ","toX","toY","toZ","elements","bins","labels","banners","ground","titles","axisLabels","xcenter","xmin","xmax","xwidth","ycenter","ymin","ymax","ywidth","zcenter","zmin","zmax","zwidth","count","maxXLength","maxYLength","maxZLength","fYaxis","fZaxis","xLabels","yLabels","zLabels","currentBinScales","iz","iy","ix","GetBinCenter","GetBinLowEdge","fMaximum","size","posX","posY","posZ","fromWidth","fromHeight","fromDepth","toWidth","toHeight","toDepth","animation2","animation3","fromColor","toColor","normalAxis","reversedAxis","Math","round","Number","EPSILON","bannerWidthX","bannerWidthY","depth","transparent","projectionFunction","centeredYPosition","projectionColor","innerText","binContent","maxContent","limits","axisOffset","result","xIndex","yIndex","projectionHistogram","LineColor","fFunctions","fLineColor","previousBin","prevBin","initializeFactory","setUniqueName","setTheme","setHistogram","setSection","setRange","getElements","updateSection","NdmVrHistogram3D","histoSection","factory","mode","setMode","setElements","binMarkState","setBinMarkState","prevState","title","axisLabel","NdmVrLaboratory","NdmVrScene","zIndex","minHeight","background","EntityBuilder","model","updateElement","histogramElm","element","entityType","createTitle","attributes","newElement","appendChild","deleteUnnecessaryElements","newLength","remove","Element","checkEntityType","feature","createBannerElement","linesCount","parent","array","createBannerLines","append","line","child","EntityTemplate","bannerTemplate","lineData","backgroundData","bannerBackgroundTemplate","lineTemplate","binTemplate","scaleX","scaleY","scaleZ","clas","binTh2","binth2","mouseevent","labelTemplate","axisTemplate","titleTemplate","textData","back","titleTextTemplate","checkBinState","createTH2Histogram","entityTemplate","entityBuilder","themeProvider","optimizeBinContent","normalXAxis","reversedYAxis","normalYAxis","reversedXAxis","HistogramDemoFactory","jsroot","createTH2DemoHistogram","xLength","yLength","initialContent","contentIncrement","histo","cnt","getBin","val","createTH3DemoHistogram","zLength","demoHistogramService","render","updateHistogramSection","newSection","openFile","then","file","readObject","error","tick","removeEventListener","thumbStickByOwnOffset","thumbStickByDefaultOffset","thumbStickForMoving","thumbStickPredefinedPositionWithOffset","oculusUpSection","oculusDownSection","typeOfRange","oculusUpdateCameraReference","oculusThumbStickFunction","oculusThumbStickWithGripFunction","oculusThumbStickPredefinedCameraPositionWithOffset","oculusThumbStickForMoving","oculusXButtonDownFunction","oculusYButtonDownFunction","oculusThumbStickMarkBin","oculusThumbStickUnmarkBin","oculusShowFunctionView","oculusShowDefaultView","oculusSwitchViewWithBanners","oculusChangeBannerContent","oculusShiftBanners","oculusRedrawHistogramBanners","gripActive","ndmVrStorage"],"mappings":"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"}
|