diff --git a/components/src/fugfast.js b/components/src/fugfast.js new file mode 100644 index 0000000000000000000000000000000000000000..b1ce98d6c4bfa8bdefa6aaf4f6320ee9b50d7403 --- /dev/null +++ b/components/src/fugfast.js @@ -0,0 +1,148 @@ + import * as THREE from 'three'; + import {FontLoader} from 'three/addons/loaders/FontLoader.js'; + import {TextGeometry} from 'three/addons/geometries/TextGeometry.js'; + + // fug rack + export function fugfast(width=800, height=1700, depth=800) { + 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(width, height, depth); + const lrmesh = new THREE.Mesh(lrgeometry, silvermaterial); + lrmesh.position.set(0 , 0 , 0); + fugObject.add(lrmesh); + + //right rack + const rrgeometry = new THREE.BoxGeometry(width, height, depth); + const rrmesh = new THREE.Mesh(rrgeometry, silvermaterial); + rrmesh.position.set( 0, 0 , -810); + fugObject.add(rrmesh); + + //basefug + const basegeometry = new THREE.BoxGeometry(width+250, height-800, depth+800); + 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 , -1185); + 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 , 375); + fugObject.add(rremesh); + + //edge lue + const luegeometry = new THREE.BoxGeometry(50, 50, 705); + const luemesh = new THREE.Mesh(luegeometry, materialGreyDark); + luemesh.position.set( -425, 825 , -807); + fugObject.add(luemesh); + + //edge lde + const ldegeometry = new THREE.BoxGeometry(50, 50, 705); + const ldemesh = new THREE.Mesh(ldegeometry, materialGreyDark); + ldemesh.position.set( -425, -830 , -807); + fugObject.add(ldemesh); + + //edge rue + const ruegeometry = new THREE.BoxGeometry(50, 50, 705); + const ruemesh = new THREE.Mesh(ruegeometry, materialGreyDark); + ruemesh.position.set( -425, 825 , 0); + fugObject.add(ruemesh); + + //edge rde + const rdegeometry = new THREE.BoxGeometry(50, 50, 705); + const rdemesh = new THREE.Mesh(rdegeometry, materialGreyDark); + rdemesh.position.set( -425, -825 , 0); + fugObject.add(rdemesh); + + + + + return fugObject; + }