/*jshint esversion: 6 */ import * as THREE from 'three'; // import { RoundedBoxGeometry } from 'three/addons/geometries/RoundedBoxGeometry.js'; import {FontLoader} from 'three/addons/loaders/FontLoader.js'; import {TextGeometry} from 'three/addons/geometries/TextGeometry.js'; // rack export function rack(param) { const width=800, height=2000, depth = param.depth? param.depth: 800, color=0xf0f0f0; const gunObject = new THREE.Object3D(); const gunmaterial = new THREE.MeshLambertMaterial({color: color}); const gungeometry = new THREE.BoxGeometry(width, height, depth); const gunmesh = new THREE.Mesh(gungeometry, gunmaterial); const rackObject = new THREE.Object3D(); rackObject.add(gunmesh); rackObject.position.set(width/2, height/2, depth/2); gunObject.add(rackObject); return gunObject; } // transparent wall export function wall(param) { const length=3000; const material = new THREE.MeshBasicMaterial({color: 0xff8080, transparent: true, opacity: 0.2, side: THREE.DoubleSide,}); const geometry = new THREE.CylinderGeometry(10 /*radiusTop*/, 10 /*radiusBottom*/, length /*height*/, 4 /*radialSegments*/, 2 /*heightSegments*/, false /*openEnded*/,0 /*thetaStart*/, Math.PI * 2 /*thetaLength*/); const chamberMesh = new THREE.Mesh(geometry, material); chamberMesh.rotateX(Math.PI * 0.5); chamberMesh.scale.setZ(100); chamberMesh.rotatedX = true; return chamberMesh; } // label export function label(param) { const text=param.name, height=-50; const length = param && param.labelReverse && param.labelReverse[1]? param.labelReverse[1]: -3000; const depth = param && param.labelReverse && param.labelReverse[2]? param.labelReverse[2]: -3000; let size=800; const materialBase = new THREE.MeshLambertMaterial({color: 0xff0000}); const objLabel = new THREE.Object3D(); let group, textMesh, textGeo, materials; let textheight = 50; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); objLabel.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = - 0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x ); textMesh = new THREE.Mesh( textGeo, materialBase ); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(size, [length, height, depth], [Math.PI*0.5, Math.PI, 0]); return objLabel; } export function rack2(param) {param.depth=600; return rack(param);} export function rv(param) { const width=800, height=2500, depth=800; const rv = new THREE.Object3D(); const rv_rackObject = new THREE.Object3D(); const pspump_rackObject = new THREE.Object3D(); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363}); const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xcfcfcf}); const greenmaterial = new THREE.MeshLambertMaterial({color: 0x17fc03}); const Darkwhitematerial = new THREE.MeshLambertMaterial({color: 0xbababa}); const bluematerial = new THREE.MeshLambertMaterial({color: 0x0053d9}); const softbluematerial = new THREE.MeshLambertMaterial({color: 0x2b7cff}); const screenmaterial = new THREE.MeshLambertMaterial({color: 0xdeebff}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000d0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rv.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(800, 90, 800); rv.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850, 2330, 550], [0, Math.PI / 2, 0]); // rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, softbluematerial); //rrmesh.position.set( 0, 0 , -810); rv_rackObject.add(rrmesh); //front yellow tag const Ftarget = new THREE.BoxGeometry(2, 90, 600); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 1200 , -5); rv_rackObject.add(Ftargetmesh); //Rear yellow tag const Rtarget = new THREE.BoxGeometry(2, 90, 600); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 1200 , -5); rv_rackObject.add(Rtargetmesh); //edge lle const llegeometry = new THREE.BoxGeometry(width-750, height, depth-750); const llemesh = new THREE.Mesh(llegeometry, bluematerial); llemesh.position.set( -425, 0 , -365); rv_rackObject.add(llemesh); //edge lre const lregeometry = new THREE.BoxGeometry(width-750, height, depth-750); const lremesh = new THREE.Mesh(lregeometry, bluematerial); lremesh.position.set( -425, 0 , 380); rv_rackObject.add(lremesh); //edge lue const luegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const luemesh = new THREE.Mesh(luegeometry, bluematerial); luemesh.position.set( -425, 1225 , 3); rv_rackObject.add(luemesh); //edge lde const ldegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const ldemesh = new THREE.Mesh(ldegeometry, bluematerial); ldemesh.position.set( -425, -1230 , 3); rv_rackObject.add(ldemesh); //silverbase const drawer1geometry = new THREE.BoxGeometry(10, 2450, 750); const drawer1geometrymesh = new THREE.Mesh(drawer1geometry, silvermaterial); drawer1geometrymesh.position.set( -400, 0 , -10); rv_rackObject.add(drawer1geometrymesh); //base PS ionic Pump const baseionicpump = new THREE.BoxGeometry(10, 250, 300); const baseionicpumpmesh = new THREE.Mesh(baseionicpump, Darkwhitematerial); baseionicpumpmesh.position.set( -401, 900 , -150); pspump_rackObject.add(baseionicpumpmesh); //sceen PS ionic Pump const screenionicpump = new THREE.BoxGeometry(10, 60, 180); const screenionicpumpmesh = new THREE.Mesh(screenionicpump, screenmaterial); screenionicpumpmesh.position.set( -402, 950 , -150); pspump_rackObject.add(screenionicpumpmesh); //button ON OFF PS ionic Pump const buttonionicpump = new THREE.BoxGeometry(10, 50, 30); const buttonionicpumpmesh = new THREE.Mesh(buttonionicpump, materialVeryGreyDark); buttonionicpumpmesh.position.set( -402, 830 , -250); pspump_rackObject.add(buttonionicpumpmesh); //button ON Details const I = new THREE.BoxGeometry(3, 12, 3); const IMesh = new THREE.Mesh(I, Darkwhitematerial); IMesh.position.set( -407, 844 , -250); pspump_rackObject.add(IMesh); //button OFF Details const OI1 = new THREE.CylinderGeometry(8, 8, 2, 15); const OI1Mesh = new THREE.Mesh(OI1, Darkwhitematerial); OI1Mesh.rotateX(Math.PI * 0.5); OI1Mesh.rotateY(Math.PI * 1); OI1Mesh.rotateZ(Math.PI * 0.5); OI1Mesh.position.set( -407, 817 , -250); pspump_rackObject.add(OI1Mesh); //button OFF Details 2 const OI2 = new THREE.CylinderGeometry(6, 6, 2, 15); const OI2Mesh = new THREE.Mesh(OI2, materialVeryGreyDark); OI2Mesh.rotateX(Math.PI * 0.5); OI2Mesh.rotateY(Math.PI * 1); OI2Mesh.rotateZ(Math.PI * 0.5); OI2Mesh.position.set( -408, 817 , -250); pspump_rackObject.add(OI2Mesh); //border up const borderup = new THREE.BoxGeometry(10, 2, 260); const borderupmesh = new THREE.Mesh(borderup, bluematerial); borderupmesh.position.set( -402, 1000 , -150); pspump_rackObject.add(borderupmesh); //border mid const bordermid = new THREE.BoxGeometry(10, 2, 260); const bordermidmesh = new THREE.Mesh(bordermid, bluematerial); bordermidmesh.position.set( -402, 900 , -150); pspump_rackObject.add(bordermidmesh); //border left const borderleft = new THREE.BoxGeometry(10, 100, 2); const borderleftmesh = new THREE.Mesh(borderleft, bluematerial); borderleftmesh.position.set( -402, 950 , -280); pspump_rackObject.add(borderleftmesh); //border right const borderright = new THREE.BoxGeometry(10, 100, 2); const borderrightmesh = new THREE.Mesh(borderright, bluematerial); borderrightmesh.position.set( -402, 950 , -20); pspump_rackObject.add(borderrightmesh); //button1 PS ionic Pump const button1ionicpump = new THREE.BoxGeometry(10, 30, 30); const button1ionicpumpmesh = new THREE.Mesh(button1ionicpump, materialGreyDark); button1ionicpumpmesh.position.set( -402, 830 , -200); pspump_rackObject.add(button1ionicpumpmesh); //button2 up PS ionic Pump const button2ionicpump = new THREE.BoxGeometry(10, 30, 30); const button2ionicpumpmesh = new THREE.Mesh(button2ionicpump, materialGreyDark); button2ionicpumpmesh.position.set( -402, 860 , -160); pspump_rackObject.add(button2ionicpumpmesh); //button3 up PS ionic Pump const button3ionicpump = new THREE.BoxGeometry(10, 30, 30); const button3ionicpumpmesh = new THREE.Mesh(button3ionicpump, materialGreyDark); button3ionicpumpmesh.position.set( -402, 860 , -120); pspump_rackObject.add(button3ionicpumpmesh); //button4 up PS ionic Pump const button4ionicpump = new THREE.BoxGeometry(10, 30, 30); const button4ionicpumpmesh = new THREE.Mesh(button4ionicpump, materialGreyDark); button4ionicpumpmesh.position.set( -402, 860 , -80); pspump_rackObject.add(button4ionicpumpmesh); //button5 up PS ionic Pump const button5ionicpump = new THREE.BoxGeometry(10, 30, 30); const button5ionicpumpmesh = new THREE.Mesh(button5ionicpump, materialGreyDark); button5ionicpumpmesh.position.set( -402, 860 , -40); pspump_rackObject.add(button5ionicpumpmesh); rv_rackObject.add(pspump_rackObject); //CLONE PS PUMP const pump2 = pspump_rackObject.clone(); pump2.position.set( 0, 0 , 310); rv_rackObject.add(pump2); const pump3 = pspump_rackObject.clone(); pump3.position.set( 0, -260 , 0); rv_rackObject.add(pump3); const pump4 = pspump_rackObject.clone(); pump4.position.set( 0, -260 , 310); rv_rackObject.add(pump4); const pump5 = pspump_rackObject.clone(); pump5.position.set( 0, -520 , 0); rv_rackObject.add(pump5); const pump6 = pspump_rackObject.clone(); pump6.position.set( 0, -520 , 310); rv_rackObject.add(pump6); rv_rackObject.rotateY(Math.PI); rv_rackObject.position.set(400, 1250, 400); rv.add(rv_rackObject); return rv; } // ID rack export function rid(param) { const width=800, height=1900, depth=600; const rid = new THREE.Object3D(); const id_rackObject = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000c0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rid.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(800, 90, 650); rid.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850,1730,550], [0, Math.PI / 2, 0]); const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363}); const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xcfcfcf}); const greenmaterial = new THREE.MeshLambertMaterial({color: 0x17fc03}); const redmaterial = new THREE.MeshLambertMaterial({color: 0xff0000}); const yellowmaterial = new THREE.MeshLambertMaterial({color: 0xcc9d02}); const whitematerial = new THREE.MeshLambertMaterial({color: 0xffffff}); const materialDarkblue = new THREE.MeshLambertMaterial({color: 0x021061}); const materialThightblue = new THREE.MeshLambertMaterial({color: 0x96a5fa}); const materialviolet = new THREE.MeshLambertMaterial({color: 0xa425b8}); const blackmaterial = new THREE.MeshLambertMaterial({color: 0x000000}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); //rack const rgeometry = new THREE.BoxGeometry(width, height, depth); const rmesh = new THREE.Mesh(rgeometry, silvermaterial); rmesh.position.set(0 , 0 , 0); id_rackObject.add(rmesh); //screen border const screenbordergeometry = new THREE.BoxGeometry(10, 250, 350); const screenbordergeometrymesh = new THREE.Mesh(screenbordergeometry, whitematerial); screenbordergeometrymesh.position.set( -400, 500 , 0); id_rackObject.add(screenbordergeometrymesh); //screen const screengeometry = new THREE.BoxGeometry(10, 200, 300); const screengeometrymesh = new THREE.Mesh(screengeometry, materialDarkblue); screengeometrymesh.position.set( -401, 500 , 0); id_rackObject.add(screengeometrymesh); //wiendow screen const screenwindowgeometry = new THREE.BoxGeometry(10, 150, 150); const screenwindowgeometrymesh = new THREE.Mesh(screenwindowgeometry, materialThightblue); screenwindowgeometrymesh.position.set( -402, 500 , -40); id_rackObject.add(screenwindowgeometrymesh); //window screen green button const screenwindowgreenbuttongeometry = new THREE.BoxGeometry(10, 25, 35); const screenwindowgreenbuttongeometryymesh = new THREE.Mesh(screenwindowgreenbuttongeometry, greenmaterial); screenwindowgreenbuttongeometryymesh.position.set( -403, 540 , -80); id_rackObject.add(screenwindowgreenbuttongeometryymesh); //window screen violet button const screenwindowvioletbuttongeometry = new THREE.BoxGeometry(10, 25, 35); const screenwindowvioletbuttongeometryymesh = new THREE.Mesh(screenwindowvioletbuttongeometry, materialviolet); screenwindowvioletbuttongeometryymesh.position.set( -403, 510 , -80); id_rackObject.add(screenwindowvioletbuttongeometryymesh); //window screen blu button const screenwindowblubuttongeometry = new THREE.BoxGeometry(10, 25, 35); const screenwindowblubuttongeometryymesh = new THREE.Mesh(screenwindowblubuttongeometry, materialDarkblue); screenwindowblubuttongeometryymesh.position.set( -403, 480 , -80); id_rackObject.add(screenwindowblubuttongeometryymesh); //key const keygeometry = new THREE.BoxGeometry(50, 200, 50); const keygeometrymesh = new THREE.Mesh(keygeometry, whitematerial); keygeometrymesh.position.set( -400, -400 , -250); id_rackObject.add(keygeometrymesh); //key2 const key2geometry = new THREE.CylinderGeometry(15, 15, 15, 15); const key2geometrymesh = new THREE.Mesh(key2geometry, materialGreyMedium); key2geometrymesh.rotateX(Math.PI * 0.5); key2geometrymesh.rotateY(Math.PI * 1); key2geometrymesh.rotateZ(Math.PI * 0.5); key2geometrymesh.position.set(-421, -400 , -250); id_rackObject.add(key2geometrymesh); //whitebutton1 const whitebutton = new THREE.CylinderGeometry(30, 30, 30, 15); const whitebuttonmesh = new THREE.Mesh(whitebutton, whitematerial); whitebuttonmesh.rotateX(Math.PI * 0.5); whitebuttonmesh.rotateY(Math.PI * 1); whitebuttonmesh.rotateZ(Math.PI * 0.5); whitebuttonmesh.position.set(-405, 200 , -200); id_rackObject.add(whitebuttonmesh); //blackbutton1 const blackbutton1 = new THREE.CylinderGeometry(30, 30, 30, 15); const blackbutton1mesh = new THREE.Mesh(blackbutton1, materialVeryGreyDark); blackbutton1mesh.rotateX(Math.PI * 0.5); blackbutton1mesh.rotateY(Math.PI * 1); blackbutton1mesh.rotateZ(Math.PI * 0.5); blackbutton1mesh.position.set(-405, 200 , -100); id_rackObject.add(blackbutton1mesh); //blackbutton2 const blackbutton2 = new THREE.CylinderGeometry(30, 30, 30, 15); const blackbutton2mesh = new THREE.Mesh(blackbutton2, materialVeryGreyDark); blackbutton2mesh.rotateX(Math.PI * 0.5); blackbutton2mesh.rotateY(Math.PI * 1); blackbutton2mesh.rotateZ(Math.PI * 0.5); blackbutton2mesh.position.set(-405, 200 , 0); id_rackObject.add(blackbutton2mesh); //blackbutton3 const blackbutton3 = new THREE.CylinderGeometry(30, 30, 30, 15); const blackbutton3mesh = new THREE.Mesh(blackbutton3, materialVeryGreyDark); blackbutton3mesh.rotateX(Math.PI * 0.5); blackbutton3mesh.rotateY(Math.PI * 1); blackbutton3mesh.rotateZ(Math.PI * 0.5); blackbutton3mesh.position.set(-405, 200 , 100); id_rackObject.add(blackbutton3mesh); //yellowbutton const yellowbutton = new THREE.CylinderGeometry(30, 30, 30, 15); const yellowbuttonmesh = new THREE.Mesh(yellowbutton, yellowmaterial); yellowbuttonmesh.rotateX(Math.PI * 0.5); yellowbuttonmesh.rotateY(Math.PI * 1); yellowbuttonmesh.rotateZ(Math.PI * 0.5); yellowbuttonmesh.position.set(-405, 200 , 200); id_rackObject.add(yellowbuttonmesh); //emergencybutton yellow const emergencybuttonyellow = new THREE.CylinderGeometry(70, 70, 5, 15); const emergencybuttonyellowmesh = new THREE.Mesh(emergencybuttonyellow, yellowmaterial); emergencybuttonyellowmesh.rotateX(Math.PI * 0.5); emergencybuttonyellowmesh.rotateY(Math.PI * 1); emergencybuttonyellowmesh.rotateZ(Math.PI * 0.5); emergencybuttonyellowmesh.position.set(-403, 50 , 150); id_rackObject.add(emergencybuttonyellowmesh); //emergencybutton red const emergencybutton = new THREE.CylinderGeometry(50, 50, 30, 15); const emergencybuttonmesh = new THREE.Mesh(emergencybutton, redmaterial); emergencybuttonmesh.rotateX(Math.PI * 0.5); emergencybuttonmesh.rotateY(Math.PI * 1); emergencybuttonmesh.rotateZ(Math.PI * 0.5); emergencybuttonmesh.position.set(-405, 50 , 150); id_rackObject.add(emergencybuttonmesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 500); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 900 , -15); id_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 500); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 900 , -15); id_rackObject.add(Rtargetmesh); id_rackObject.rotateY(Math.PI); id_rackObject.position.set(400, 950, 300); rid.add(id_rackObject); return rid; } // Low Level RF Rack export function rllrf(param) { const width=800, height=1900, depth=600; const rllrf = new THREE.Object3D(); const llrf_rackObject = new THREE.Object3D(); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0xa6a6a6}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); const materialDark= new THREE.MeshLambertMaterial({color: 0x000000}); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000c0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rllrf.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(1200, 90, 400); rllrf.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [1000,1270,440], [0, Math.PI / 2, 0]); // rack llrf const rrgeometry = new THREE.BoxGeometry(800, 1500, 600); const rrmesh = new THREE.Mesh(rrgeometry, materialGreyDark); rrmesh.position.set( 0, 0 , -depth+290); llrf_rackObject.add(rrmesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 550); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -405, 640 , -300); llrf_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 550); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 405, 640 , -300); llrf_rackObject.add(Rtargetmesh); //handle const handlegeometry = new THREE.BoxGeometry(30, 300, 70); const handlegeometrymesh = new THREE.Mesh(handlegeometry, materialDark); handlegeometrymesh.position.set( -401, 0 , -550); llrf_rackObject.add(handlegeometrymesh); llrf_rackObject.rotateY(Math.PI); llrf_rackObject.position.set(600, 750, -depth+500); rllrf.add(llrf_rackObject); return rllrf; } // Bending rack export function rpsb(param) { const width=1000, height=2100, depth=1000; const rpsb = new THREE.Object3D(); const rpsb_rackObject = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000d0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rpsb.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(790, 90, -850); rpsb.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [900, 1930, -850], [0, Math.PI / 2, 0]); const greenmaterial = new THREE.MeshLambertMaterial({color: 0x00ac76}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); const redmaterial = new THREE.MeshLambertMaterial({color: 0xff0000}); const yellowmaterial = new THREE.MeshLambertMaterial({color: 0xcc9d02}); const whitematerial = new THREE.MeshLambertMaterial({color: 0xffffff}); const materialThightblue = new THREE.MeshLambertMaterial({color: 0x96a5fa}); const materialDarkblue = new THREE.MeshLambertMaterial({color: 0x021061}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); //rack const geometry = new THREE.BoxGeometry(width, height, depth); const rackmesh = new THREE.Mesh(geometry, greenmaterial); rackmesh.position.set( 0, 0 ,0); rpsb_rackObject.add(rackmesh); //emergencybutton yellow const emergencybuttonyellow = new THREE.CylinderGeometry(70, 70, 5, 15); const emergencybuttonyellowmesh = new THREE.Mesh(emergencybuttonyellow, yellowmaterial); emergencybuttonyellowmesh.rotateX(Math.PI * 0.5); emergencybuttonyellowmesh.rotateY(Math.PI * 1); emergencybuttonyellowmesh.rotateZ(Math.PI * 0.5); emergencybuttonyellowmesh.position.set(-503, 320 , 0); rpsb_rackObject.add(emergencybuttonyellowmesh); //emergencybutton red const emergencybutton = new THREE.CylinderGeometry(50, 50, 30, 15); const emergencybuttonmesh = new THREE.Mesh(emergencybutton, redmaterial); emergencybuttonmesh.rotateX(Math.PI * 0.5); emergencybuttonmesh.rotateY(Math.PI * 1); emergencybuttonmesh.rotateZ(Math.PI * 0.5); emergencybuttonmesh.position.set(-505, 320 , 0); rpsb_rackObject.add(emergencybuttonmesh); //base border const screenbordergeometry = new THREE.BoxGeometry(10, 350, 450); const screenbordergeometrymesh = new THREE.Mesh(screenbordergeometry, whitematerial); screenbordergeometrymesh.position.set( -500, 600 , 0); rpsb_rackObject.add(screenbordergeometrymesh); //screen border const basebordergeometry = new THREE.BoxGeometry(10, 100, 100); const basebordergeometrymesh = new THREE.Mesh(basebordergeometry, silvermaterial); basebordergeometrymesh.position.set( -501, 700 , 0); rpsb_rackObject.add(basebordergeometrymesh); //screen const screengeometry = new THREE.BoxGeometry(10, 80, 80); const screengeometrymesh = new THREE.Mesh(screengeometry, materialDarkblue); screengeometrymesh.position.set( -502, 700 , 0); rpsb_rackObject.add(screengeometrymesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 600); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -504, 999 , 0); rpsb_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 600); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 504, 999 , 0); rpsb_rackObject.add(Rtargetmesh); rpsb_rackObject.rotateY(Math.PI); //rpsb_rackObject.position.set(400, 1050, -400); rpsb_rackObject.position.set(width/2, height/2, depth/2); rpsb.add(rpsb_rackObject); return rpsb; } // PS rack export function rps(param) { const width=800, height=2500, depth=600; const psObject = new THREE.Object3D(); const rps_rackObject = new THREE.Object3D(); const rps = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000b0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rps.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(850, 90, 550); rps.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850, 2330, 550], [0, Math.PI / 2, 0]); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363}); const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const greenmaterial = new THREE.MeshLambertMaterial({color: 0x17fc03}); const whitematerial = new THREE.MeshLambertMaterial({color: 0xffffff}); const redmaterial = new THREE.MeshLambertMaterial({color: 0xff0000}); const bluematerial = new THREE.MeshLambertMaterial({color: 0x0053d9}); const softbluematerial = new THREE.MeshLambertMaterial({color: 0x2b7cff}); const screenmaterial = new THREE.MeshLambertMaterial({color: 0xdeebff}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); // rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, softbluematerial); rrmesh.position.set( 0, 0 , 0); rps_rackObject.add(rrmesh); //edge le const llegeometry = new THREE.BoxGeometry(width-750, height, depth-550); const llemesh = new THREE.Mesh(llegeometry, bluematerial); llemesh.position.set( -425, 0 , -285); rps_rackObject.add(llemesh); //edge re const lregeometry = new THREE.BoxGeometry(width-750, height, depth-550); const lremesh = new THREE.Mesh(lregeometry, bluematerial); lremesh.position.set( -425, 0 , 265); rps_rackObject.add(lremesh); //edge ue const luegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const luemesh = new THREE.Mesh(luegeometry, bluematerial); luemesh.position.set( -425, 1225 , -7); rps_rackObject.add(luemesh); //edge de const ldegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const ldemesh = new THREE.Mesh(ldegeometry, bluematerial); ldemesh.position.set( -425, -1230 , -7); rps_rackObject.add(ldemesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 600); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 1200 , -15); rps_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 600); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 1200 , -15); rps_rackObject.add(Rtargetmesh); // START PS base RED const basered = new THREE.BoxGeometry(10, 30, 110); const baseredmesh = new THREE.Mesh(basered, redmaterial); baseredmesh.position.set( -401, 1100 , -170); psObject.add(baseredmesh); // PS base BLUE const baseblue = new THREE.BoxGeometry(10, 180, 110); const basebluemesh = new THREE.Mesh(baseblue, bluematerial); basebluemesh.position.set( -401, 995 , -170); psObject.add(basebluemesh); // PS base SILVER const basesilver = new THREE.BoxGeometry(10, 150, 500); const basesilvermesh = new THREE.Mesh(basesilver, silvermaterial); basesilvermesh.position.set( -401, -300 , 0); rps_rackObject.add(basesilvermesh); rps_rackObject.add(psObject); //CLONE PS const psA2 = psObject.clone(); psA2.position.set( 0, 0 , 120); rps_rackObject.add(psA2); const psA3 = psObject.clone(); psA3.position.set( 0, 0 , 240); rps_rackObject.add(psA3); const psB1 = psObject.clone(); psB1.position.set( 0, -220 , 0); rps_rackObject.add(psB1); const psB2 = psObject.clone(); psB2.position.set( 0, -220 , 120); rps_rackObject.add(psB2); const psB3 = psObject.clone(); psB3.position.set( 0, -220 , 240); rps_rackObject.add(psB3); const psC1 = psObject.clone(); psC1.position.set( 0, -440 , 0); rps_rackObject.add(psC1); const psC2 = psObject.clone(); psC2.position.set( 0, -440 , 120); rps_rackObject.add(psC2); const psC3 = psObject.clone(); psC3.position.set( 0, -440 , 240); rps_rackObject.add(psC3); const psD1 = psObject.clone(); psD1.position.set( 0, -660 , 0); rps_rackObject.add(psD1); const psD2 = psObject.clone(); psD2.position.set( 0, -660 , 120); rps_rackObject.add(psD2); const psD3 = psObject.clone(); psD3.position.set( 0, -660 , 240); rps_rackObject.add(psD3); const psE1 = psObject.clone(); psE1.position.set( 0, -880 , 0); rps_rackObject.add(psE1); const psE2 = psObject.clone(); psE2.position.set( 0, -880 , 120); rps_rackObject.add(psE2); const psE3 = psObject.clone(); psE3.position.set( 0, -880 , 240); rps_rackObject.add(psE3); rps_rackObject.rotateY(Math.PI); rps_rackObject.position.set(400, 1250, 300); rps.add(rps_rackObject); return rps; } // Control rack export function rc(param) { const width=800, height=2500, depth=600; const rc = new THREE.Object3D(); const rc_rackObject = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000d0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rc.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(850, 90, 550); rc.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850, 2330, 550], [0, Math.PI / 2, 0]); const bluematerial = new THREE.MeshLambertMaterial({color: 0x0053d9}); const softbluematerial = new THREE.MeshLambertMaterial({color: 0x2b7cff}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363}); //rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, softbluematerial); rrmesh.position.set( 0, 0 , -10); rc_rackObject.add(rrmesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 500); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 1200 , -15); rc_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 500); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 1200 , -15); rc_rackObject.add(Rtargetmesh); //edge le const llegeometry = new THREE.BoxGeometry(width-750, height, depth-550); const llemesh = new THREE.Mesh(llegeometry, bluematerial); llemesh.position.set( -425, 0 , -285); rc_rackObject.add(llemesh); //edge re const lregeometry = new THREE.BoxGeometry(width-750, height, depth-550); const lremesh = new THREE.Mesh(lregeometry, bluematerial); lremesh.position.set( -425, 0 , 265); rc_rackObject.add(lremesh); //edge ue const luegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const luemesh = new THREE.Mesh(luegeometry, bluematerial); luemesh.position.set( -425, 1225 , -7); rc_rackObject.add(luemesh); //edge de const ldegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const ldemesh = new THREE.Mesh(ldegeometry, bluematerial); ldemesh.position.set( -425, -1230 , -7); rc_rackObject.add(ldemesh); //borderEC down const borderECgeometry = new THREE.BoxGeometry(10, 400, 600); const borderECgeometrymesh = new THREE.Mesh(borderECgeometry, materialGreyDark); borderECgeometrymesh.position.set( -400, -250 , -10); rc_rackObject.add(borderECgeometrymesh); //EC1 down const EC1geometry = new THREE.BoxGeometry(10, 350, 40); const EC1geometrymesh = new THREE.Mesh(EC1geometry, materialGreyMedium); EC1geometrymesh.position.set( -402, -250 , -200); rc_rackObject.add(EC1geometrymesh); //EC2 down const EC2geometry = new THREE.BoxGeometry(10, 350, 40); const EC2geometrymesh = new THREE.Mesh(EC2geometry, materialGreyMedium); EC2geometrymesh.position.set( -402, -250 , -150); rc_rackObject.add(EC2geometrymesh); //EC2 down const EC3geometry = new THREE.BoxGeometry(10, 350, 40); const EC3geometrymesh = new THREE.Mesh(EC3geometry, materialGreyMedium); EC3geometrymesh.position.set( -402, -250 , -100); rc_rackObject.add(EC3geometrymesh); //borderEC up const borderupECgeometry = new THREE.BoxGeometry(10, 400, 600); const borderupECgeometrymesh = new THREE.Mesh(borderupECgeometry, materialGreyDark); borderupECgeometrymesh.position.set( -400, 250 , -10); rc_rackObject.add(borderupECgeometrymesh); //EC1 up const EC1geometryup = new THREE.BoxGeometry(10, 350, 40); const EC1geometryupmesh = new THREE.Mesh(EC1geometryup, materialGreyMedium); EC1geometryupmesh.position.set( -402, 250 , -200); rc_rackObject.add(EC1geometryupmesh); //EC2 up const EC2geometryup = new THREE.BoxGeometry(10, 350, 40); const EC2geometryupmesh = new THREE.Mesh(EC2geometryup, materialGreyMedium); EC2geometryupmesh.position.set( -402, 250 , -150); rc_rackObject.add(EC2geometryupmesh); //EC2 up const EC3geometryup = new THREE.BoxGeometry(10, 350, 40); const EC3geometryupmesh = new THREE.Mesh(EC3geometryup, materialGreyMedium); EC3geometryupmesh.position.set( -402, 250 , -100); rc_rackObject.add(EC3geometryupmesh); rc_rackObject.rotateY(Math.PI); rc_rackObject.position.set(400, 1250, 300); rc.add(rc_rackObject); return rc; } // diagnostic rack export function rd(param) { const width=800, height=2500, depth=600; const rd = new THREE.Object3D(); const rd_rackObject = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000d0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rd.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(850, 90, 550); rd.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850, 2330, 500], [0, Math.PI / 2, 0]); const bluematerial = new THREE.MeshLambertMaterial({color: 0x0053d9}); const softbluematerial = new THREE.MeshLambertMaterial({color: 0x2b7cff}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363}); //rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, softbluematerial); rrmesh.position.set( 0, 0 , -10); rd_rackObject.add(rrmesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 500); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 1200 , -15); rd_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 500); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 1200 , -15); rd_rackObject.add(Rtargetmesh); //edge le const llegeometry = new THREE.BoxGeometry(width-750, height, depth-550); const llemesh = new THREE.Mesh(llegeometry, bluematerial); llemesh.position.set( -425, 0 , -285); rd_rackObject.add(llemesh); //edge re const lregeometry = new THREE.BoxGeometry(width-750, height, depth-550); const lremesh = new THREE.Mesh(lregeometry, bluematerial); lremesh.position.set( -425, 0 , 265); rd_rackObject.add(lremesh); //edge ue const luegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const luemesh = new THREE.Mesh(luegeometry, bluematerial); luemesh.position.set( -425, 1225 , -7); rd_rackObject.add(luemesh); //edge de const ldegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const ldemesh = new THREE.Mesh(ldegeometry, bluematerial); ldemesh.position.set( -425, -1230 , -7); rd_rackObject.add(ldemesh); //borderEC const borderECgeometry = new THREE.BoxGeometry(10, 400, 600); const borderECgeometrymesh = new THREE.Mesh(borderECgeometry, materialGreyDark); borderECgeometrymesh.position.set( -400, 0 , -10); rd_rackObject.add(borderECgeometrymesh); //EC1 const EC1geometry = new THREE.BoxGeometry(10, 350, 40); const EC1geometrymesh = new THREE.Mesh(EC1geometry, materialGreyMedium); EC1geometrymesh.position.set( -402, 0 , -200); rd_rackObject.add(EC1geometrymesh); //EC2 const EC2geometry = new THREE.BoxGeometry(10, 350, 40); const EC2geometrymesh = new THREE.Mesh(EC2geometry, materialGreyMedium); EC2geometrymesh.position.set( -402, 0 , -150); rd_rackObject.add(EC2geometrymesh); //EC2 const EC3geometry = new THREE.BoxGeometry(10, 350, 40); const EC3geometrymesh = new THREE.Mesh(EC3geometry, materialGreyMedium); EC3geometrymesh.position.set( -402, 0 , -100); rd_rackObject.add(EC3geometrymesh); //libera 1 const libera1geometry = new THREE.BoxGeometry(10, 100, 600); const libera1geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium); libera1geometrymesh.position.set( -400, 900 , -10); rd_rackObject.add(libera1geometrymesh); //libera 2 const libera2geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium); libera2geometrymesh.position.set( -400, 750 , -10); rd_rackObject.add(libera2geometrymesh); //libera 3 const libera3geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium); libera3geometrymesh.position.set( -400, 600 , -10); rd_rackObject.add(libera3geometrymesh); //libera 4 const libera4geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium); libera4geometrymesh.position.set( -400, -600 , -10); rd_rackObject.add(libera4geometrymesh); //libera 5 const libera5geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium); libera5geometrymesh.position.set( -400, -750 , -10); rd_rackObject.add(libera5geometrymesh); //libera 6 const libera6geometrymesh = new THREE.Mesh(libera1geometry, materialGreyMedium); libera6geometrymesh.position.set( -400, -900 , -10); rd_rackObject.add(libera6geometrymesh); rd_rackObject.rotateY(Math.PI); rd_rackObject.position.set(400, 1250, 300); rd.add(rd_rackObject); return rd; } // RRP rack export function rrp(param) { const width=800, height=2500, depth=600; const rrp = new THREE.Object3D(); const rrp_rackObject = new THREE.Object3D(); const blackbaseObject = new THREE.Object3D(); const bluematerial = new THREE.MeshLambertMaterial({color: 0x0053d9}); const softbluematerial = new THREE.MeshLambertMaterial({color: 0x2b7cff}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const blackmaterial = new THREE.MeshLambertMaterial({color: 0x000000}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000d0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rrp.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(850, 90, 1200); rrp.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850, 2330, 800], [0, Math.PI / 2, 0]); // rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, softbluematerial); rrmesh.position.set( 0, 0 , -10); rrp_rackObject.add(rrmesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 500); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 1200 , -15); rrp_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 500); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 1200 , -15); rrp_rackObject.add(Rtargetmesh); //edge le const llegeometry = new THREE.BoxGeometry(width-750, height, depth-550); const llemesh = new THREE.Mesh(llegeometry, bluematerial); llemesh.position.set( -425, 0 , -285); rrp_rackObject.add(llemesh); //edge re const lregeometry = new THREE.BoxGeometry(width-750, height, depth-550); const lremesh = new THREE.Mesh(lregeometry, bluematerial); lremesh.position.set( -425, 0 , 265); rrp_rackObject.add(lremesh); //edge ue const luegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const luemesh = new THREE.Mesh(luegeometry, bluematerial); luemesh.position.set( -425, 1225 , -7); rrp_rackObject.add(luemesh); //edge de const ldegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const ldemesh = new THREE.Mesh(ldegeometry, bluematerial); ldemesh.position.set( -425, -1230 , -7); rrp_rackObject.add(ldemesh); // blackbase 1 const black1geometry = new THREE.BoxGeometry(3, 200, 550); const black1geometrymesh = new THREE.Mesh(black1geometry, blackmaterial); black1geometrymesh.position.set( -402, 1000 , 0); rrp_rackObject.add(black1geometrymesh); // blackbase 2 const black2geometry = new THREE.BoxGeometry(3, 200, 550); const black2geometrymesh = new THREE.Mesh(black2geometry, blackmaterial); black2geometrymesh.position.set( -402, 780 , 0); rrp_rackObject.add(black2geometrymesh); // blackbase 3 const black3geometry = new THREE.BoxGeometry(3, 200, 550); const black3geometrymesh = new THREE.Mesh(black3geometry, blackmaterial); black3geometrymesh.position.set( -402, 560 , 0); rrp_rackObject.add(black3geometrymesh); // blackbase 4 const black4geometry = new THREE.BoxGeometry(3, 200, 550); const black4geometrymesh = new THREE.Mesh(black4geometry, blackmaterial); black4geometrymesh.position.set( -402, 340 , 0); blackbaseObject.add(black4geometrymesh); const square1geometry = new THREE.BoxGeometry(3, 70, 70); const square1geometrymesh = new THREE.Mesh(square1geometry, silvermaterial); square1geometrymesh.position.set( -403, 340 , -100); blackbaseObject.add(square1geometrymesh); const square2geometry = new THREE.BoxGeometry(3, 70, 70); const square2geometrymesh = new THREE.Mesh(square2geometry, silvermaterial); square2geometrymesh.position.set( -403, 340 , 100); blackbaseObject.add(square2geometrymesh); //CLONE PS const psA2 = blackbaseObject.clone(); psA2.position.set( 0, -220 , 0); rrp_rackObject.add(psA2); const psA3 = blackbaseObject.clone(); psA3.position.set( 0, -440 , 0); rrp_rackObject.add(psA3); rrp_rackObject.add(blackbaseObject); // silverbase const silvergeometry = new THREE.BoxGeometry(3, 200, 550); const silvergeometrymesh = new THREE.Mesh(silvergeometry, silvermaterial); silvergeometrymesh.position.set( -402, -320 , 0); rrp_rackObject.add(silvergeometrymesh); //lastblack const black5geometry = new THREE.BoxGeometry(3, 780, 550); const black5geometrymesh = new THREE.Mesh(black5geometry, blackmaterial); black5geometrymesh.position.set( -402, -830 , 0); rrp_rackObject.add(black5geometrymesh); rrp_rackObject.rotateY(Math.PI); rrp_rackObject.position.set(400, 1250, depth); rrp.add(rrp_rackObject); return rrp; } // RAR 1 - 2 - 3 export function rar1(param) { const width=800, height=2500, depth=800; const rar = new THREE.Object3D(); const kly_rackObject = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000d0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rar.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(850, 80, 750); rar.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850, 2330, 600], [0, Math.PI / 2, 0]); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363}); const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const greenmaterial = new THREE.MeshLambertMaterial({color: 0x17fc03}); const redmaterial = new THREE.MeshLambertMaterial({color: 0xff0000}); const yellowmaterial = new THREE.MeshLambertMaterial({color: 0xcc9d02}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); //right rack const lrgeometry = new THREE.BoxGeometry(width, height, depth); const lrmesh = new THREE.Mesh(lrgeometry, silvermaterial); lrmesh.position.set(0 , 0 , 0); kly_rackObject.add(lrmesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 700); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 1200 , -15); kly_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 700); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 1200 , -15); kly_rackObject.add(Rtargetmesh); //edge rle const rlegeometry = new THREE.BoxGeometry(width-750, height, depth-750); const rlemesh = new THREE.Mesh(rlegeometry, materialGreyDark); rlemesh.position.set( -425, 0 , -370); kly_rackObject.add(rlemesh); //edge rre const rregeometry = new THREE.BoxGeometry(width-750, height, depth-750); const rremesh = new THREE.Mesh(rregeometry, materialGreyDark); rremesh.position.set( -425, 0 , 375); kly_rackObject.add(rremesh); //edge rue const ruegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const ruemesh = new THREE.Mesh(ruegeometry, materialGreyDark); ruemesh.position.set( -425, 1225 , 0); kly_rackObject.add(ruemesh); //edge rde const rdegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const rdemesh = new THREE.Mesh(rdegeometry, materialGreyDark); rdemesh.position.set( -425, -1230 , 0); kly_rackObject.add(rdemesh); //drawer1 rack right const drawer1rrgeometry = new THREE.BoxGeometry(10, 250, 630); const drawer1rrgeometrymesh = new THREE.Mesh(drawer1rrgeometry, materialGreyDark); drawer1rrgeometrymesh.position.set( -400, 1000 , 0); kly_rackObject.add(drawer1rrgeometrymesh); //display right rack const display1rrgeometry = new THREE.BoxGeometry(50, 50, 150); const display1rrgeometrymesh = new THREE.Mesh(display1rrgeometry, materialVeryGreyDark); display1rrgeometrymesh.position.set( -400, 1000 , 0); kly_rackObject.add(display1rrgeometrymesh); //GreenLed1 right rack const greenled1rr = new THREE.SphereGeometry(13, 10, 10); const greenled1rrmesh = new THREE.Mesh(greenled1rr, greenmaterial); greenled1rrmesh.position.set(-400, 1050 , 200); kly_rackObject.add(greenled1rrmesh); //GreenLed2 right rack const greenled2rr = new THREE.SphereGeometry(13, 10, 10); const greenled2rrmesh = new THREE.Mesh(greenled2rr, greenmaterial); greenled2rrmesh.position.set(-400, 1000 , 200); kly_rackObject.add(greenled2rrmesh); //GreenLed3 right rack const greenled3rr = new THREE.SphereGeometry(13, 10, 10); const greenled3rrmesh = new THREE.Mesh(greenled3rr, greenmaterial); greenled3rrmesh.position.set(-400, 950 , 200); kly_rackObject.add(greenled3rrmesh); //drawer2 rack right const drawer2rrgeometry = new THREE.BoxGeometry(10, 250, 630); const drawer2rrgeometrymesh = new THREE.Mesh(drawer2rrgeometry, materialGreyDark); drawer2rrgeometrymesh.position.set( -400, 700 , 0); kly_rackObject.add(drawer2rrgeometrymesh); //blackbutton1 right rack const blackled1rr = new THREE.SphereGeometry(30, 10, 10); const blackled1rrmesh = new THREE.Mesh(blackled1rr, materialVeryGreyDark); blackled1rrmesh.position.set(-400, 750 , -200); kly_rackObject.add(blackled1rrmesh); //blackbutton2 right rack const blackled2rr = new THREE.SphereGeometry(30, 10, 10); const blackled2rrmesh = new THREE.Mesh(blackled2rr, materialVeryGreyDark); blackled2rrmesh.position.set(-400, 670 , -200); kly_rackObject.add(blackled2rrmesh); //GreenLED1 right rack const greenled1rrdrawer2 = new THREE.SphereGeometry(25, 10, 10); const greenled1rrdrawer2rmesh = new THREE.Mesh(greenled1rrdrawer2, greenmaterial); greenled1rrdrawer2rmesh.position.set(-400, 750 , -50); kly_rackObject.add(greenled1rrdrawer2rmesh); //yellowLED1 right rack const yellowled1rrdrawer2 = new THREE.SphereGeometry(25, 10, 10); const yellowled1rrdrawer2rmesh = new THREE.Mesh(yellowled1rrdrawer2, yellowmaterial); yellowled1rrdrawer2rmesh.position.set(-400, 750 , 30); kly_rackObject.add(yellowled1rrdrawer2rmesh); //emergencyLED1 right rack const emergencybutton = new THREE.CylinderGeometry(70, 10, 10); const emergencybuttonmesh = new THREE.Mesh(emergencybutton, redmaterial); emergencybuttonmesh.rotateX(Math.PI * 0.5); emergencybuttonmesh.rotateY(Math.PI * 1); emergencybuttonmesh.rotateZ(Math.PI * 0.5); emergencybuttonmesh.position.set(-405, 700 , 150); kly_rackObject.add(emergencybuttonmesh); //drawer3 rack right const drawer3rrgeometry = new THREE.BoxGeometry(10, 250, 630); const drawer3rrgeometrymesh = new THREE.Mesh(drawer3rrgeometry, materialGreyMedium); drawer3rrgeometrymesh.position.set( -400, 400 , 0); kly_rackObject.add(drawer3rrgeometrymesh); //darkscreen rack right const darkscreenrrgeometry = new THREE.BoxGeometry(10, 150, 270); const darkscreenrrgeometrymesh = new THREE.Mesh(darkscreenrrgeometry, materialVeryGreyDark); darkscreenrrgeometrymesh.position.set( -402, 400 , -120); kly_rackObject.add(darkscreenrrgeometrymesh); //drawer4 rack right const drawer4rrgeometry = new THREE.BoxGeometry(10, 250, 630); const drawer4rrgeometrymesh = new THREE.Mesh(drawer4rrgeometry, materialGreyDark); drawer4rrgeometrymesh.position.set( -400, 100 , 0); kly_rackObject.add(drawer4rrgeometrymesh); //drawer4 dark rack right const drawer4darkrrgeometry = new THREE.BoxGeometry(10, 220, 500); const drawer4darkrrgeometrymesh = new THREE.Mesh(drawer4darkrrgeometry, materialVeryGreyDark); drawer4darkrrgeometrymesh.position.set( -402, 100 , 50); kly_rackObject.add(drawer4darkrrgeometrymesh); //GreenLed1 drawer4 right rack const greenled1drawer4rr = new THREE.SphereGeometry(13, 10, 10); const greenled1drawer4rrmesh = new THREE.Mesh(greenled1drawer4rr, greenmaterial); greenled1drawer4rrmesh.position.set(-400, 150 , -250); kly_rackObject.add(greenled1drawer4rrmesh); //GreenLed2 drawer4 right rack const greenled2drawer4rr = new THREE.SphereGeometry(13, 10, 10); const greenled2drawer4rrmesh = new THREE.Mesh(greenled2drawer4rr, greenmaterial); greenled2drawer4rrmesh.position.set(-400, 100 , -250); kly_rackObject.add(greenled2drawer4rrmesh); //GreenLed3 drawer4 right rack const greenled3drawer4rr = new THREE.SphereGeometry(13, 10, 10); const greenled3drawer4rrmesh = new THREE.Mesh(greenled3drawer4rr, greenmaterial); greenled3drawer4rrmesh.position.set(-400, 50 , -250); kly_rackObject.add(greenled3drawer4rrmesh); //RdLed1 drawer4 right rack const greenred1drawer4rr = new THREE.SphereGeometry(13, 10, 10); const greenred1drawer4rrmesh = new THREE.Mesh(greenred1drawer4rr, redmaterial); greenred1drawer4rrmesh.position.set(-400, 150 , 180); kly_rackObject.add(greenred1drawer4rrmesh); //RdLed1 drawer4 right rack const greenred2drawer4rr = new THREE.SphereGeometry(13, 10, 10); const greenred2drawer4rrmesh = new THREE.Mesh(greenred2drawer4rr, redmaterial); greenred2drawer4rrmesh.position.set(-400, 100 , 180); kly_rackObject.add(greenred2drawer4rrmesh); //drawer5 rack right const drawer5rrgeometry = new THREE.BoxGeometry(10, 350, 630); const drawer5rrgeometrymesh = new THREE.Mesh(drawer5rrgeometry, materialGreyDark); drawer5rrgeometrymesh.position.set( -400, -250 , 0); kly_rackObject.add(drawer5rrgeometrymesh); //display1 drawer5 rack right const display1drawer5rrgeometry = new THREE.BoxGeometry(30, 70, 150); const display1drawer5rrgeometrymesh = new THREE.Mesh(display1drawer5rrgeometry, materialVeryGreyDark); display1drawer5rrgeometrymesh.position.set( -402, -120 , 0); kly_rackObject.add(display1drawer5rrgeometrymesh); //display2 drawer5 rack right const display2drawer5rrgeometry = new THREE.BoxGeometry(30, 70, 150); const display2drawer5rrgeometrymesh = new THREE.Mesh(display2drawer5rrgeometry, materialVeryGreyDark); display2drawer5rrgeometrymesh.position.set( -402, -200 , 0); kly_rackObject.add(display2drawer5rrgeometrymesh); //display3 drawer5 rack right const display3drawer5rrgeometry = new THREE.BoxGeometry(30, 70, 150); const display3drawer5rrgeometrymesh = new THREE.Mesh(display3drawer5rrgeometry, materialVeryGreyDark); display3drawer5rrgeometrymesh.position.set( -402, -280 , 0); kly_rackObject.add(display3drawer5rrgeometrymesh); //display4 drawer5 rack right const display4drawer5rrgeometry = new THREE.BoxGeometry(30, 70, 150); const display4drawer5rrgeometrymesh = new THREE.Mesh(display4drawer5rrgeometry, materialVeryGreyDark); display4drawer5rrgeometrymesh.position.set( -402, -360 , 0); kly_rackObject.add(display4drawer5rrgeometrymesh); //drawer6 rack right const drawer6rrgeometry = new THREE.BoxGeometry(10, 350, 630); const drawer6rrgeometrymesh = new THREE.Mesh(drawer5rrgeometry, materialGreyDark); drawer6rrgeometrymesh.position.set( -400, -650 , 0); kly_rackObject.add(drawer6rrgeometrymesh); //display1 drawer6 rack right const display1drawer6rrgeometry = new THREE.BoxGeometry(30, 70, 150); const display1drawer6rrgeometrymesh = new THREE.Mesh(display1drawer6rrgeometry, materialVeryGreyDark); display1drawer6rrgeometrymesh.position.set( -402, -570 , 0); kly_rackObject.add(display1drawer6rrgeometrymesh); //display2 drawer6 rack right const display2drawer6rrgeometry = new THREE.BoxGeometry(30, 70, 150); const display2drawer6rrgeometrymesh = new THREE.Mesh(display2drawer6rrgeometry, materialVeryGreyDark); display2drawer6rrgeometrymesh.position.set( -402, -650 , 0); kly_rackObject.add(display2drawer6rrgeometrymesh); kly_rackObject.rotateY(Math.PI); kly_rackObject.position.set(400, 1250, 400); rar.add(kly_rackObject); return rar; } // RAR2 export function rar2(param) { const width=800, height=2500, depth=800; const rar2 = new THREE.Object3D(); const kly_rackObject = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000d0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rar2.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(850, 80, 750); rar2.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850, 2330, 600], [0, Math.PI / 2, 0]); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363}); const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const greenmaterial = new THREE.MeshLambertMaterial({color: 0x17fc03}); const redmaterial = new THREE.MeshLambertMaterial({color: 0xff0000}); const yellowmaterial = new THREE.MeshLambertMaterial({color: 0xcc9d02}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); //rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, silvermaterial); rrmesh.position.set( 0, 0 , -810); kly_rackObject.add(rrmesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 700); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 1200 , -815); kly_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 700); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 1200 , -815); kly_rackObject.add(Rtargetmesh); //edge const llegeometry = new THREE.BoxGeometry(width-750, height, depth-750); const llemesh = new THREE.Mesh(llegeometry, materialGreyDark); llemesh.position.set( -425, 0 , -1185); kly_rackObject.add(llemesh); //edge lre const lregeometry = new THREE.BoxGeometry(width-750, height, depth-750); const lremesh = new THREE.Mesh(lregeometry, materialGreyDark); lremesh.position.set( -425, 0 , -430); kly_rackObject.add(lremesh); //edge lue const luegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const luemesh = new THREE.Mesh(luegeometry, materialGreyDark); luemesh.position.set( -425, 1225 , -807); kly_rackObject.add(luemesh); //edge lde const ldegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const ldemesh = new THREE.Mesh(ldegeometry, materialGreyDark); ldemesh.position.set( -425, -1230 , -807); kly_rackObject.add(ldemesh); //drawer1 const drawer1geometry = new THREE.BoxGeometry(10, 250, 630); const drawer1geometrymesh = new THREE.Mesh(drawer1geometry, materialGreyDark); drawer1geometrymesh.position.set( -400, 1000 , -810); kly_rackObject.add(drawer1geometrymesh); //display1 left const display1leftgeometry = new THREE.BoxGeometry(50, 50, 150); const display1leftgeometrygeometrymesh = new THREE.Mesh(display1leftgeometry, materialVeryGreyDark); display1leftgeometrygeometrymesh.position.set( -400, 1050 , -1000); kly_rackObject.add(display1leftgeometrygeometrymesh); //display1 right const displayupgeometry2 = new THREE.BoxGeometry(50, 50, 150); const displayupgeometrymesh2 = new THREE.Mesh(displayupgeometry2, materialVeryGreyDark); displayupgeometrymesh2.position.set( -400, 1050 , -820); kly_rackObject.add(displayupgeometrymesh2); //selector1 const selector1geometry = new THREE.BoxGeometry(20, 70, 20); const selector1geometrymesh = new THREE.Mesh(selector1geometry, materialVeryGreyDark); selector1geometrymesh.position.set( -400, 940 , -1030); selector1geometrymesh.rotateX(Math.PI * 1.75); selector1geometrymesh.rotateY(Math.PI * 1.50); selector1geometrymesh.rotateZ(Math.PI * 1.50); kly_rackObject.add(selector1geometrymesh); //sfere selector1 const sphereselector1drawer1 = new THREE.SphereGeometry(20, 10, 10); const sphereselector1drawer1mesh = new THREE.Mesh(sphereselector1drawer1, materialVeryGreyDark); sphereselector1drawer1mesh.position.set(-400, 940 , -1030); kly_rackObject.add(sphereselector1drawer1mesh); //sfere drawer1 button1 const spherebutton1drawer1 = new THREE.SphereGeometry(20, 10, 10); const spherebutton1drawer1mesh = new THREE.Mesh(spherebutton1drawer1, materialVeryGreyDark); spherebutton1drawer1mesh.position.set(-400, 990 , -630); kly_rackObject.add(spherebutton1drawer1mesh); //sfere drawer1 button2 const spherebutton2drawer1 = new THREE.SphereGeometry(20, 10, 10); const spherebutton2drawer1mesh = new THREE.Mesh(spherebutton2drawer1, materialVeryGreyDark); spherebutton2drawer1mesh.position.set(-400, 990 , -550); kly_rackObject.add(spherebutton2drawer1mesh); //drawer2 const drawer2geometry = new THREE.BoxGeometry(10, 250, 630); const drawer2geometrymesh = new THREE.Mesh(drawer2geometry, materialGreyDark); drawer2geometrymesh.position.set( -400, 700 , -810); kly_rackObject.add(drawer2geometrymesh); //display2 left const display1leftgeometrydrawer2 = new THREE.BoxGeometry(50, 50, 150); const display1leftgeometrygeometrydrawer2mesh = new THREE.Mesh(display1leftgeometrydrawer2, materialVeryGreyDark); display1leftgeometrygeometrydrawer2mesh.position.set( -400, 750 , -1000); kly_rackObject.add(display1leftgeometrygeometrydrawer2mesh); //display2 right const display2leftgeometrydrawer2 = new THREE.BoxGeometry(50, 50, 150); const display2leftgeometrygeometrydrawer2mesh = new THREE.Mesh(display2leftgeometrydrawer2, materialVeryGreyDark); display2leftgeometrygeometrydrawer2mesh.position.set( -400, 750 , -820); kly_rackObject.add(display2leftgeometrygeometrydrawer2mesh); //selector2 const selector1geometrydrawer2 = new THREE.BoxGeometry(20, 70, 20); const selector1geometrydrawer2mesh = new THREE.Mesh(selector1geometrydrawer2, materialVeryGreyDark); selector1geometrydrawer2mesh.position.set( -400, 640 , -1030); selector1geometrydrawer2mesh.rotateX(Math.PI * 1.75); selector1geometrydrawer2mesh.rotateY(Math.PI * 1.50); selector1geometrydrawer2mesh.rotateZ(Math.PI * 1.50); kly_rackObject.add(selector1geometrydrawer2mesh); //sfere selector2 const sphereselector1drawer2 = new THREE.SphereGeometry(20, 10, 10); const sphereselector1drawer2mesh = new THREE.Mesh(sphereselector1drawer2, materialVeryGreyDark); sphereselector1drawer2mesh.position.set(-400, 640 , -1030); kly_rackObject.add(sphereselector1drawer2mesh); //sfere drawer2 button1 const spherebutton1drawer2 = new THREE.SphereGeometry(20, 10, 10); const spherebutton1drawer2mesh = new THREE.Mesh(spherebutton1drawer2, materialVeryGreyDark); spherebutton1drawer2mesh.position.set(-400, 690 , -630); kly_rackObject.add(spherebutton1drawer2mesh); //sfere drawer2 button2 const spherebutton2drawer2 = new THREE.SphereGeometry(20, 10, 10); const spherebutton2drawer2mesh = new THREE.Mesh(spherebutton2drawer2, materialVeryGreyDark); spherebutton2drawer2mesh.position.set(-400, 690 , -550); kly_rackObject.add(spherebutton2drawer2mesh); //drawer3 const drawer3geometry = new THREE.BoxGeometry(10, 250, 630); const drawer3geometrymesh = new THREE.Mesh(drawer3geometry, materialGreyDark); drawer3geometrymesh.position.set( -400, 400 , -810); kly_rackObject.add(drawer3geometrymesh); //display2 left const display1leftgeometrydrawer3 = new THREE.BoxGeometry(50, 50, 150); const display1leftgeometrygeometrydrawer3mesh = new THREE.Mesh(display1leftgeometrydrawer3, materialVeryGreyDark); display1leftgeometrygeometrydrawer3mesh.position.set( -400, 450 , -1000); kly_rackObject.add(display1leftgeometrygeometrydrawer3mesh); //display2 right const display2leftgeometrydrawer3 = new THREE.BoxGeometry(50, 50, 150); const display2leftgeometrygeometrydrawer3mesh = new THREE.Mesh(display2leftgeometrydrawer3, materialVeryGreyDark); display2leftgeometrygeometrydrawer3mesh.position.set( -400, 450 , -820); kly_rackObject.add(display2leftgeometrygeometrydrawer3mesh); //selector2 const selector1geometrydrawer3 = new THREE.BoxGeometry(20, 70, 20); const selector1geometrydrawer3mesh = new THREE.Mesh(selector1geometrydrawer3, materialVeryGreyDark); selector1geometrydrawer3mesh.position.set( -400, 340 , -1030); selector1geometrydrawer3mesh.rotateX(Math.PI * 1.75); selector1geometrydrawer3mesh.rotateY(Math.PI * 1.50); selector1geometrydrawer3mesh.rotateZ(Math.PI * 1.50); kly_rackObject.add(selector1geometrydrawer3mesh); //sfere selector2 const sphereselector1drawer3 = new THREE.SphereGeometry(20, 10, 10); const sphereselector1drawer3mesh = new THREE.Mesh(sphereselector1drawer3, materialVeryGreyDark); sphereselector1drawer3mesh.position.set(-400, 340 , -1030); kly_rackObject.add(sphereselector1drawer3mesh); //sfere drawer2 button1 const spherebutton1drawer3 = new THREE.SphereGeometry(20, 10, 10); const spherebutton1drawer3mesh = new THREE.Mesh(spherebutton1drawer3, materialVeryGreyDark); spherebutton1drawer3mesh.position.set(-400, 390 , -630); kly_rackObject.add(spherebutton1drawer3mesh); //sfere drawer2 button2 const spherebutton2drawer3 = new THREE.SphereGeometry(20, 10, 10); const spherebutton2drawer3mesh = new THREE.Mesh(spherebutton2drawer3, materialVeryGreyDark); spherebutton2drawer3mesh.position.set(-400, 390 , -550); kly_rackObject.add(spherebutton2drawer3mesh); //borderscreen const borderscreengeometry = new THREE.BoxGeometry(10, 400, 500); const borderscreengeometrymesh = new THREE.Mesh(borderscreengeometry, materialGreyDark); borderscreengeometrymesh.position.set( -400, 0 , -810); kly_rackObject.add(borderscreengeometrymesh); //screen const screengeometry = new THREE.BoxGeometry(10, 300, 400); const screengeometrymesh = new THREE.Mesh(screengeometry, materialVeryGreyDark); screengeometrymesh.position.set( -402, 0 , -810); kly_rackObject.add(screengeometrymesh); //GreenLed1 const greenled1 = new THREE.SphereGeometry(13, 10, 10); const greenled1mesh = new THREE.Mesh(greenled1, greenmaterial); greenled1mesh.position.set(-400, 175 , -750); kly_rackObject.add(greenled1mesh); //GreenLed2 const greenled2 = new THREE.SphereGeometry(13, 10, 10); const greenled2mesh = new THREE.Mesh(greenled2, greenmaterial); greenled2mesh.position.set(-400, 175 , -700); kly_rackObject.add(greenled2mesh); //borderEC const borderECgeometry = new THREE.BoxGeometry(10, 400, 600); const borderECgeometrymesh = new THREE.Mesh(borderECgeometry, materialGreyDark); borderECgeometrymesh.position.set( -400, -650 , -810); kly_rackObject.add(borderECgeometrymesh); //EC1 const EC1geometry = new THREE.BoxGeometry(10, 350, 40); const EC1geometrymesh = new THREE.Mesh(EC1geometry, materialGreyMedium); EC1geometrymesh.position.set( -402, -650 , -1000); kly_rackObject.add(EC1geometrymesh); //EC2 const EC2geometry = new THREE.BoxGeometry(10, 350, 40); const EC2geometrymesh = new THREE.Mesh(EC2geometry, materialGreyMedium); EC2geometrymesh.position.set( -402, -650 , -950); kly_rackObject.add(EC2geometrymesh); //EC2 const EC3geometry = new THREE.BoxGeometry(10, 350, 40); const EC3geometrymesh = new THREE.Mesh(EC3geometry, materialGreyMedium); EC3geometrymesh.position.set( -402, -650 , -900); kly_rackObject.add(EC3geometrymesh); kly_rackObject.rotateY(Math.PI); kly_rackObject.position.set(400, 1250, -400); rar2.add(kly_rackObject); return rar2; } // RAR3 export function rar3(param) { const width=800, height=2500, depth=800; const rar3 = new THREE.Object3D(); const rar3_rackObject = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000d0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rar3.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(850, 80, 750); rar3.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850, 2330, 600], [0, Math.PI / 2, 0]); const softbluematerial = new THREE.MeshLambertMaterial({color: 0x2b7cff}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424}); //rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, silvermaterial); rrmesh.position.set( 0, 0 , -10); rar3_rackObject.add(rrmesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 700); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 1200 , -15); rar3_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 700); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 1200 , -15); rar3_rackObject.add(Rtargetmesh); //edge le const llegeometry = new THREE.BoxGeometry(width-750, height, depth-750); const llemesh = new THREE.Mesh(llegeometry, materialGreyDark); llemesh.position.set( -425, 0 , -370); rar3_rackObject.add(llemesh); //edge re const lregeometry = new THREE.BoxGeometry(width-750, height, depth-750); const lremesh = new THREE.Mesh(lregeometry, materialGreyDark); lremesh.position.set( -425, 0 , 375); rar3_rackObject.add(lremesh); //edge ue const luegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const luemesh = new THREE.Mesh(luegeometry, materialGreyDark); luemesh.position.set( -425, 1225 , 0); rar3_rackObject.add(luemesh); //edge de const ldegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const ldemesh = new THREE.Mesh(ldegeometry, materialGreyDark); ldemesh.position.set( -425, -1230 , 0); rar3_rackObject.add(ldemesh); //drawer 1 const d1geometry = new THREE.BoxGeometry(10, 200, 600); const d1geometrymesh = new THREE.Mesh(d1geometry, materialGreyMedium); d1geometrymesh.position.set( -400, 900 , -10); rar3_rackObject.add(d1geometrymesh); //drawer 2 const d2geometrymesh = new THREE.Mesh(d1geometry, materialGreyMedium); d2geometrymesh.position.set( -400, 600 , -10); rar3_rackObject.add(d2geometrymesh); //drawer 3 const d3geometrymesh = new THREE.Mesh(d1geometry, materialGreyMedium); d3geometrymesh.position.set( -400, 300 , -10); rar3_rackObject.add(d3geometrymesh); //drawer 4 const d4geometrymesh = new THREE.Mesh(d1geometry, materialGreyMedium); d4geometrymesh.position.set( -400, 0 , -10); rar3_rackObject.add(d4geometrymesh); //drawer 5 const d5geometrymesh = new THREE.Mesh(d1geometry, materialGreyMedium); d5geometrymesh.position.set( -400, -300 , -10); rar3_rackObject.add(d5geometrymesh); //drawer 6 const d6geometrymesh = new THREE.Mesh(d1geometry, materialGreyMedium); d6geometrymesh.position.set( -400, -600 , -10); rar3_rackObject.add(d6geometrymesh); rar3_rackObject.rotateY(Math.PI); rar3_rackObject.position.set(400, 1250, 400); rar3.add(rar3_rackObject); return rar3; } // rack Terafermi export function rtf(param) { const width=800, height=2500, depth=600; const rtf = new THREE.Object3D(); const rtf_rackObject = new THREE.Object3D(); const bluematerial = new THREE.MeshLambertMaterial({color: 0x0053d9}); const softbluematerial = new THREE.MeshLambertMaterial({color: 0x2b7cff}); const target = new THREE.MeshLambertMaterial({color: 0xfbe928}); const materialDarkblue = new THREE.MeshLambertMaterial({color: 0x021061}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const whitematerial = new THREE.MeshLambertMaterial({color: 0xffffff}); const materialBase = new THREE.MeshLambertMaterial({color: 0x0000d0}); const text = param.name; let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; rtf.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } function createText() { textGeo = new TextGeometry(text, {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = -0.5 * (textGeo.boundingBox.max.x - textGeo.boundingBox.min.x); textMesh = new THREE.Mesh(textGeo, materialBase); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); const group2 = group.clone(); group2.rotateY(Math.PI); group2.position.set(850, 90, 850); rtf.add(group2); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(50, [850, 2330, 600], [0, Math.PI / 2, 0]); // rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, softbluematerial); rrmesh.position.set( 0, 0 , -10); rtf_rackObject.add(rrmesh); //front yellow target const Ftarget = new THREE.BoxGeometry(2, 90, 500); const Ftargetmesh = new THREE.Mesh(Ftarget, target); Ftargetmesh.position.set( -451, 1200 , -15); rtf_rackObject.add(Ftargetmesh); //Rear yellow target const Rtarget = new THREE.BoxGeometry(2, 90, 500); const Rtargetmesh = new THREE.Mesh(Rtarget, target); Rtargetmesh.position.set( 401, 1200 , -15); rtf_rackObject.add(Rtargetmesh); //edge le const llegeometry = new THREE.BoxGeometry(width-750, height, depth-550); const llemesh = new THREE.Mesh(llegeometry, bluematerial); llemesh.position.set( -425, 0 , -285); rtf_rackObject.add(llemesh); //edge re const lregeometry = new THREE.BoxGeometry(width-750, height, depth-550); const lremesh = new THREE.Mesh(lregeometry, bluematerial); lremesh.position.set( -425, 0 , 265); rtf_rackObject.add(lremesh); //edge ue const luegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const luemesh = new THREE.Mesh(luegeometry, bluematerial); luemesh.position.set( -425, 1225 , -7); rtf_rackObject.add(luemesh); //edge de const ldegeometry = new THREE.BoxGeometry(width-750, height-2450, depth-50); const ldemesh = new THREE.Mesh(ldegeometry, bluematerial); ldemesh.position.set( -425, -1230 , -7); rtf_rackObject.add(ldemesh); //base border const screenbordergeometry = new THREE.BoxGeometry(10, 350, 550); const screenbordergeometrymesh = new THREE.Mesh(screenbordergeometry, whitematerial); screenbordergeometrymesh.position.set( -400, 400 , 0); rtf_rackObject.add(screenbordergeometrymesh); //screen border const basebordergeometry = new THREE.BoxGeometry(10, 150, 200); const basebordergeometrymesh = new THREE.Mesh(basebordergeometry, silvermaterial); basebordergeometrymesh.position.set( -401, 450 , 0); rtf_rackObject.add(basebordergeometrymesh); //screen const screengeometry = new THREE.BoxGeometry(10, 140, 180); const screengeometrymesh = new THREE.Mesh(screengeometry, materialDarkblue); screengeometrymesh.position.set( -402, 450 , 0); rtf_rackObject.add(screengeometrymesh); //base border2 const baseborder2geometry = new THREE.BoxGeometry(10, 450, 550); const baseborder2geometrymesh = new THREE.Mesh(baseborder2geometry, whitematerial); baseborder2geometrymesh.position.set( -400, -800 , 0); rtf_rackObject.add(baseborder2geometrymesh); rtf_rackObject.rotateY(Math.PI); rtf_rackObject.position.set(400, 1250, 400); rtf.add(rtf_rackObject); return rtf; } // camod rack export function camod(param) { const width=800, height=2500, depth=800; const camod = new THREE.Object3D(); const camod_rackObject = new THREE.Object3D(); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363}); const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const greenmaterial = new THREE.MeshLambertMaterial({color: 0x17fc03}); const redmaterial = new THREE.MeshLambertMaterial({color: 0xff0000}); const yellowmaterial = new THREE.MeshLambertMaterial({color: 0xFBE928}); const blackmaterial = new THREE.MeshLambertMaterial({color: 0x000000}); //right rack const lrgeometry = new THREE.BoxGeometry(width, height, depth); const lrmesh = new THREE.Mesh(lrgeometry, materialGreyDark); lrmesh.position.set(0 , 0 , 0); camod_rackObject.add(lrmesh); //left rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, materialGreyDark); rrmesh.position.set( 0, 0 , -810); camod_rackObject.add(rrmesh); //edge lle const llegeometry = new THREE.BoxGeometry(width-750, height-100, depth-790); const llemesh = new THREE.Mesh(llegeometry, blackmaterial); llemesh.position.set( -377, 0 , -1155); camod_rackObject.add(llemesh); //edge lre const lregeometry = new THREE.BoxGeometry(width-750, height-100, depth-790); const lremesh = new THREE.Mesh(lregeometry, blackmaterial); lremesh.position.set( -377, 0 , -470); camod_rackObject.add(lremesh); //edge rle const rlegeometry = new THREE.BoxGeometry(width-750, height-100, depth-790); const rlemesh = new THREE.Mesh(rlegeometry, blackmaterial); rlemesh.position.set( -377, 0 , -340); camod_rackObject.add(rlemesh); //edge rre const rregeometry = new THREE.BoxGeometry(width-750, height-100, depth-790); const rremesh = new THREE.Mesh(rregeometry, blackmaterial); rremesh.position.set( -377, 0 , 345); camod_rackObject.add(rremesh); //edge lue const luegeometry = new THREE.BoxGeometry(width-750, height-2490, depth-105); const luemesh = new THREE.Mesh(luegeometry, blackmaterial); luemesh.position.set( -377, 1200 , -813); camod_rackObject.add(luemesh); //edge lde const ldegeometry = new THREE.BoxGeometry(width-750, height-2490, depth-105); const ldemesh = new THREE.Mesh(ldegeometry, blackmaterial); ldemesh.position.set( -377, -1200 , -807); camod_rackObject.add(ldemesh); //edge rue const ruegeometry = new THREE.BoxGeometry(width-750, height-2490, depth-105); const ruemesh = new THREE.Mesh(ruegeometry, blackmaterial); ruemesh.position.set( -377, 1200 , 0); camod_rackObject.add(ruemesh); //edge rde const rdegeometry = new THREE.BoxGeometry(width-750, height-2490, depth-105); const rdemesh = new THREE.Mesh(rdegeometry, blackmaterial); rdemesh.position.set( -377, -1200 , 0); camod_rackObject.add(rdemesh); //triangle warning1 const trianglewarning = new THREE.CylinderGeometry(200, 200, 1, 3); const trianglewarningmesh = new THREE.Mesh(trianglewarning, yellowmaterial); trianglewarningmesh.rotateX(Math.PI * 0.5); trianglewarningmesh.rotateY(Math.PI * 1); trianglewarningmesh.rotateZ(Math.PI * 0.5); trianglewarningmesh.position.set(-401, 700 , 0); camod_rackObject.add(trianglewarningmesh); //triangle warning black const trianglewarning2 = new THREE.CylinderGeometry(180, 180, 1, 3); const trianglewarning2mesh = new THREE.Mesh(trianglewarning2, blackmaterial); trianglewarning2mesh.rotateX(Math.PI * 0.5); trianglewarning2mesh.rotateY(Math.PI * 1); trianglewarning2mesh.rotateZ(Math.PI * 0.5); trianglewarning2mesh.position.set(-402, 700 , 0); camod_rackObject.add(trianglewarning2mesh); //triangle warning yellow2 const trianglewarning3 = new THREE.CylinderGeometry(150, 150, 1, 3); const trianglewarning3mesh = new THREE.Mesh(trianglewarning3, yellowmaterial); trianglewarning3mesh.rotateX(Math.PI * 0.5); trianglewarning3mesh.rotateY(Math.PI * 1); trianglewarning3mesh.rotateZ(Math.PI * 0.5); trianglewarning3mesh.position.set(-403, 700 , 0); camod_rackObject.add(trianglewarning3mesh); //ZOT1 const zot1geometry = new THREE.BoxGeometry(10, 110, 10); const zot1geometrymesh = new THREE.Mesh(zot1geometry, blackmaterial); zot1geometrymesh.position.set( -404, 750 , -20); zot1geometrymesh.rotateX(Math.PI * 1.65); zot1geometrymesh.rotateY(Math.PI * 1.50); zot1geometrymesh.rotateZ(Math.PI * 1.50); camod_rackObject.add(zot1geometrymesh); //ZOT2 const zot2geometry = new THREE.BoxGeometry(10, 70, 10); const zot2geometrymesh = new THREE.Mesh(zot2geometry, blackmaterial); zot2geometrymesh.position.set( -404, 715 , -16); zot2geometrymesh.rotateX(Math.PI * 1.85); zot2geometrymesh.rotateY(Math.PI * 1.50); zot2geometrymesh.rotateZ(Math.PI * 1.50); camod_rackObject.add(zot2geometrymesh); //ZOT3 const zot3geometry = new THREE.BoxGeometry(10, 80, 10); const zot3geometrymesh = new THREE.Mesh(zot3geometry, blackmaterial); zot3geometrymesh.position.set( -404, 697 , -1); zot3geometrymesh.rotateX(Math.PI * 1.65); zot3geometrymesh.rotateY(Math.PI * 1.50); zot3geometrymesh.rotateZ(Math.PI * 1.50); camod_rackObject.add(zot3geometrymesh); //ZOT TRIANGLE const zottrianglegeometry = new THREE.CylinderGeometry(22, 22, 1, 3); const zottrianglegeometrymesh = new THREE.Mesh(zottrianglegeometry, blackmaterial); zottrianglegeometrymesh.rotateX(Math.PI * 0.95); zottrianglegeometrymesh.rotateY(Math.PI * 1); zottrianglegeometrymesh.rotateZ(Math.PI * 0.5); zottrianglegeometrymesh.position.set(-405, 660 , -19); camod_rackObject.add(zottrianglegeometrymesh); //handle1 const handle1geometry = new THREE.BoxGeometry(10, 250, 80); const handle1geometrymesh = new THREE.Mesh(handle1geometry, materialVeryGreyDark); handle1geometrymesh.position.set( -401, 100 , -550); camod_rackObject.add(handle1geometrymesh); //handle2 const handle2geometry = new THREE.BoxGeometry(10, 250, 80); const handle2geometrymesh = new THREE.Mesh(handle2geometry, materialVeryGreyDark); handle2geometrymesh.position.set( -401, 100 , -260); camod_rackObject.add(handle2geometrymesh); camod_rackObject.rotateY(Math.PI); camod_rackObject.position.set(400, 1250, 340); camod_rackObject.scale.set(1, 1, 0.94); camod.add(camod_rackObject); return camod; } // base mod export function klystron(param) { const text = param.name; const myscale=0.625; console.log('klystron(), text:',text.replace('TKLY_KG','K').replace('.01','').replace('KSP','KS').replace('K0','K')); const width=1500, height=1500, depth=1500; const ModK = new THREE.Object3D(); const ModContainer = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0xff0000}); const klystron = new THREE.Object3D(); let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; klystron.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } materials = [ new THREE.MeshPhongMaterial( { color: 0x333333, flatShading: true } ), // front new THREE.MeshPhongMaterial( { color: 0x333333 } ) // side ]; function createText() { textGeo = new TextGeometry(text.replace('TKLY_KG','K').replace('.01','').replace('KSP','KS').replace('K0','K'), {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = - 0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x ); textMesh = new THREE.Mesh( textGeo, materials ); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(75, [940,730,560], [0, Math.PI / 2, 0]); const basegeometry = new THREE.BoxGeometry(width, height, depth); const d1mesh = new THREE.Mesh(basegeometry, materialBase); ModContainer.add(d1mesh); // cover const d2geometry = new THREE.BoxGeometry(width+100, 100, depth+100); const dmaterial2= new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const d2mesh = new THREE.Mesh(d2geometry, dmaterial2); d2mesh.position.set(0, 800, 0); ModContainer.add(d2mesh); // base const d3geometry = new THREE.BoxGeometry(width+100, 100, depth+100); const d3mesh = new THREE.Mesh(d3geometry, materialBase); d3mesh.position.set(0, -800, 0); ModContainer.add(d3mesh); // big cylinder const d4geometry = new THREE.CylinderGeometry(400, 400, 1200, 50); const textureLoader = new THREE.TextureLoader(); const texture = textureLoader.load('./components/mod_texture.png'); texture.wrapS = texture.wrapT = THREE.RepeatWrapping; texture.repeat.set(5, 5); const material = new THREE.MeshBasicMaterial({ map: texture }); const d4mesh = new THREE.Mesh(d4geometry, material); d4mesh.rotateX(Math.PI * 1); d4mesh.rotateY(Math.PI * 1); d4mesh.rotateZ(Math.PI * 1); d4mesh.position.set(0, 970 , 300); ModContainer.add(d4mesh); // small cylinder const d5geometry = new THREE.CylinderGeometry(200, 200, 1200, 50); const textureLoader2 = new THREE.TextureLoader(); const texture2 = textureLoader.load('./components/mod_texture.png'); texture2.wrapS = texture2.wrapT = THREE.RepeatWrapping; texture2.repeat.set(3, 3); const material2 = new THREE.MeshBasicMaterial({ map: texture2 }); const d5mesh = new THREE.Mesh(d5geometry, material2); d5mesh.rotateX(Math.PI * 1); d5mesh.rotateY(Math.PI * 1); d5mesh.rotateZ(Math.PI * 1); d5mesh.position.set(0, 1670 , 300); ModContainer.add(d5mesh); // high cover const d6geometry = new THREE.CylinderGeometry(220, 220, 90, 50); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const d6mesh = new THREE.Mesh(d6geometry, materialGreyDark); d6mesh.rotateX(Math.PI * 1); d6mesh.rotateY(Math.PI * 1); d6mesh.rotateZ(Math.PI * 1); d6mesh.position.set(0, 2300 , 300); ModContainer.add(d6mesh); // right arm const Bracciodx = new THREE.BoxGeometry( 600, 100, 200 ); const d7mesh = new THREE.Mesh(Bracciodx, materialBase); d7mesh.rotateX(Math.PI * 1); d7mesh.rotateY(Math.PI * 1.25); d7mesh.rotateZ(Math.PI * 1); d7mesh.position.set(300, 1300 , 600); ModContainer.add(d7mesh); // left arm const Bracciosx = new THREE.BoxGeometry( 600, 100, 200 ); const d8mesh = new THREE.Mesh(Bracciosx, materialBase); d8mesh.rotateX(Math.PI * 1); d8mesh.rotateY(Math.PI * 1.75); d8mesh.rotateZ(Math.PI * 1); d8mesh.position.set(300, 1300 , 0); ModContainer.add(d8mesh); // right arm continue const PBracciodx = new THREE.BoxGeometry( 600, 100, 190 ); const d9mesh = new THREE.Mesh(PBracciodx, materialBase); d9mesh.rotateX(Math.PI * 1); d9mesh.rotateY(Math.PI * 1); d9mesh.rotateZ(Math.PI * 1); d9mesh.position.set(743, 1300 , 790); ModContainer.add(d9mesh); //prolung braccia sx const PBracciosx = new THREE.BoxGeometry( 600, 100, 190 ); const d10mesh = new THREE.Mesh(PBracciosx, materialBase); d10mesh.rotateX(Math.PI * 1); d10mesh.rotateY(Math.PI * 1); d10mesh.rotateZ(Math.PI * 1); d10mesh.position.set(743, 1300 , -190); ModContainer.add(d10mesh); //trave 1 base const trave1 = new THREE.BoxGeometry( 80, 1500, 190 ); const materialtrave= new THREE.MeshLambertMaterial({color: 0xd80000}); const d12mesh = new THREE.Mesh(trave1, materialtrave); d12mesh.rotateX(Math.PI * 1); d12mesh.rotateY(Math.PI * 1); d12mesh.rotateZ(Math.PI * 1); d12mesh.position.set(-760, 0 , -300); ModContainer.add(d12mesh); //trave 2 base const trave2 = new THREE.BoxGeometry( 80, 1500, 190 ); const d13mesh = new THREE.Mesh(trave1, materialtrave); d13mesh.rotateX(Math.PI * 1); d13mesh.rotateY(Math.PI * 1); d13mesh.rotateZ(Math.PI * 1); d13mesh.position.set(-760, 0 , 300); ModContainer.add(d13mesh); //targhetta const targhetta = new THREE.BoxGeometry( 10, 300, 300 ); const d14mesh = new THREE.Mesh(targhetta, dmaterial2); d14mesh.position.set(-750, 550 , 0); ModContainer.add(d14mesh); //Torus basso sx const torus_bs = new THREE.TorusGeometry( 60, 15, 20, 20, 7); const d15mesh = new THREE.Mesh( torus_bs, materialGreyDark ); d15mesh.rotateX(Math.PI * 1); d15mesh.rotateY(Math.PI * 1.5); d15mesh.rotateZ(Math.PI * 1); d15mesh.position.set(-700, 900 , -600); ModContainer.add(d15mesh); //Torus basso dx const torus_bd = new THREE.TorusGeometry( 60, 15, 20, 20, 7); const d16mesh = new THREE.Mesh( torus_bd, materialGreyDark ); d16mesh.rotateX(Math.PI * 1); d16mesh.rotateY(Math.PI * 1.5); d16mesh.rotateZ(Math.PI * 1); d16mesh.position.set(-700, 900 , 600); ModContainer.add(d16mesh); //Torus alto sx const torus_as = new THREE.TorusGeometry( 60, 15, 20, 20, 7); const d17mesh = new THREE.Mesh( torus_as, materialGreyDark ); d17mesh.rotateX(Math.PI * 1); d17mesh.rotateY(Math.PI * 1.5); d17mesh.rotateZ(Math.PI * 1); d17mesh.position.set(700, 900 , -600); ModContainer.add(d17mesh); //Torus alto dx const torus_ad = new THREE.TorusGeometry( 60, 15, 20, 20, 7); const d18mesh = new THREE.Mesh( torus_ad, materialGreyDark ); d18mesh.rotateX(Math.PI * 1); d18mesh.rotateY(Math.PI * 1.5); d18mesh.rotateZ(Math.PI * 1); d18mesh.position.set(700, 900 , 600); ModContainer.add(d18mesh); ModContainer.rotateY(Math.PI); ModContainer.scale.set(myscale, myscale, myscale); ModContainer.position.set(width*myscale/2, height*myscale/2+50, depth*myscale/2); klystron.add(ModContainer); return klystron; } // base KXS export function klystronx(param) { const text = param.name; const myscale=0.625; const width=1200, height=1200, depth=1200; const ModK = new THREE.Object3D(); const ModContainer = new THREE.Object3D(); const materialBase = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const klystron = new THREE.Object3D(); let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; klystron.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } materials = [ new THREE.MeshPhongMaterial( { color: 0x333333, flatShading: true } ), // front new THREE.MeshPhongMaterial( { color: 0x333333 } ) // side ]; function createText() { textGeo = new TextGeometry(text.replace('TKLY_KG','K').replace('.01',''), {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = - 0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x ); textMesh = new THREE.Mesh( textGeo, materials ); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(75, [760,600,840], [0, Math.PI / 2, 0]); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const basegeometry = new THREE.BoxGeometry(width, height+200, depth); const d1mesh = new THREE.Mesh(basegeometry, materialBase); d1mesh.position.set(0, 100, -900); ModContainer.add(d1mesh); // redcube const d2geometry = new THREE.BoxGeometry(width-400, height, depth); const dmaterial2= new THREE.MeshLambertMaterial({color: 0xe02900}); const d2mesh = new THREE.Mesh(d2geometry, dmaterial2); d2mesh.position.set(200, 1400, -900); ModContainer.add(d2mesh); // base const d3geometry = new THREE.BoxGeometry(width, height, depth); const d3mesh = new THREE.Mesh(d3geometry, materialBase); d3mesh.position.set(0, 0, 300); ModContainer.add(d3mesh); // big red cylinder const d4geometry = new THREE.CylinderGeometry(450, 450, 1200, 50); const material = new THREE.MeshLambertMaterial({color: 0xfc0303}); const d4mesh = new THREE.Mesh(d4geometry, material); d4mesh.rotateX(Math.PI * 1); d4mesh.rotateY(Math.PI * 1); d4mesh.rotateZ(Math.PI * 1); d4mesh.position.set(0, 800 , 300); ModContainer.add(d4mesh); // yellow 1 cylinder const d5geometry = new THREE.CylinderGeometry(300, 370, 200, 50); const material2 = new THREE.MeshLambertMaterial({color: 0xecfc03}); const d5mesh = new THREE.Mesh(d5geometry, material2); d5mesh.rotateX(Math.PI * 1); d5mesh.rotateY(Math.PI * 1); d5mesh.rotateZ(Math.PI * 1); d5mesh.position.set(0, 1450 , 300); ModContainer.add(d5mesh); // yellow 2 cylinder const d6geometry = new THREE.CylinderGeometry(150, 150, 250, 50); const material3= new THREE.MeshLambertMaterial({color: 0xecfc03}); const d6mesh = new THREE.Mesh(d6geometry, material3); d6mesh.rotateX(Math.PI * 1); d6mesh.rotateY(Math.PI * 1); d6mesh.rotateZ(Math.PI * 1); d6mesh.position.set(0, 1680 , 300); ModContainer.add(d6mesh); // yellow 3 cylinder const d7geometry = new THREE.CylinderGeometry(200, 200, 100, 50); const d7mesh = new THREE.Mesh(d7geometry, material3); d7mesh.rotateX(Math.PI * 1); d7mesh.rotateY(Math.PI * 1); d7mesh.rotateZ(Math.PI * 1); d7mesh.position.set(0, 1780 , 300); ModContainer.add(d7mesh); // tag const targhetta = new THREE.BoxGeometry( 10, 200, 300 ); const materialwhite= new THREE.MeshLambertMaterial({color: 0xeffffff}); const d14mesh = new THREE.Mesh(targhetta, materialwhite); d14mesh.position.set(-610, 600 , -600); ModContainer.add(d14mesh); // torus red1 const torus_bs = new THREE.TorusGeometry( 60, 15, 20, 20, 7); const d15mesh = new THREE.Mesh( torus_bs, materialGreyDark ); d15mesh.rotateX(Math.PI * 1); d15mesh.rotateY(Math.PI * 1.5); d15mesh.rotateZ(Math.PI * 1); d15mesh.position.set(550, 2050 , -1400); ModContainer.add(d15mesh); // torus red2 const torus_bd = new THREE.TorusGeometry( 60, 15, 20, 20, 7); const d16mesh = new THREE.Mesh( torus_bd, materialGreyDark ); d16mesh.rotateX(Math.PI * 1); d16mesh.rotateY(Math.PI * 1.5); d16mesh.rotateZ(Math.PI * 1); d16mesh.position.set(-150, 2050 , -400); ModContainer.add(d16mesh); // torus 1 white const torus_as = new THREE.TorusGeometry( 60, 15, 20, 20, 7); const d17mesh = new THREE.Mesh( torus_as, materialGreyDark ); d17mesh.rotateX(Math.PI * 1); d17mesh.rotateY(Math.PI * 1.5); d17mesh.rotateZ(Math.PI * 1); d17mesh.position.set(-400, 850 , -500); ModContainer.add(d17mesh); // torus 2 white const torus_ad = new THREE.TorusGeometry( 60, 15, 20, 20, 7); const d18mesh = new THREE.Mesh( torus_ad, materialGreyDark ); d18mesh.rotateX(Math.PI * 1); d18mesh.rotateY(Math.PI * 1.5); d18mesh.rotateZ(Math.PI * 1); d18mesh.position.set(-400, 850 , -1300); ModContainer.add(d18mesh); // line1 const line1 = new THREE.BoxGeometry(10, 10, 1150); const d19mesh = new THREE.Mesh(line1, dmaterial2); d19mesh.position.set(-610, 750, -900); ModContainer.add(d19mesh); // line2 const line2 = new THREE.BoxGeometry(10, 10, 1150); const d20mesh = new THREE.Mesh(line2, dmaterial2); d20mesh.position.set(-610, 550, 300); ModContainer.add(d20mesh); ModContainer.rotateY(Math.PI); ModContainer.scale.set(myscale, myscale, myscale); ModContainer.position.set(width*myscale/2, height*myscale/2, depth*myscale/2); klystron.add(ModContainer); return klystron; } // cavity for linac export function cavitylinac(param) { const length = param.length? param.length: 1100; const cavitylinacMaster = new THREE.Object3D(); const dmaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const d1geometry = new THREE.CylinderGeometry(75, 75, length, 25); const d1mesh = new THREE.Mesh(d1geometry, dmaterial); d1mesh.position.set(0, length/2+350, 0); cavitylinacMaster.add(d1mesh); cavitylinacMaster.rotateX(Math.PI * 0.5); cavitylinacMaster.rotatedX = true; return cavitylinacMaster; } // Current Monitor export function cm(param) { const cmContiner = new THREE.Object3D(); const cmObject = new THREE.Object3D(); //cylinder mid const cylgeometry = new THREE.CylinderGeometry(115, 115, 30, 20); const cylmaterial = new THREE.MeshLambertMaterial({color: 0x00d0ff}); const cylmesh = new THREE.Mesh(cylgeometry, cylmaterial); cylmesh.rotateX(Math.PI * 1); cylmesh.rotateY(Math.PI * 1.0); cylmesh.rotateZ(Math.PI * 1.5); cylmesh.position.set(0, 0 , 0); cmObject.add(cylmesh); //cylinder center const cyl2geometry = new THREE.CylinderGeometry(75, 75, 31, 20); const cyl2material = new THREE.MeshLambertMaterial({color: 0x2d2b70}); const cyl2mesh = new THREE.Mesh(cyl2geometry, cyl2material); cyl2mesh.rotateX(Math.PI * 1); cyl2mesh.rotateY(Math.PI * 1.0); cyl2mesh.rotateZ(Math.PI * 1.5); cyl2mesh.position.set(0, 0 , 0); cmObject.add(cyl2mesh); cmObject.scale.setX(1); cmObject.scale.setY(1); cmObject.scale.setZ(1); cmObject.position.set(0, 0, 0); cmContiner.add(cmObject); cmContiner.rotateY(Math.PI * -0.5); return cmContiner; } // flsc export function flsc(param) { const length=700; const flscSR = new THREE.Object3D(); const flscContiner = new THREE.Object3D(); const materialGrey = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const materialDarkGrey = new THREE.MeshLambertMaterial({color: 0x8c8c8c}); const materialOrange= new THREE.MeshLambertMaterial({color: 0xfc9403}); const materialBlack= new THREE.MeshLambertMaterial({color: 0x000000}); //cil center const d1geometry = new THREE.CylinderGeometry(25, 25, 400, 25); const d1mesh = new THREE.Mesh(d1geometry, materialGrey); d1mesh.position.set(0, 200 , 0); flscContiner.add(d1mesh); flscContiner.rotateX(Math.PI * 1); // esagono const d2geometry = new THREE.CylinderGeometry(70, 70, 70, 6); const d2mesh = new THREE.Mesh(d2geometry, materialGrey); d2mesh.position.set(0, 290, 0); d2mesh.rotateX(Math.PI * 1); d2mesh.rotateY(Math.PI * 1); d2mesh.rotateZ(Math.PI * 1.5); flscContiner.add(d2mesh); // box orange down const orangegeometry = new THREE.CylinderGeometry(90, 90, 250, 15); const orangegeometrymesh = new THREE.Mesh(orangegeometry, materialOrange); orangegeometrymesh.position.set(0, 550, 0); flscContiner.add(orangegeometrymesh); // box black down const blackgeometry = new THREE.CylinderGeometry(90, 90, 25, 15); const blackgeometrymesh = new THREE.Mesh(blackgeometry, materialBlack); blackgeometrymesh.position.set(0, 412, 0); flscContiner.add(blackgeometrymesh); // base zigrinatura const d3geometry = new THREE.CylinderGeometry(90, 90, 50, 15); const d3mesh = new THREE.Mesh(d3geometry, materialGrey); d3mesh.rotateX(Math.PI * 1); d3mesh.rotateY(Math.PI * 1); d3mesh.rotateZ(Math.PI * 1); d3mesh.position.set(0, 170 , 0); flscContiner.add(d3mesh); // zigrinatura const d4geometry = new THREE.CylinderGeometry(60, 60, 170, 15); const textureLoader = new THREE.TextureLoader(); const texture = textureLoader.load('./components/flsc_texture.png'); texture.wrapS = texture.wrapT = THREE.RepeatWrapping; texture.repeat.set(5, 40); const material = new THREE.MeshBasicMaterial({ map: texture }); const d4mesh = new THREE.Mesh(d4geometry, material); d4mesh.rotateX(Math.PI * 1); d4mesh.rotateY(Math.PI * 1); d4mesh.rotateZ(Math.PI * 1); d4mesh.position.set(0, 60 , 0); flscContiner.add(d4mesh); // tetto zigrinatura const d5geometry = new THREE.CylinderGeometry(90, 90, 50, 15); const d5mesh = new THREE.Mesh(d5geometry, materialGrey); d5mesh.rotateX(Math.PI * 1); d5mesh.rotateY(Math.PI * 1); d5mesh.rotateZ(Math.PI * 1); d5mesh.position.set(0, -50 , 0); flscContiner.add(d5mesh); //half sphere down1 const down1geometry = new THREE.CylinderGeometry(30, 30, 15, 25); const down1geometrymesh = new THREE.Mesh(down1geometry, materialGrey); down1geometrymesh.position.set(-75, 170, -75); flscContiner.add(down1geometrymesh); //half sphere up1 const up1geometry = new THREE.CylinderGeometry(30, 30, 15, 25); const up1geometrymesh = new THREE.Mesh(up1geometry, materialGrey); up1geometrymesh.position.set(-75, -50, -75); flscContiner.add(up1geometrymesh); //half sphere down2 const down2geometry = new THREE.CylinderGeometry(30, 30, 15, 25); const down2geometrymesh = new THREE.Mesh(down2geometry, materialGrey); down2geometrymesh.position.set(75, 170, -75); flscContiner.add(down2geometrymesh); //half sphere up2 const up2geometry = new THREE.CylinderGeometry(30, 30, 15, 25); const up2geometrymesh = new THREE.Mesh(up2geometry, materialGrey); up2geometrymesh.position.set(75, -50, -75); flscContiner.add(up2geometrymesh); //half sphere down3 const down3geometry = new THREE.CylinderGeometry(30, 30, 15, 25); const down3geometrymesh = new THREE.Mesh(down2geometry, materialGrey); down3geometrymesh.position.set(0, 170, 100); flscContiner.add(down3geometrymesh); //half sphere up3 const up3geometry = new THREE.CylinderGeometry(30, 30, 15, 25); const up3geometrymesh = new THREE.Mesh(up3geometry, materialGrey); up3geometrymesh.position.set(0, -50, 100); flscContiner.add(up3geometrymesh); //cil support1 const d11geometry = new THREE.CylinderGeometry(10, 10, 300, 25); const d11mesh = new THREE.Mesh(d11geometry, materialGrey); d11mesh.position.set(-75, 20, -75); flscContiner.add(d11mesh); //cil support2 const d12geometry = new THREE.CylinderGeometry(10, 10, 300, 25); const d12mesh = new THREE.Mesh(d12geometry, materialGrey); d12mesh.position.set(75, 20, -75); flscContiner.add(d12mesh); //cil support3 const d13geometry = new THREE.CylinderGeometry(10, 10, 300, 25); const d13mesh = new THREE.Mesh(d13geometry, materialGrey); d13mesh.position.set(0, 20, 100); flscContiner.add(d13mesh); // blocco supporto const d15geometry = new THREE.CylinderGeometry(120, 120, 20, 25); const d15mesh = new THREE.Mesh(d15geometry, materialGrey); d15mesh.position.set(0, -130, 0); d15mesh.rotateX(Math.PI * 1); flscContiner.add(d15mesh); //internal block const d16geometry = new THREE.CylinderGeometry(20, 20, 60, 15); const d16mesh = new THREE.Mesh(d16geometry, materialGrey); d16mesh.position.set(0, -100, 0); d16mesh.rotateX(Math.PI * 1); flscContiner.add(d16mesh); // high box1 const d7geometry = new THREE.BoxGeometry(40, 90, 100); const d7mesh = new THREE.Mesh(d7geometry, materialDarkGrey); d7mesh.position.set(-20, -180, 0); flscContiner.add(d7mesh); // high box2 const d8geometry = new THREE.BoxGeometry(40, 60, 100); const d8mesh = new THREE.Mesh(d8geometry, materialDarkGrey); d8mesh.position.set(20, -170, 0); flscContiner.add(d8mesh); flscContiner.position.set(0, 235, 0); flscContiner.scale.setX(0.8); flscContiner.scale.setY(0.8); flscContiner.scale.setZ(0.8); flscSR.add(flscContiner); flscSR.rotateY(Math.PI * -0.5); return flscSR; } //SIP export function sip(param) { const sipContiner = new THREE.Object3D(); const sipObject = new THREE.Object3D(); //cylinder const cylgeometry = new THREE.CylinderGeometry(35, 35, 50, 15); const cylmaterial = new THREE.MeshLambertMaterial({color: 0xc7c7c7}); const cylmesh = new THREE.Mesh(cylgeometry, cylmaterial); cylmesh.rotateX(Math.PI * 1); cylmesh.rotateY(Math.PI * 1.0); cylmesh.rotateZ(Math.PI * 1.5); cylmesh.position.set(0, 0 , 0); sipObject.add(cylmesh); // connect const vlvgeometry = new THREE.BoxGeometry(30, 90, 30 ); const vlv1mesh = new THREE.Mesh(vlvgeometry, cylmaterial); vlv1mesh.position.set(0, -50, 0); sipObject.add(vlv1mesh); // box const boxmaterial = new THREE.MeshLambertMaterial({color: 0xb6b6b6}); const boxgeometry = new THREE.BoxGeometry(60, 80, 120 ); const boxmesh = new THREE.Mesh(boxgeometry, boxmaterial); boxmesh.position.set(0, -120, 0); sipObject.add(boxmesh); // blackbox1 const bb1material = new THREE.MeshLambertMaterial({color: 0x000000}); const bb1geometry = new THREE.BoxGeometry(60, 80, 10 ); const bb1mesh = new THREE.Mesh(bb1geometry, bb1material); bb1mesh.position.set(0, -120, -65); sipObject.add(bb1mesh); // blackbox2 const bb2geometry = new THREE.BoxGeometry(60, 80, 10 ); const bb2mesh = new THREE.Mesh(bb2geometry, bb1material); bb2mesh.position.set(0, -120, 65); sipObject.add(bb2mesh); // border const bordergeometry = new THREE.BoxGeometry(61, 81, 1 ); const bordermesh = new THREE.Mesh(bordergeometry, bb1material); bordermesh.position.set(0, -120, 0); sipObject.add(bordermesh); sipObject.scale.setX(1); sipObject.scale.setY(1); sipObject.scale.setZ(1); sipObject.position.set(0, 0, 0); sipContiner.add(sipObject); sipContiner.rotateY(Math.PI * 0.5); return sipContiner; } // FuG PS export function fug(width=800, height=1700, depth=600) { const text = 'Fug'; const fugObject = new THREE.Object3D(); let group, textMesh, textGeo, materials; let size = 60; let textheight = 10; let pos = []; let rot = []; const hover = 30; const curveSegments = 8; let font; function insertText(isize, ipos, irot) { group = new THREE.Group(); group.position.y = 100; fugObject.add( group ); size = isize; pos = ipos; rot = irot; loadFont(); } function loadFont() { const loader = new FontLoader(); // https://threejs.org/examples/fonts/droid_sans_bold.typeface.json loader.load( './fonts/droid_sans_bold.typeface.json', function ( response ) { font = response; refreshText(); } ); } materials = [ new THREE.MeshPhongMaterial( { color: 0x272c7d , flatShading: true } ), // front new THREE.MeshPhongMaterial( { color: 0x272c7d } ) // side ]; function createText() { textGeo = new TextGeometry(text.replace('TKLY_KG','K').replace('.01',''), {font: font, size: size, height: textheight, curveSegments: curveSegments}); textGeo.computeBoundingBox(); const centerOffset = - 0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x ); textMesh = new THREE.Mesh( textGeo, materials ); textMesh.position.x = pos[0]; textMesh.position.y = pos[1]; textMesh.position.z = pos[2]; textMesh.rotation.x = rot[0]; textMesh.rotation.y = rot[1]; textMesh.rotation.z = rot[2]; group.add( textMesh ); } function refreshText() { group.remove( textMesh ); if ( ! text ) return; createText(); } insertText(270, [-650,-1500,-720], [0, -Math.PI / 2, 0]); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const testmaterial = new THREE.MeshLambertMaterial({color: 0x00ff00}); const greenmaterial = new THREE.MeshLambertMaterial({color: 0x095c23}); const greenmaterial2 = new THREE.MeshLambertMaterial({color: 0x0f993b}); const redmaterial = new THREE.MeshLambertMaterial({color: 0xab0000}); const yellowmaterial = new THREE.MeshLambertMaterial({color: 0xcc9d02}); const emergencymaterial = new THREE.MeshLambertMaterial({color: 0xff0000}); const blumaterial = new THREE.MeshLambertMaterial({color: 0x272c7d}); const whiteaterial = new THREE.MeshLambertMaterial({color: 0xdfdfe8}); //fix FUG logo const fugfixgeometry = new THREE.BoxGeometry(10, 50, 460); const fugfixgeometrymesh = new THREE.Mesh(fugfixgeometry, blumaterial); fugfixgeometrymesh.position.set(-655,-1157,-310); fugObject.add(fugfixgeometrymesh); //left rack const lrgeometry = new THREE.BoxGeometry(800, 1700, 600); const lrmesh = new THREE.Mesh(lrgeometry, silvermaterial); lrmesh.position.set(0 , 0 , -100); fugObject.add(lrmesh); //right rack const rrgeometry = new THREE.BoxGeometry(800, 1700, 600); const rrmesh = new THREE.Mesh(rrgeometry, silvermaterial); rrmesh.position.set( 0, 0 , -710); fugObject.add(rrmesh); //basefug const basegeometry = new THREE.BoxGeometry(1050, 900, 1200); const basemesh = new THREE.Mesh(basegeometry, silvermaterial); basemesh.position.set( -130, -1320 , -400); fugObject.add(basemesh); //edge lle const llegeometry = new THREE.BoxGeometry(50, 1700, 50); const llemesh = new THREE.Mesh(llegeometry, materialGreyDark); llemesh.position.set( -425, 0 , -985); fugObject.add(llemesh); //edge lre const lregeometry = new THREE.BoxGeometry(50, 1700, 50); const lremesh = new THREE.Mesh(lregeometry, materialGreyDark); lremesh.position.set( -425, 0 , -430); fugObject.add(lremesh); //edge rle const rlegeometry = new THREE.BoxGeometry(50, 1700, 50); const rlemesh = new THREE.Mesh(rlegeometry, materialGreyDark); rlemesh.position.set( -425, 0 , -370); fugObject.add(rlemesh); //edge rre const rregeometry = new THREE.BoxGeometry(50, 1700, 50); const rremesh = new THREE.Mesh(rregeometry, materialGreyDark); rremesh.position.set( -425, 0 , 175); fugObject.add(rremesh); //edge lue const luegeometry = new THREE.BoxGeometry(50, 50, 505); const luemesh = new THREE.Mesh(luegeometry, materialGreyDark); luemesh.position.set( -425, 825 , -707); fugObject.add(luemesh); //edge lde const ldegeometry = new THREE.BoxGeometry(50, 50, 505); const ldemesh = new THREE.Mesh(ldegeometry, materialGreyDark); ldemesh.position.set( -425, -830 , -707); fugObject.add(ldemesh); //edge rue const ruegeometry = new THREE.BoxGeometry(50, 50, 505); const ruemesh = new THREE.Mesh(ruegeometry, materialGreyDark); ruemesh.position.set( -425, 825 , -100); fugObject.add(ruemesh); //edge rde const rdegeometry = new THREE.BoxGeometry(50, 50, 505); const rdemesh = new THREE.Mesh(rdegeometry, materialGreyDark); rdemesh.position.set( -425, -825 , -100); fugObject.add(rdemesh); //GreenButton const greenbutton = new THREE.CylinderGeometry(55, 55, 40, 15); const greenbuttonmesh = new THREE.Mesh(greenbutton, greenmaterial); greenbuttonmesh.rotateX(Math.PI * 0.5); greenbuttonmesh.rotateY(Math.PI * 1); greenbuttonmesh.rotateZ(Math.PI * 0.5); greenbuttonmesh.position.set(-400, 600 , -670); fugObject.add(greenbuttonmesh); //GreenLed const greenled = new THREE.CylinderGeometry(40, 40, 40, 15); const greenledmesh = new THREE.Mesh(greenled, greenmaterial2); greenledmesh.rotateX(Math.PI * 0.5); greenledmesh.rotateY(Math.PI * 1); greenledmesh.rotateZ(Math.PI * 0.5); greenledmesh.position.set(-400, 600 , -550); fugObject.add(greenledmesh); //RedButton const redbutton = new THREE.CylinderGeometry(55, 55, 40, 15); const redbuttonmesh = new THREE.Mesh(redbutton, redmaterial); redbuttonmesh.rotateX(Math.PI * 0.5); redbuttonmesh.rotateY(Math.PI * 1); redbuttonmesh.rotateZ(Math.PI * 0.5); redbuttonmesh.position.set(-400, 450 , -670); fugObject.add(redbuttonmesh); //YelloyLed const yellowled = new THREE.CylinderGeometry(40, 40, 40, 15); const yellowledmesh = new THREE.Mesh(yellowled, yellowmaterial); yellowledmesh.rotateX(Math.PI * 0.5); yellowledmesh.rotateY(Math.PI * 1); yellowledmesh.rotateZ(Math.PI * 0.5); yellowledmesh.position.set(-400, 450 , -550); fugObject.add(yellowledmesh); //EmergenctButton const emergencybutton = new THREE.CylinderGeometry(80, 80, 40, 15); const emergencybuttonmesh = new THREE.Mesh(emergencybutton, emergencymaterial); emergencybuttonmesh.rotateX(Math.PI * 0.5); emergencybuttonmesh.rotateY(Math.PI * 1); emergencybuttonmesh.rotateZ(Math.PI * 0.5); emergencybuttonmesh.position.set(-400, 270 , -620); fugObject.add(emergencybuttonmesh); //display up const displayupgeometry = new THREE.BoxGeometry(50, 50, 150); const displayupgeometrymesh = new THREE.Mesh(displayupgeometry, materialVeryGreyDark); displayupgeometrymesh.position.set( -400, 600 , -850); fugObject.add(displayupgeometrymesh); //display2 down const displayupgeometry2 = new THREE.BoxGeometry(50, 50, 150); const displayupgeometrymesh2 = new THREE.Mesh(displayupgeometry2, materialVeryGreyDark); displayupgeometrymesh2.position.set( -400, 500 , -850); fugObject.add(displayupgeometrymesh2); //switch const switchgeometry = new THREE.BoxGeometry(10, 350, 200); const switchgeometrymesh = new THREE.Mesh(switchgeometry, materialVeryGreyDark); switchgeometrymesh.position.set( -400, -50 , -850); fugObject.add(switchgeometrymesh); //Lgrid2 down const grid2geometry = new THREE.BoxGeometry(10, 200, 520); const textureLoader2 = new THREE.TextureLoader(); const texture2 = textureLoader2.load('./components/grid_texture.png'); texture2.wrapS = texture2.wrapT = THREE.RepeatWrapping; texture2.repeat.set(50, 1); const material2 = new THREE.MeshBasicMaterial({ map: texture2 }); const grid2geometrymesh = new THREE.Mesh(grid2geometry, material2); grid2geometrymesh.rotateX(Math.PI * 1); grid2geometrymesh.rotateY(Math.PI * 1); grid2geometrymesh.rotateZ(Math.PI * 1); grid2geometrymesh.position.set( -400, -650 , -710); fugObject.add(grid2geometrymesh); //Rgrid2 down const grid4geometry = new THREE.BoxGeometry(10, 200, 520); const textureLoader4 = new THREE.TextureLoader(); const texture4 = textureLoader4.load('./components/grid_texture.png'); texture4.wrapS = texture4.wrapT = THREE.RepeatWrapping; texture4.repeat.set(50, 1); const material4 = new THREE.MeshBasicMaterial({ map: texture2 }); const grid4geometrymesh = new THREE.Mesh(grid4geometry, material2); grid4geometrymesh.rotateX(Math.PI * 1); grid4geometrymesh.rotateY(Math.PI * 1); grid4geometrymesh.rotateZ(Math.PI * 1); grid4geometrymesh.position.set( -400, -650 , -130); fugObject.add(grid4geometrymesh); //drawer1 const drawer1geometry = new THREE.BoxGeometry(10, 220, 500); const drawer1geometrytrymesh = new THREE.Mesh(drawer1geometry, whiteaterial); drawer1geometrytrymesh.position.set( -400, 650 , -100); fugObject.add(drawer1geometrytrymesh); //drawer2 const drawer2geometry = new THREE.BoxGeometry(10, 220, 500); const drawer2geometrytrymesh = new THREE.Mesh(drawer2geometry, whiteaterial); drawer2geometrytrymesh.position.set( -400, 400 , -100); fugObject.add(drawer2geometrytrymesh); fugObject.rotateY(Math.PI); fugObject.position.set(400, 1750, 300); const fug = new THREE.Object3D(); fug.add(fugObject); return fug; } /* export function fug(param) { const width=800, height=1700, depth=600; const fug = new THREE.Object3D(); const fugObject = new THREE.Object3D(); const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d}); const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0}); const basematerial = new THREE.MeshLambertMaterial({color: 0xc4b2a8}); //right rack const lrgeometry = new THREE.BoxGeometry(width, height, depth); const lrmesh = new THREE.Mesh(lrgeometry, silvermaterial); lrmesh.position.set(0 , 0 , -100); fugObject.add(lrmesh); //left rack const rrgeometry = new THREE.BoxGeometry(width, height, depth); const rrmesh = new THREE.Mesh(rrgeometry, silvermaterial); rrmesh.position.set( 0, 0 , -710); fugObject.add(rrmesh); //basefug const basegeometry = new THREE.BoxGeometry(width+250, height-800, depth+600); const basemesh = new THREE.Mesh(basegeometry, silvermaterial); basemesh.position.set( -130, -1320 , -400); fugObject.add(basemesh); //edge lle const llegeometry = new THREE.BoxGeometry(50, 1700, 50); const llemesh = new THREE.Mesh(llegeometry, materialGreyDark); llemesh.position.set( -425, 0 , -985); fugObject.add(llemesh); //edge lre const lregeometry = new THREE.BoxGeometry(50, 1700, 50); const lremesh = new THREE.Mesh(lregeometry, materialGreyDark); lremesh.position.set( -425, 0 , -430); fugObject.add(lremesh); //edge rle const rlegeometry = new THREE.BoxGeometry(50, 1700, 50); const rlemesh = new THREE.Mesh(rlegeometry, materialGreyDark); rlemesh.position.set( -425, 0 , -370); fugObject.add(rlemesh); //edge rre const rregeometry = new THREE.BoxGeometry(50, 1700, 50); const rremesh = new THREE.Mesh(rregeometry, materialGreyDark); rremesh.position.set( -425, 0 , 175); fugObject.add(rremesh); //edge lue const luegeometry = new THREE.BoxGeometry(50, 50, 505); const luemesh = new THREE.Mesh(luegeometry, materialGreyDark); luemesh.position.set( -425, 825 , -707); fugObject.add(luemesh); //edge lde const ldegeometry = new THREE.BoxGeometry(50, 50, 505); const ldemesh = new THREE.Mesh(ldegeometry, materialGreyDark); ldemesh.position.set( -425, -830 , -707); fugObject.add(ldemesh); //edge rue const ruegeometry = new THREE.BoxGeometry(50, 50, 505); const ruemesh = new THREE.Mesh(ruegeometry, materialGreyDark); ruemesh.position.set( -425, 825 , -100); fugObject.add(ruemesh); //edge rde const rdegeometry = new THREE.BoxGeometry(50, 50, 505); const rdemesh = new THREE.Mesh(rdegeometry, materialGreyDark); rdemesh.position.set( -425, -825 , -100); fugObject.add(rdemesh); //base1 left and texture const drawer1geometry = new THREE.BoxGeometry(10, 1600, 500); const textureLoader = new THREE.TextureLoader(); const texture = textureLoader.load('./components/fug1screenfoto.jpg'); texture.wrapS = texture.wrapT = THREE.RepeatWrapping; texture.repeat.set(1, 1); const material = new THREE.MeshBasicMaterial({ map: texture }); const gridgeometrymesh = new THREE.Mesh(drawer1geometry, material); gridgeometrymesh.rotateX(Math.PI * 1); gridgeometrymesh.rotateY(Math.PI * 1); gridgeometrymesh.rotateZ(Math.PI * 1); gridgeometrymesh.position.set( -400, 0 , -707); fugObject.add(gridgeometrymesh); //base2 right and texture const drawer2geometry = new THREE.BoxGeometry(10, 1600, 500); const textureLoader2 = new THREE.TextureLoader(); const texture2 = textureLoader2.load('./components/fug2screenfoto.jpg'); texture2.wrapS = texture2.wrapT = THREE.RepeatWrapping; texture2.repeat.set(1, 1); const material2 = new THREE.MeshBasicMaterial({ map: texture2 }); const gridgeometry2mesh = new THREE.Mesh(drawer2geometry, material2); gridgeometry2mesh.rotateX(Math.PI * 1); gridgeometry2mesh.rotateY(Math.PI * 1); gridgeometry2mesh.rotateZ(Math.PI * 1); gridgeometry2mesh.position.set( -400, 0 , -100); fugObject.add(gridgeometry2mesh); //base3 FUG write and texture const drawer0geometry = new THREE.BoxGeometry(1, 900, 1200); const textureLoader0 = new THREE.TextureLoader(); const texture0 = textureLoader0.load('./components/fug0screenfoto.jpg'); texture0.wrapS = texture0.wrapT = THREE.RepeatWrapping; texture0.repeat.set(1, 1); const material0 = new THREE.MeshBasicMaterial({ map: texture0 }); const gridgeometry0mesh = new THREE.Mesh(drawer0geometry, material0); gridgeometry0mesh.rotateX(Math.PI * 1); gridgeometry0mesh.rotateY(Math.PI * 1); gridgeometry0mesh.rotateZ(Math.PI * 1); gridgeometry0mesh.position.set( -655, -1320 , -400); fugObject.add(gridgeometry0mesh); fugObject.rotateY(Math.PI); fugObject.position.set(400, 1750, 300); fug.add(fugObject); return fug; } */ export function gun(param) { const sphereRadius=400, sphereFactor=0.3; const cavityObject = new THREE.Object3D(); const cavitymaterial = new THREE.MeshLambertMaterial({color: 0xb0b0b0}); const cavitygeometry = new THREE.SphereGeometry(sphereRadius, 32, 32); const cavitymesh = new THREE.Mesh(cavitygeometry, cavitymaterial); cavitymesh.scale.setZ(sphereFactor); cavityObject.add(cavitymesh); /*const rfGeometry = new THREE.CylinderGeometry(cylinderRadius, cylinderRadius, cylinderHeight, 20, 2, false, 0, Math.PI * 2); const rfMesh = new THREE.Mesh(rfGeometry, cavitymaterial); // rfMesh.rotateX(Math.PI * 0.5); rfMesh.position.set(0, sphereRadius, 0); cavityObject.add(rfMesh);*/ return cavityObject; } // corrector fermi export function correctorfermi() { const length=400; const CorrectorContiner = new THREE.Object3D(); const CorrectorMaster = new THREE.Object3D(); // coil settings const loader = new THREE.TextureLoader(); const texture = loader.load('./components/coil_texture_fermi.png'); const textureTop = texture.clone(); const textureSide = texture.clone(); texture.wrapS = texture.wrapT = THREE.RepeatWrapping; texture.repeat.set(2, 20); textureTop.center.set(0.5, 0.5); textureTop.rotation = THREE.MathUtils.degToRad(90); textureSide.offset.set(0, 0.8); const dmaterial = new THREE.MeshLambertMaterial({map: texture}); const face = new THREE.MeshBasicMaterial({map: texture}); const faceTop = new THREE.MeshBasicMaterial({map: textureTop}); const faceSide = new THREE.MeshBasicMaterial({map: textureSide}); const materials = [face,face,faceTop,faceSide,faceSide,faceSide]; const d1geometry = new THREE.CylinderGeometry(500, 500, length, 4 /*radialSegments*/, 2 /*heightSegments*/, true /*openEnded*/,0 /*thetaStart*/, Math.PI * 2 /*thetaLength*/); const d1mesh = new THREE.Mesh(d1geometry, materials); d1mesh.position.set(0, 0, 0); d1mesh.rotateX(Math.PI * 1.25); d1mesh.rotateY(Math.PI * 1); d1mesh.rotateZ(Math.PI * 1.5); CorrectorMaster.add(d1mesh); //spessore esterno plastica bianca const redmaterialp = new THREE.MeshLambertMaterial({color: 0xeD2D2D2, side:THREE.DoubleSide}); const geometry_1p = new THREE.CylinderGeometry(501 /*radiusTop*/, 501 /*radiusBottom*/, 90 /*height*/, 4 /*radialSegments*/, 2 /*heightSegments*/, true /*openEnded*/,0 /*thetaStart*/, Math.PI * 2 /*thetaLength*/); const dmesh_1p = new THREE.Mesh(geometry_1p, redmaterialp); dmesh_1p.position.set(0, 0, 0); dmesh_1p.rotateX(Math.PI * 1.25); dmesh_1p.rotateY(Math.PI * 1); dmesh_1p.rotateZ(Math.PI * 1.5); CorrectorMaster.add(dmesh_1p); //spessore alto centro const redmaterial_5 = new THREE.MeshLambertMaterial({color: 0xeD2D2D2}); const geometry_1_5 = new THREE.BoxGeometry(length, 150, 700); const dmesh_1_5 = new THREE.Mesh(geometry_1_5, redmaterial_5); dmesh_1_5.position.set(0, 277, 0); CorrectorMaster.add(dmesh_1_5); //spessore basso const dmesh_2 = new THREE.Mesh(geometry_1_5, redmaterial_5); dmesh_2.position.set(0, -277, 0); CorrectorMaster.add(dmesh_2); //spessore destro const geometry_3 = new THREE.BoxGeometry(length, 600, 150); const dmesh_3 = new THREE.Mesh(geometry_3, redmaterial_5); dmesh_3.position.set(0, 0, -275); CorrectorMaster.add(dmesh_3); //spessore sinistro const dmesh_4 = new THREE.Mesh(geometry_3, redmaterial_5); dmesh_4.position.set(0, 0, 275); CorrectorMaster.add(dmesh_4); //cubo al centro const loader_2 = new THREE.TextureLoader(); const texture_2 = loader.load('./components/coil_texture_fermi.png'); texture_2.wrapS = texture_2.wrapT = THREE.RepeatWrapping; texture_2.repeat.set(20, 20); const textureTop_2 = texture.clone(); const textureSide_2 = texture.clone(); const dmaterial_2 = new THREE.MeshLambertMaterial({map: texture_2}); const geometry_2 = new THREE.BoxGeometry(390, 390, 390); const dmesh_5 = new THREE.Mesh(geometry_2, dmaterial_2); dmesh_5.position.set(0, 0, 0); CorrectorMaster.add(dmesh_5); //spessore interno plastica bianca const redmaterial_6 = new THREE.MeshLambertMaterial({color: 0xeD2D2D2, side:THREE.DoubleSide}); const geometry_6 = new THREE.CylinderGeometry(280 /*radiusTop*/, 280 /*radiusBottom*/, 90 /*height*/, 4 /*radialSegments*/, 2 /*heightSegments*/, true /*openEnded*/,0 /*thetaStart*/, Math.PI * 2 /*thetaLength*/); const dmesh_6 = new THREE.Mesh(geometry_6, redmaterial_6); dmesh_6.position.set(0, 0, 0); dmesh_6.rotateX(Math.PI * 1); dmesh_6.rotateY(Math.PI * 1.25); dmesh_6.rotateZ(Math.PI * 1); CorrectorMaster.add(dmesh_6); CorrectorMaster.position.set(0, 0, 0); CorrectorContiner.add(CorrectorMaster); CorrectorContiner.rotateY(Math.PI * 1); CorrectorContiner.scale.setX(0.25); CorrectorContiner.scale.setY(0.125); CorrectorContiner.scale.setZ(0.25); return CorrectorContiner; } // BPM (beam position monitor) export function bpm(param) { const width=300, height=300, depth=50, transverse=100; const bpmObject = new THREE.Object3D(); const bpmmaterial = new THREE.MeshLambertMaterial({color: 0x8000ff}); const bpmgeometryh = new THREE.BoxGeometry(width, transverse, depth); const bpmmeshh = new THREE.Mesh(bpmgeometryh, bpmmaterial); bpmObject.add(bpmmeshh); const bpmgeometryv = new THREE.BoxGeometry(transverse, height, depth); const bpmmeshv = new THREE.Mesh(bpmgeometryv, bpmmaterial); bpmObject.add(bpmmeshv); return bpmObject; } // quadrupole fermi export function quadrupolefermi(param) { const length=200; const QuadrupolContiner = new THREE.Object3D(); const QuadrupoleMaster = new THREE.Object3D(); const dmaterial = new THREE.MeshLambertMaterial({color: 0xe05040, side: THREE.DoubleSide}); const d1geometry = new THREE.CylinderGeometry(500, 500, length, 4 /*radialSegments*/, 2 /*heightSegments*/, true /*openEnded*/,0 /*thetaStart*/, Math.PI * 2 /*thetaLength*/); const d1mesh = new THREE.Mesh(d1geometry, dmaterial); d1mesh.position.set(0, 0, 0); d1mesh.rotateX(Math.PI * 1.25); d1mesh.rotateY(Math.PI * 1); d1mesh.rotateZ(Math.PI * 1.5); QuadrupoleMaster.add(d1mesh); // coil settings const coilmaterial = new THREE.MeshLambertMaterial({color: 0xcd7f32, side: THREE.DoubleSide}); const textureLoader = new THREE.TextureLoader(); const texture = textureLoader.load('./components/coil_texture.png'); texture.wrapS = texture.wrapT = THREE.RepeatWrapping; texture.repeat.set(5, 5); const coiltexture = new THREE.MeshBasicMaterial({ map: texture }); const coilmaterials = [coiltexture, coilmaterial, coilmaterial]; const coilgeometry = new THREE.CylinderGeometry(110 /*radiusTop*/, 110 /*radiusBottom*/, 120 /*height*/, 25 /*radialSegments*/, 4 /*heightSegments*/, false /*openEnded*/,Math.PI * 1.5 /*thetaStart*/, Math.PI * 2 /*thetaLength*/); //spessore alto const redmaterial = new THREE.MeshLambertMaterial({color: 0xe05040}); const geometry_1 = new THREE.BoxGeometry(200, 100, 705); const dmesh_1 = new THREE.Mesh(geometry_1, redmaterial); dmesh_1.position.set(0, 300, 0); QuadrupoleMaster.add(dmesh_1); //spessore basso const dmesh_2 = new THREE.Mesh(geometry_1, redmaterial); dmesh_2.position.set(0, -300, 0); QuadrupoleMaster.add(dmesh_2); //spessore destro const geometry_3 = new THREE.BoxGeometry(200, 500, 100); const dmesh_3 = new THREE.Mesh(geometry_3, redmaterial); dmesh_3.position.set(0, 0, -300); QuadrupoleMaster.add(dmesh_3); //spessore sinistro const dmesh_4 = new THREE.Mesh(geometry_3, redmaterial); dmesh_4.position.set(0, 0, 300); QuadrupoleMaster.add(dmesh_4); const geometry_5 = new THREE.BoxGeometry(200, 115, 280); const dmesh_5 = new THREE.Mesh(geometry_5, redmaterial); dmesh_5.rotateX(Math.PI * 0.25); dmesh_5.position.set(0, 210, 210); QuadrupoleMaster.add(dmesh_5); const dmesh_6 = new THREE.Mesh(geometry_5, redmaterial); dmesh_6.rotateX(Math.PI * 0.75); dmesh_6.position.set(0, 210, -210); QuadrupoleMaster.add(dmesh_6); const dmesh_7 = new THREE.Mesh(geometry_5, redmaterial); dmesh_7.rotateX(Math.PI * 0.75); dmesh_7.position.set(0, -210, 210); QuadrupoleMaster.add(dmesh_7); const dmesh_8 = new THREE.Mesh(geometry_5, redmaterial); dmesh_8.rotateX(Math.PI * 0.25); dmesh_8.position.set(0, -210, -210); QuadrupoleMaster.add(dmesh_8); // coil basso destra const d2mesh = new THREE.Mesh(coilgeometry, coilmaterials); d2mesh.position.set(0, -130, 120); d2mesh.rotateX(Math.PI * 1.25); d2mesh.rotateY(Math.PI * 1.50); d2mesh.rotateZ(Math.PI * 1.50); QuadrupoleMaster.add(d2mesh); // coil basso sinistra const d3mesh = new THREE.Mesh(coilgeometry, coilmaterials); d3mesh.position.set(0, -130, -120); d3mesh.rotateX(Math.PI * 1.75); d3mesh.rotateY(Math.PI * 1.50); d3mesh.rotateZ(Math.PI * 1.50); QuadrupoleMaster.add(d3mesh); // coil alto destra const d4mesh = new THREE.Mesh(coilgeometry, coilmaterials); d4mesh.position.set(0, 130, 120); d4mesh.rotateX(Math.PI * 0.75); d4mesh.rotateY(Math.PI * 1.50); d4mesh.rotateZ(Math.PI * 1.50); QuadrupoleMaster.add(d4mesh); // coil alto destra const d5mesh = new THREE.Mesh(coilgeometry, coilmaterials); d5mesh.position.set(0, 130, -120); d5mesh.rotateX(Math.PI * 1.25); d5mesh.rotateY(Math.PI * 1.50); d5mesh.rotateZ(Math.PI * 1.50); QuadrupoleMaster.add(d5mesh); QuadrupoleMaster.position.set(0, 0, 0); QuadrupolContiner.add(QuadrupoleMaster); QuadrupolContiner.rotateY(Math.PI * -0.5); QuadrupolContiner.scale.setX(0.5); QuadrupolContiner.scale.setY(0.5); QuadrupolContiner.scale.setZ(0.5); return QuadrupolContiner; } // Bending Dipole export function dipolefermi(length = 500) { const dipoleContainer = new THREE.Object3D(); const dipoleMaster = new THREE.Object3D(); //texture const loader = new THREE.TextureLoader(); const texture = loader.load('./components/dipole.png'); const textureTop = texture.clone(); const textureSide = texture.clone(); textureTop.center.set(0.5, 0.5); textureTop.rotation = THREE.MathUtils.degToRad(90); textureSide.offset.set(0, 0.8); const dmaterial = new THREE.MeshLambertMaterial({map: texture}); const face = new THREE.MeshBasicMaterial({map: texture}); const faceTop = new THREE.MeshBasicMaterial({map: textureTop}); const faceSide = new THREE.MeshBasicMaterial({map: textureSide}); const materials = [face,face,faceTop,faceSide,faceSide,faceSide]; const d1geometry = new THREE.BoxGeometry(550, 400, length); const d1mesh = new THREE.Mesh(d1geometry, materials); d1mesh.position.set(-100, 100, 0); dipoleMaster.add(d1mesh); //Coil const dipoleCoil = new THREE.Object3D(); const coilmaterial = new THREE.MeshLambertMaterial({color: 0xc08000}); const d4geometry = new THREE.BoxGeometry(100, 100, length); const d4mesh = new THREE.Mesh(d4geometry, coilmaterial); d4mesh.position.set(-200, 0, 0); dipoleCoil.add(d4mesh); const d2geometry = new THREE.CylinderGeometry(150 /*radiusTop*/, 150 /*radiusBottom*/, 100 /*height*/, 20 /*radialSegments*/, 2 /*heightSegments*/, false /*openEnded*/,Math.PI * 1.5 /*thetaStart*/, Math.PI * 1 /*thetaLength*/); const d2mesh = new THREE.Mesh(d2geometry, coilmaterial); d2mesh.position.set(-100, 0, length/2); dipoleCoil.add(d2mesh); const d3geometry = new THREE.CylinderGeometry(150 /*radiusTop*/, 150 /*radiusBottom*/, 100 /*height*/, 20 /*radialSegments*/, 2 /*heightSegments*/, false /*openEnded*/,Math.PI * 0.5 /*thetaStart*/, Math.PI * 1 /*thetaLength*/); const d3mesh = new THREE.Mesh(d3geometry, coilmaterial); d3mesh.position.set(-100, 0, -length/2); dipoleCoil.add(d3mesh); dipoleCoil.position.set(0, 0, 0); dipoleMaster.add(dipoleCoil); const dipoleCoil2 = dipoleCoil.clone(); dipoleCoil2.position.set(0, 200, 0); dipoleMaster.add(dipoleCoil2); dipoleMaster.position.set(100, 0, 0); dipoleMaster.scale.setX(0.7); dipoleMaster.scale.setY(0.7); dipoleMaster.scale.setZ(0.7); dipoleContainer.add(dipoleMaster); return dipoleContainer; } // undulator export function undulator(param) { const length=1000; const undulatorMaster = new THREE.Object3D(); const chamberMaterial = new THREE.MeshLambertMaterial({color: 0xc0c0c0}); const loader = new THREE.TextureLoader(); const texture = loader.load('./components/undulator.png'); const textureTop = texture.clone(); const textureSide = texture.clone(); textureTop.wrapS = textureTop.wrapT = THREE.RepeatWrapping; textureTop.repeat.set(30, 1); textureSide.offset.set(0.95, 0.95); const face = new THREE.MeshBasicMaterial({map: texture}); const faceTop = new THREE.MeshBasicMaterial({map: textureTop}); const faceSide = new THREE.MeshBasicMaterial({map: textureSide}); const materials = [faceTop,faceTop,chamberMaterial,chamberMaterial,chamberMaterial,chamberMaterial]; const ugeometry = new THREE.BoxGeometry(400, 400, length); const umesh = new THREE.Mesh(ugeometry, materials); undulatorMaster.add(umesh); const qedges = new THREE.EdgesGeometry(ugeometry); const lineMaterial = new THREE.LineBasicMaterial({color: 0x000000}); lineMaterial.linewidth = 4; const qline = new THREE.LineSegments(qedges, lineMaterial); undulatorMaster.add(qline); return undulatorMaster; } // valve export function vlv(param) { const vlvContiner = new THREE.Object3D(); const vlvObject = new THREE.Object3D(); //cylinder const cylgeometry = new THREE.CylinderGeometry(25, 25, 50, 15); const cylmaterial = new THREE.MeshLambertMaterial({color: 0xc7c7c7}); const cylmesh = new THREE.Mesh(cylgeometry, cylmaterial); cylmesh.rotateX(Math.PI * 1); cylmesh.rotateY(Math.PI * 1.0); cylmesh.rotateZ(Math.PI * 1.5); cylmesh.position.set(0, 0 , 0); vlvObject.add(cylmesh); // base1 const vlvgeometry = new THREE.BoxGeometry(30, 160, 60 ); const vlvmaterial = new THREE.MeshLambertMaterial({color: 0xc7c7c7}); const vlv1mesh = new THREE.Mesh(vlvgeometry, vlvmaterial); vlv1mesh.position.set(0, 50, 0); vlv1mesh.colorable = true; vlvObject.add(vlv1mesh); // hat1 const hatmaterial = new THREE.MeshLambertMaterial({color: 0xc7c7c7}); const hatgeometry = new THREE.BoxGeometry(50, 20, 100 ); const hatmesh = new THREE.Mesh(hatgeometry, hatmaterial); hatmesh.colorable = true; hatmesh.position.set(0, 120, 0); vlvObject.add(hatmesh); // blackbox const blackboxmaterial = new THREE.MeshLambertMaterial({color: 0x636363}); const blackboxgeometry = new THREE.BoxGeometry(40, 70, 70 ); const blackboxmesh = new THREE.Mesh(blackboxgeometry, blackboxmaterial); blackboxmesh.position.set(0, 165, 15); vlvObject.add(blackboxmesh); // blackbox2 const blackbox2material = new THREE.MeshLambertMaterial({color: 0x000000}); const blackbox2geometry = new THREE.BoxGeometry(40, 40, 20 ); const blackbo2xmesh = new THREE.Mesh(blackbox2geometry, blackbox2material); blackbo2xmesh.position.set(0, 165, -30); vlvObject.add(blackbo2xmesh); vlvObject.scale.setX(1.5); vlvObject.scale.setY(1.5); vlvObject.scale.setZ(1.5); //TRIANGLE1 const trianglegeometry = new THREE.CylinderGeometry(18, 18, 32, 3); const trianglegeometrymesh = new THREE.Mesh(trianglegeometry, blackbox2material); trianglegeometrymesh.rotateX(Math.PI * 0); trianglegeometrymesh.rotateY(Math.PI * 0); trianglegeometrymesh.rotateZ(Math.PI * 0.5); trianglegeometrymesh.position.set(0, 60 , -17); vlvObject.add(trianglegeometrymesh); //TRIANGLE2 const trianglegeometry2 = new THREE.CylinderGeometry(18, 18, 32, 3); const triangle2geometrymesh = new THREE.Mesh(trianglegeometry2, blackbox2material); triangle2geometrymesh.rotateX(Math.PI * 0); triangle2geometrymesh.rotateY(Math.PI * 1); triangle2geometrymesh.rotateZ(Math.PI * 0.5); triangle2geometrymesh.position.set(0, 60 ,17); vlvObject.add(triangle2geometrymesh); vlvObject.position.set(0, 0, 0); vlvObject.rotateY(Math.PI * -0.5); vlvContiner.add(vlvObject); return vlvContiner; } export function vlvUpdate(c, color) { const vlv = c.children[0].children; for (let i=0; i<vlv.length; i++) { if (vlv[i].colorable) { vlv[i].material.dispose(); vlv[i].material = new THREE.MeshLambertMaterial({color: color}); } } } // Beam Loss Monitor export function blm(param) { const length=10, dcolor='white', width=50; const cMaster = new THREE.Object3D(); const d1geometry = new THREE.BoxGeometry(length, width, width); const material = new THREE.MeshLambertMaterial({color: dcolor}); const d1mesh = new THREE.Mesh(d1geometry, material); d1mesh.position.set(-length/2, 0, 0); cMaster.add(d1mesh); return cMaster; } function blmColor(val) { if (document.location.search.indexOf('demo')>-1) { if (val < 0) return 'white'; else if (val < 1) return 'yellow'; else if (val < 2) return 'orange'; else if (val < 3) return 'red'; else return 'violet'; } if (val < 20) return 'white'; else if (val < 50) return 'yellow'; else if (val < 100) return 'orange'; else if (val < 200) return 'red'; else return 'violet'; } export function blmUpdate(c, val, direction, width=100, histogramFactor=50) { if (typeof val !== 'number') val = 0; else val = Math.abs(val); const blm = c.children[0]; blm.material.dispose(); blm.material = new THREE.MeshLambertMaterial({color: blmColor(val)}); blm.geometry.dispose(); blm.geometry = new THREE.BoxGeometry(width+val*histogramFactor, width, width); blm.position.set(direction*(width+val*histogramFactor)/2, 0, 0); blm.geometry.computeVertexNormals(); blm.geometry.normalsNeedUpdate = true; blm.geometry.verticesNeedUpdate = true; blm.geometry.dynamic = true; } // PLC export function plc(param) { const plcObject = new THREE.Object3D(); const cardsObject = new THREE.Object3D(); const greenmaterial = new THREE.MeshLambertMaterial({color: 0x00ff11}); const greenDarkmaterial = new THREE.MeshLambertMaterial({color: 0x0b5e11}); const graymaterial = new THREE.MeshLambertMaterial({color: 0x575757}); const graymaterial2 = new THREE.MeshLambertMaterial({color: 0x7d7d7d}); const silvermaterial = new THREE.MeshLambertMaterial({color: 0xa6a6a6}); const blackmaterial = new THREE.MeshLambertMaterial({color: 0x000000}); // base const basegeometry = new THREE.BoxGeometry(500, 300, 600); const basegeometrymesh = new THREE.Mesh(basegeometry, silvermaterial); basegeometrymesh.position.set( 0, 0 ,0); plcObject.add(basegeometrymesh); // card const cardgeometry = new THREE.BoxGeometry(502, 270, 50); const cardgeometrymesh = new THREE.Mesh(cardgeometry, blackmaterial); cardgeometrymesh.position.set( 0, 0 , -200); cardsObject.add(cardgeometrymesh); //led1 const led1green = new THREE.BoxGeometry(504, 20, 20); const led1greenmesh = new THREE.Mesh(led1green, greenmaterial); led1greenmesh.position.set( 0, 120 , -200); cardsObject.add(led1greenmesh); //led2 const led2green = new THREE.BoxGeometry(504, 20, 20); const led2greenmesh = new THREE.Mesh(led2green, greenmaterial); led2greenmesh.position.set( 0, 90 , -200); cardsObject.add(led2greenmesh); //led3 const led3green = new THREE.BoxGeometry(504, 20, 20); const led3greenmesh = new THREE.Mesh(led3green, greenmaterial); led3greenmesh.position.set( 0, 60 , -200); cardsObject.add(led3greenmesh); //led4 const led4green = new THREE.BoxGeometry(504, 20, 20); const led4greenmesh = new THREE.Mesh(led4green, greenmaterial); led4greenmesh.position.set( 0, 30 , -200); cardsObject.add(led4greenmesh); //led5 const led5green = new THREE.BoxGeometry(504, 20, 20); const led5greenmesh = new THREE.Mesh(led5green, greenDarkmaterial); led5greenmesh.position.set( 0, 0 , -200); cardsObject.add(led5greenmesh); //led6 const led6green = new THREE.BoxGeometry(504, 20, 20); const led6greenmesh = new THREE.Mesh(led6green, greenDarkmaterial); led6greenmesh.position.set( 0, -30 , -200); cardsObject.add(led6greenmesh); //led7 const led7green = new THREE.BoxGeometry(504, 20, 20); const led7greenmesh = new THREE.Mesh(led7green, greenDarkmaterial); led7greenmesh.position.set( 0, -60 , -200); cardsObject.add(led7greenmesh); //led8 const led8green = new THREE.BoxGeometry(504, 20, 20); const led8greenmesh = new THREE.Mesh(led8green, greenDarkmaterial); led8greenmesh.position.set( 0, -90 , -200); cardsObject.add(led8greenmesh); //led9 const led9green = new THREE.BoxGeometry(504, 20, 20); const led9greenmesh = new THREE.Mesh(led9green, greenDarkmaterial); led9greenmesh.position.set( 0, -120 , -200); cardsObject.add(led9greenmesh); //CLONE Cards const card2 = cardsObject.clone(); card2.position.set( 0, 0 , 50); plcObject.add(card2); const card3 = cardsObject.clone(); card3.position.set( 0, 0 , 100); plcObject.add(card3); const card4 = cardsObject.clone(); card4.position.set( 0, 0 , 150); plcObject.add(card4); const card5 = cardsObject.clone(); card5.position.set( 0, 0 , 200); plcObject.add(card5); // baseScreen const baseScreengeometry = new THREE.BoxGeometry(502, 270, 200); const baseScreengeometrymesh = new THREE.Mesh(baseScreengeometry, blackmaterial); baseScreengeometrymesh.position.set( 0, 0 , 120); plcObject.add(baseScreengeometrymesh); // 1livel const livel1geometry = new THREE.BoxGeometry(550, 150, 150); const livel1geometrymesh = new THREE.Mesh(livel1geometry, graymaterial); livel1geometrymesh.position.set( 0, 0 , 120); plcObject.add(livel1geometrymesh); // 2livel const livel2geometry = new THREE.BoxGeometry(590, 100, 149); const livel2geometrymesh = new THREE.Mesh(livel2geometry, graymaterial2); livel2geometrymesh.position.set( 0, 0 , 120); plcObject.add(livel2geometrymesh); plcObject.add(cardsObject); plcObject.scale.setX(0.7); plcObject.scale.setY(0.7); plcObject.scale.setZ(0.7); return plcObject; } // bst export function bst(param) { const bstObject = new THREE.Object3D(); const bstContiner = new THREE.Object3D(); const materialGrey = new THREE.MeshLambertMaterial({color: 0xc0c0c0}); const d1geometry = new THREE.CylinderGeometry(25, 25, 200, 25); const d1mesh = new THREE.Mesh(d1geometry, materialGrey); d1mesh.position.set(0, 190, 0); bstObject.add(d1mesh); bstObject.rotateX(Math.PI * 1); // circ base const d2geometry = new THREE.CylinderGeometry(50, 50, 80, 15); const d2mesh = new THREE.Mesh(d2geometry, materialGrey); d2mesh.position.set(0, 290, 0); d2mesh.rotateX(Math.PI * 1); d2mesh.rotateY(Math.PI * 1); d2mesh.rotateZ(Math.PI * 1.5); bstObject.add(d2mesh); // zigrinatura const d4geometry = new THREE.CylinderGeometry(40, 40, 120, 15); const textureLoader = new THREE.TextureLoader(); const texture = textureLoader.load('./components/flsc_texture.png'); texture.wrapS = texture.wrapT = THREE.RepeatWrapping; texture.repeat.set(5, 40); const material = new THREE.MeshBasicMaterial({ map: texture }); const d4mesh = new THREE.Mesh(d4geometry, material); d4mesh.rotateX(Math.PI * 1); d4mesh.rotateY(Math.PI * 1); d4mesh.rotateZ(Math.PI * 1); d4mesh.position.set(0, 120 , 0); bstObject.add(d4mesh); // cil Major const d5geometry = new THREE.CylinderGeometry(90, 90, 20, 15); const d5mesh = new THREE.Mesh(d5geometry, materialGrey); d5mesh.rotateX(Math.PI * 1); d5mesh.rotateY(Math.PI * 1); d5mesh.rotateZ(Math.PI * 1); d5mesh.position.set(0, 50 , 0); d5mesh.colorable = true; bstObject.add(d5mesh); // cil Med const d6geometry = new THREE.CylinderGeometry(70, 70, 80, 15); const d6mesh = new THREE.Mesh(d6geometry, materialGrey); d6mesh.rotateX(Math.PI * 1); d6mesh.rotateY(Math.PI * 1); d6mesh.rotateZ(Math.PI * 1); d6mesh.position.set(0, 0 , 0); d6mesh.colorable = true; bstObject.add(d6mesh); // cil low const d7geometry = new THREE.CylinderGeometry(50, 50, 120, 15); const d7mesh = new THREE.Mesh(d7geometry, materialGrey); d7mesh.rotateX(Math.PI * 1); d7mesh.rotateY(Math.PI * 1); d7mesh.rotateZ(Math.PI * 1); d7mesh.position.set(0, -100 , 0); d7mesh.colorable = true; bstObject.add(d7mesh); const d8geometry = new THREE.CylinderGeometry(60, 60, 20, 15); const d8mesh = new THREE.Mesh(d8geometry, materialGrey); d8mesh.rotateX(Math.PI * 1); d8mesh.rotateY(Math.PI * 1); d8mesh.rotateZ(Math.PI * 1); d8mesh.position.set(0, -170 , 0); bstObject.add(d8mesh); bstObject.position.set(0, 290, 0); bstContiner.add(bstObject); bstContiner.rotateY(Math.PI * -0.5); return bstContiner; } export function bstUpdate(c, color) { const vlv = c.children[0].children; for (let i=0; i<vlv.length; i++) { if (vlv[i].colorable) { vlv[i].material.dispose(); vlv[i].material = new THREE.MeshLambertMaterial({color: color}); } } }