--- a/stlviewer.html Mon Apr 03 20:04:15 2017 +0200 +++ b/stlviewer.html Tue Apr 04 00:47:22 2017 +0200 @@ -4,50 +4,43 @@ <title>ScubaTools Object Viewer</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> - <style> - body { - font-family: Monospace; - background-color: #000000; - margin: 0px; - overflow: hidden; - } - #info { - color: #fff; - position: absolute; - top: 10px; - width: 100%; - text-align: center; - z-index: 100; - display:block; - - } + <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" /> + <link rel="stylesheet" href="stlviewer.css" /> + <script src="https://code.jquery.com/jquery-1.12.4.js"></script> + <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> - a { color: skyblue } - .button { background:#999; color:#eee; padding:0.2em 0.5em; cursor:pointer } - .highlight { background:orange; color:#fff; } + <script src="https://threejs.org/build/three.js"></script> + <script src="https://threejs.org/examples/js/loaders/STLLoader.js"></script> + <script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script> - span { - display: inline-block; - width: 60px; - float: left; - text-align: center; - } - - </style> </head> <body> <div id="info"> + <div class="listcontainer"> + <h2>Available:</h2> + <ul id="sortable1"> + <!-- PLACEHOLDER CYLINDERS --> + </ul> + </div> + <div class="listcontainer"> + <h2>Selected:</h2> + <ul id="sortable2"> + + </ul> + </div> + <a href="https://neo-soft.org" target="_blank">NeoSoft</a> ScubaTools - <a href="https://threejs.org/" target="_blank">three.js</a> - STL loader by <a href="https://github.com/aleeper" target="_blank">aleeper</a>. <br/> Left mouse: rotate camera, right mouse: move camera, middle mouse or wheel: zoom + + </div> - <script src="https://threejs.org/build/three.js"></script> - <script src="https://threejs.org/examples/js/loaders/STLLoader.js"></script> - <script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script> + <script src="stlviewer.js"></script> + <script> var container; var camera, cameraTarget, scene, renderer; @@ -55,127 +48,6 @@ init(); animate(); - function init() { - container = document.createElement( 'div' ); - document.body.appendChild( container ); - - camera = new THREE.PerspectiveCamera( 35, window.innerWidth / window.innerHeight, 1, 15 ); - camera.position.set( 3, 0.35, 3 ); - - cameraTarget = new THREE.Vector3( 0, -0.25, 0 ); - - scene = new THREE.Scene(); - scene.fog = new THREE.Fog( 0x72645b, 2, 15 ); - - var controls = new THREE.OrbitControls(camera); - - // Ground - - var plane = new THREE.Mesh( - new THREE.PlaneBufferGeometry( 40, 40 ), - new THREE.MeshPhongMaterial( { color: 0x999999, specular: 0x101010 } ) - ); - plane.rotation.x = -Math.PI/2; - plane.position.y = -0.5; - scene.add( plane ); - - plane.receiveShadow = true; - - // ASCII file - - var loader = new THREE.STLLoader(); - loader.load( './test.stl', function ( geometry ) { - - var material = new THREE.MeshPhongMaterial( { color: 0xff5533, specular: 0x111111, shininess: 200 } ); - var mesh = new THREE.Mesh( geometry, material ); - - mesh.position.set( 0, -0.25, 0 ); - mesh.rotation.set( 0, Math.PI / 2, 0 ); - mesh.scale.set( 0.01, 0.01, 0.01 ); - - mesh.castShadow = true; - //mesh.receiveShadow = true; - - scene.add( mesh ); - - } ); - - // Lights - - scene.add( new THREE.HemisphereLight( 0x443333, 0x111122 ) ); - - addShadowedLight( 1, 1, 1, 0xffffff, 1.35 ); - //addShadowedLight( 0.5, 1, -1, 0xffaa00, 1 ); - // renderer - - renderer = new THREE.WebGLRenderer( { antialias: true } ); - renderer.setClearColor( scene.fog.color ); - renderer.setPixelRatio( window.devicePixelRatio ); - renderer.setSize( window.innerWidth, window.innerHeight ); - - renderer.gammaInput = true; - renderer.gammaOutput = true; - - renderer.shadowMap.enabled = true; - renderer.shadowMap.renderReverseSided = false; - - container.appendChild( renderer.domElement ); - - window.addEventListener( 'resize', onWindowResize, false ); - - } - - function addShadowedLight( x, y, z, color, intensity ) { - - var directionalLight = new THREE.DirectionalLight( color, intensity ); - directionalLight.position.set( x, y, z ); - scene.add( directionalLight ); - - directionalLight.castShadow = true; - - var d = 1; - directionalLight.shadow.camera.left = -d; - directionalLight.shadow.camera.right = d; - directionalLight.shadow.camera.top = d; - directionalLight.shadow.camera.bottom = -d; - - directionalLight.shadow.camera.near = 1; - directionalLight.shadow.camera.far = 4; - - directionalLight.shadow.mapSize.width = 1024; - directionalLight.shadow.mapSize.height = 1024; - - directionalLight.shadow.bias = -0.005; - - } - - function onWindowResize() { - - camera.aspect = window.innerWidth / window.innerHeight; - camera.updateProjectionMatrix(); - - renderer.setSize( window.innerWidth, window.innerHeight ); - - } - - function animate() { - - requestAnimationFrame( animate ); - - //render(); - renderer.render( scene, camera ); - //stats.update(); - - } - - function render() { - var timer = Date.now() * 0.0005; - camera.position.x = Math.cos( timer ) * 3; - camera.position.z = Math.sin( timer ) * 3; - camera.lookAt( cameraTarget ); - renderer.render( scene, camera ); - } - </script><div><canvas style="width: 1589px; height: 711px;" height="711" width="1589"></canvas><div style="position: fixed; top: 0px; left: 0px; cursor: pointer; opacity: 0.9; z-index: 10000;"><canvas style="width: 80px; height: 48px; display: block;" height="48" width="80"></canvas><canvas style="width: 80px; height: 48px; display: none;" height="48" width="80"></canvas></div></div>