Skip to content
Snippets Groups Projects
  • Lucio Zambon's avatar
    Update 80 files · 0ee5780d
    Lucio Zambon authored
    - /components/src/beamlineDown.svg
    - /components/src/beamlineUP.js
    - /components/src/bending.svg
    - /components/src/blm.js
    - /components/src/blmplus.js
    - /components/src/bpm.js
    - /components/src/bpm.svg
    - /components/src/bst.js
    - /components/src/bst.svg
    - /components/src/cavity.js
    - /components/src/cavity.svg
    - /components/src/cavity_3hc.js
    - /components/src/cavity_3hc.svg
    - /components/src/cavity_3hcfast.js
    - /components/src/cavitylinac.js
    - /components/src/cavitylinac.svg
    - /components/src/chamber.js
    - /components/src/corrector.js
    - /components/src/corrector.svg
    - /components/src/correctorbooster.js
    - /components/src/correctorboosterfast.js
    - /components/src/correctorfast.js
    - /components/src/correctorfermi.js
    - /components/src/dipole.js
    - /components/src/dipolebooster.js
    - /components/src/dipoleboosterfast.js
    - /components/src/dipoleesrf.js
    - /components/src/dipolefast.js
    - /components/src/dipolefermi.js
    - /components/src/dipoleplus.js
    - /components/src/ellipticaltube.js
    - /components/src/flsc.js
    - /components/src/flsc.svg
    - /components/src/flscfast.js
    - /components/src/fug.js
    - /components/src/gun.js
    - /components/src/gun.svg
    - /components/src/kicker.js
    - /components/src/kicker.svg
    - /components/src/klystron.js
    - /components/src/klystron.svg
    - /components/src/klystron_fast.js
    - /components/src/klystronx.js
    - /components/src/klystronx.svg
    - /components/src/octupole.js
    - /components/src/octupole.svg
    - /components/src/plc.js
    - /components/src/quadrupole.js
    - /components/src/quadrupole.svg
    - /components/src/quadrupolebooster.js
    - /components/src/quadrupoleboosterfast.js
    - /components/src/quadrupolefermi.js
    - /components/src/rar1.js
    - /components/src/rar1premium.js
    - /components/src/rar2.js
    - /components/src/rar2premium.js
    - /components/src/rid.js
    - /components/src/ridpremium.js
    - /components/src/rps.js
    - /components/src/rpspremium.js
    - /components/src/rv.js
    - /components/src/rvpremium.js
    - /components/src/scw.js
    - /components/src/scw.svg
    - /components/src/scwfast.js
    - /components/src/septum.js
    - /components/src/sextupole.js
    - /components/src/sextupole.svg
    - /components/src/sextupolebooster.js
    - /components/src/sextupoleboosterfast.js
    - /components/src/sextupoleesrf.js
    - /components/src/spte.js
    - /components/src/spte.svg
    - /components/src/undulator.js
    - /components/src/undulator.svg
    - /components/src/vlv.js
    - /components/src/vlv.svg
    - /components/src/wall.js
    - /components/src/wiggler.js
    - /components/src/wiggler.svg
    0ee5780d
dipole.js 2.23 KiB
	import * as THREE from 'three';

	// Bending Dipole
	export function dipole(length=1449) {
		const dipoleMaster = new THREE.Object3D();

		// main body
		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(500, 700, length);
		const d1mesh = new THREE.Mesh(d1geometry, materials);
		d1mesh.position.set(100, 100, 0);
		dipoleMaster.add(d1mesh);

		// longitudinal 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);

		// cylinder coil front
		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);

		// cylinder coil back
		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);

		// duplicate coil
		const dipoleCoil2 = dipoleCoil.clone();
		dipoleCoil2.position.set(0, 200, 0);
		dipoleMaster.add(dipoleCoil2);
		return dipoleMaster;
	}