UNPKG

@edsilv/ami.js

Version:

<p align="center"> <img src="https://user-images.githubusercontent.com/214063/46479857-4cd66e80-c7f0-11e8-9585-5748409c9490.png" width="60%"> </p>

104 lines (85 loc) 2.95 kB
import { files, stlModel, colors } from './utils'; // Classic ThreeJS setup const container = document.getElementById('container'); var renderer = new THREE.WebGLRenderer({ antialias: true, }); renderer.setSize(container.offsetWidth, container.offsetHeight); renderer.setClearColor(colors.darkGrey, 1); renderer.setPixelRatio(window.devicePixelRatio); container.appendChild(renderer.domElement); const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera( 45, container.offsetWidth / container.offsetHeight, 0.1, 1000 ); camera.position.x = 150; camera.position.y = 150; camera.position.z = 100; const controls = new AMI.TrackballControl(camera, container); const onWindowResize = () => { camera.aspect = container.offsetWidth / container.offsetHeight; camera.updateProjectionMatrix(); renderer.setSize(container.offsetWidth, container.offsetHeight); }; window.addEventListener('resize', onWindowResize, false); const particleLight = new THREE.Mesh( new THREE.SphereBufferGeometry(4, 8, 8), new THREE.MeshBasicMaterial({ color: 0xffffff }) ); scene.add(particleLight); scene.add(new THREE.AmbientLight(0x222222)); const directionalLight = new THREE.DirectionalLight(0xffffff, 1); directionalLight.position.set(1, 1, 1).normalize(); scene.add(directionalLight); const pointLight = new THREE.PointLight(0xffffff, 2, 800); particleLight.add(pointLight); // Load model and transform to LPS space const loaderSTL = new THREE.STLLoader(); loaderSTL.load(stlModel, geometry => { const material = new THREE.MeshPhongMaterial({ color: 0xf44336, specular: 0x111111, shininess: 200, }); const mesh = new THREE.Mesh(geometry, material); // to LPS space const RASToLPS = new THREE.Matrix4(); RASToLPS.set(-1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); mesh.applyMatrix(RASToLPS); scene.add(mesh); }); // Load DICOM data and setup the stack helper var loader = new AMI.VolumeLoader(container); loader .load(files) .then(function() { const series = loader.data[0].mergeSeries(loader.data); const stack = series[0].stack[0]; loader.free(); const stackHelper = new AMI.StackHelper(stack); stackHelper.border.color = colors.red; scene.add(stackHelper); const centerLPS = stackHelper.stack.worldCenter(); camera.lookAt(centerLPS.x, centerLPS.y, centerLPS.z); camera.updateProjectionMatrix(); controls.target.set(centerLPS.x, centerLPS.y, centerLPS.z); }) .catch(function(error) { window.console.log('oops... something went wrong...'); window.console.log(error); }); const animate = () => { var timer = Date.now() * 0.00025; particleLight.position.x = Math.sin(timer * 7) * 100; particleLight.position.y = Math.cos(timer * 5) * 120; particleLight.position.z = Math.cos(timer * 3) * 140; controls.update(); renderer.render(scene, camera); requestAnimationFrame(function() { animate(); }); }; animate();