// jshint esversion: 6 
import * as THREE from 'three';

	// 3hc
	export function cavity_3hcfast(length=1500) {
		const threeHCSR = new THREE.Object3D();
		const dmaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0});
		const dmaterial2 = new THREE.MeshLambertMaterial({color: 0xffffff});
		const d1geometry = new THREE.CylinderGeometry(700, 700, length, 35);
		const d1mesh = new THREE.Mesh(d1geometry, dmaterial);
		threeHCSR.add(d1mesh);				
		threeHCSR.rotateX(Math.PI * 0.5);
		threeHCSR.rotatedX = true;	

		// left
		const lrgeometry = new THREE.CylinderGeometry(750, 750, 100, 65);
		const d2mesh = new THREE.Mesh(lrgeometry, dmaterial);
		d2mesh.position.set(0, -length/2-50, 0);
		threeHCSR.add(d2mesh);

		// right
		const d3mesh = new THREE.Mesh(lrgeometry, dmaterial);
		d3mesh.position.set(0, length/2+50, 0);
		threeHCSR.add(d3mesh);

		// up1
		const udgeometry = new THREE.CylinderGeometry(250, 250, 700, 25);
		const d4mesh = new THREE.Mesh(udgeometry, dmaterial);
		d4mesh.rotateX(Math.PI * 0.5);
		d4mesh.rotateY(Math.PI * 1);
		d4mesh.rotateZ(Math.PI * 1);
		d4mesh.position.set(0, -400 , -730);		
		threeHCSR.add(d4mesh);

		// up2
		const udgeometry2 = new THREE.CylinderGeometry(150, 150, 700, 25);
		const d5mesh = new THREE.Mesh(udgeometry2, dmaterial);
		d5mesh.rotateX(Math.PI * 0.5);
		d5mesh.rotateY(Math.PI * 1);
		d5mesh.rotateZ(Math.PI * 1);
		d5mesh.position.set(0, 400 , -730);		
		threeHCSR.add(d5mesh);

		
		//tubo1
		const tubegeometry1 = new THREE.CylinderGeometry(30, 30, 1100, 25);
		const d12mesh = new THREE.Mesh(tubegeometry1, dmaterial);
		d12mesh.rotateX(Math.PI * 0.5);
		d12mesh.rotateY(Math.PI * 0.5);
		d12mesh.rotateZ(Math.PI * 0.5);
		d12mesh.position.set(-430, -150 , -930);		
		threeHCSR.add(d12mesh);	
		
		//tubo2
		const tubegeometry2 = new THREE.CylinderGeometry(30, 30, 450, 25);
		const d13mesh = new THREE.Mesh(tubegeometry2, dmaterial);
		d13mesh.rotateX(Math.PI * 0.5);
		d13mesh.rotateY(Math.PI * 1);
		d13mesh.rotateZ(Math.PI * 0.5);
		d13mesh.position.set(-200, 400 , -930);		
		threeHCSR.add(d13mesh);			
		
		//sferacopritubo
		const sphereGeometry = new THREE.SphereGeometry(30, 30, 30);
		const d14mesh = new THREE.Mesh(sphereGeometry, dmaterial);
		d14mesh.position.set(-430, 400 , -930);		
		threeHCSR.add(d14mesh);			

		
		//up3a
		const udgeometry2h = new THREE.CylinderGeometry(30, 30, 400, 25);
		const d16mesh = new THREE.Mesh(udgeometry2h, dmaterial);
		d16mesh.rotateX(Math.PI * 0.5);
		d16mesh.rotateY(Math.PI * 1);
		d16mesh.rotateZ(Math.PI * 1);
		d16mesh.position.set(0, 650 , -900);		
		threeHCSR.add(d16mesh);		
				
		
		//up3c
		const udgeometry2m = new THREE.CylinderGeometry(30, 30, 400, 25);
		const d18mesh = new THREE.Mesh(udgeometry2m, dmaterial);
		d18mesh.rotateX(Math.PI * 0.5);
		d18mesh.rotateY(Math.PI * 0.75);
		d18mesh.rotateZ(Math.PI * 1.5);
		d18mesh.position.set(-140, 790 , -1100);		
		threeHCSR.add(d18mesh);			
 
		//sferacopritubo laterale
		const sphereGeometry2 = new THREE.SphereGeometry(30, 30, 30);
		const d19mesh = new THREE.Mesh(sphereGeometry2, dmaterial);
		d19mesh.position.set(0, 650 , -800);		
		threeHCSR.add(d19mesh);			

		
		//cubo1
		const cube1 = new THREE.BoxGeometry(440, 240, 240);
		const d22mesh = new THREE.Mesh(cube1, dmaterial);
		d22mesh.position.set(-800, -400 , 0);
		threeHCSR.add(d22mesh);	
		
		
		//tubilaterali2a
		const lateraltube2a = new THREE.CylinderGeometry(140, 140, 200, 25);
		const d24mesh = new THREE.Mesh(lateraltube2a, dmaterial);
		d24mesh.rotateX(Math.PI * 0.5);
		d24mesh.rotateY(Math.PI * 1);
		d24mesh.rotateZ(Math.PI * 0.5);
		d24mesh.position.set(-650, 0 , 0);		
		threeHCSR.add(d24mesh);			

		
		//tubilaterali3a
		const lateraltube3a = new THREE.CylinderGeometry(180, 180, 110, 25);
		const d26mesh = new THREE.Mesh(lateraltube3a, dmaterial);
		d26mesh.rotateX(Math.PI * 0.5);
		d26mesh.rotateY(Math.PI * 1);
		d26mesh.rotateZ(Math.PI * 0.5);
		d26mesh.position.set(-680, 520 , -200);	
		threeHCSR.add(d26mesh);			
		

		
		return threeHCSR;
	}