From 07c56a2627a32146a00bd4cda982a15950724867 Mon Sep 17 00:00:00 2001
From: Lucio Zambon <lucio.zambon@elettra.eu>
Date: Tue, 3 Sep 2024 00:22:07 +0000
Subject: [PATCH] Add new file

---
 components/src/fugfast.js | 148 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 148 insertions(+)
 create mode 100644 components/src/fugfast.js

diff --git a/components/src/fugfast.js b/components/src/fugfast.js
new file mode 100644
index 0000000..b1ce98d
--- /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;
+	}
-- 
GitLab