stlviewer.js

Tue, 04 Apr 2017 00:47:22 +0200

author
mdd
date
Tue, 04 Apr 2017 00:47:22 +0200
changeset 11
098335a1d510
child 12
b3cf0176512e
permissions
-rw-r--r--

web viewer 3d finished

11
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
1 $( function() {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
2 $( "#sortable1 li" ).draggable({
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
3 helper: "clone",
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
4 containment:"document"
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
5 });
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
6 $( "#sortable2" ).droppable({
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
7 accept: "#sortable1 li",
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
8 drop: function( event, ui ) {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
9 ui.draggable.clone(false).appendTo($(this));
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
10 for (i =0; i<10; i++) clear_scene();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
11 window.setTimeout(update_scene,500);
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
12 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
13 });
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
14 $( "#sortable2" ).sortable({
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
15 placeholder: "ui-state-highlight",
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
16 start: clear_scene,
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
17 stop: function() {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
18 for (i =0; i<10; i++) clear_scene();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
19 window.setTimeout(update_scene,500)
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
20 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
21 });
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
22 $( "#sortable2" ).disableSelection();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
23 } );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
24
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
25 function clear_scene() {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
26 scene.children.forEach(function(v){
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
27 if(v.stlfile === true) {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
28 v.material.dispose();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
29 v.geometry.dispose();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
30 scene.remove(v);
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
31 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
32 //scene.remove(object);
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
33 });
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
34 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
35
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
36 function update_scene() {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
37 var cylinders = [];
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
38 $("#sortable2 li").each(function(idx, e){
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
39 cylinders.push($(e).attr('key'));
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
40 });
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
41 if (cylinders.length < 2) return;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
42
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
43 // fetch new objects list
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
44 $.ajax({
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
45 url: "#",
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
46 method: 'post',
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
47 dataType: 'json',
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
48 data: {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
49 action: 'calculate',
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
50 cylinders: cylinders
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
51 },
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
52 success: function(data) {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
53 //console.log(data);
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
54 // remove all meshes
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
55 clear_scene();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
56 // append the objects with positioning
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
57 for (i = 0; i<data.objects.length; i++) {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
58 var obj = data.objects[i];
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
59 if (obj[5] == "") {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
60 // spacer
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
61 filename = "stl/spacer_" + obj[4][0] + '.stl';
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
62 } else {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
63 // cylinder
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
64 filename = "stl/cylinder_" + obj[5] + '.stl';
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
65 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
66 position = [data.scale3d * 0.01 * obj[0], 0, 0];
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
67 loadSTL(filename, null, position);
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
68 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
69
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
70 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
71 });
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
72 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
73
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
74 function loadSTL(filename, material, position, rotation, scale) {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
75 //console.log(filename, position);
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
76 var loader = new THREE.STLLoader();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
77 loader.load( filename, function ( geometry ) {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
78 if (!material)
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
79 var material = new THREE.MeshPhongMaterial( {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
80 color: 0xff5533, specular: 0x111111, shininess: 200 } );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
81 var mesh = new THREE.Mesh( geometry, material );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
82 mesh["stlfile"] = true;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
83 if (!position) mesh.position.set( 0, -0.25, 0 ); else
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
84 mesh.position.set( position[0], position[1], position[2] );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
85 if (!rotation) mesh.rotation.set( 0, 0, 0 ); else
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
86 mesh.rotation.set( rotation[0], rotation[1], rotation[2] );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
87 if (!scale) mesh.scale.set( 0.01, 0.01, 0.01 ); else
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
88 mesh.scale.set( scale[0], scale[1], scale[2] );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
89
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
90 mesh.castShadow = true;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
91 mesh.receiveShadow = true;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
92
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
93 scene.add( mesh );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
94
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
95 } );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
96
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
97 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
98
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
99 function init() {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
100 container = document.createElement( 'div' );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
101 document.body.appendChild( container );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
102
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
103 camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.1, 20 );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
104 camera.position.set( 0.5, 0.35, 2 );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
105
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
106 cameraTarget = new THREE.Vector3( 0, -0.25, 0 );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
107
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
108 scene = new THREE.Scene();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
109 scene.fog = new THREE.Fog( 0x72645b, 2, 15 );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
110
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
111 var controls = new THREE.OrbitControls(camera);
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
112
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
113 // Ground
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
114
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
115 var plane = new THREE.Mesh(
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
116 new THREE.PlaneBufferGeometry( 40, 40 ),
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
117 new THREE.MeshPhongMaterial( { color: 0x999999, specular: 0x101010 } )
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
118 );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
119 plane.rotation.x = -Math.PI/2;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
120 plane.position.y = -0.5;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
121 scene.add( plane );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
122
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
123 plane.receiveShadow = true;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
124
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
125 // Lights
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
126
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
127 scene.add( new THREE.HemisphereLight( 0x443333, 0x111122 ) );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
128
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
129 addShadowedLight( 1, 1, 1, 0xffffff, 1.35 );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
130 //addShadowedLight( 0.5, 1, -1, 0xffaa00, 1 );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
131 // renderer
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
132
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
133 renderer = new THREE.WebGLRenderer( { antialias: true } );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
134 renderer.setClearColor( scene.fog.color );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
135 renderer.setPixelRatio( window.devicePixelRatio );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
136 renderer.setSize( window.innerWidth, window.innerHeight );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
137
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
138 renderer.gammaInput = true;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
139 renderer.gammaOutput = true;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
140
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
141 renderer.shadowMap.enabled = true;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
142 renderer.shadowMap.renderReverseSided = true;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
143
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
144 container.appendChild( renderer.domElement );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
145
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
146 window.addEventListener( 'resize', onWindowResize, false );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
147
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
148 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
149
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
150 function addShadowedLight( x, y, z, color, intensity ) {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
151
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
152 var directionalLight = new THREE.DirectionalLight( color, intensity );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
153 directionalLight.position.set( x, y, z );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
154 scene.add( directionalLight );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
155
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
156 directionalLight.castShadow = true;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
157
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
158 var d = 5;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
159 directionalLight.shadow.camera.left = -d;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
160 directionalLight.shadow.camera.right = d;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
161 directionalLight.shadow.camera.top = d;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
162 directionalLight.shadow.camera.bottom = -d;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
163
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
164 directionalLight.shadow.camera.near = 1;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
165 directionalLight.shadow.camera.far = 20;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
166
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
167 directionalLight.shadow.mapSize.width = 1024;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
168 directionalLight.shadow.mapSize.height = 1024;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
169
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
170 directionalLight.shadow.bias = -0.005;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
171
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
172 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
173
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
174 function onWindowResize() {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
175
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
176 camera.aspect = window.innerWidth / window.innerHeight;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
177 camera.updateProjectionMatrix();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
178
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
179 renderer.setSize( window.innerWidth, window.innerHeight );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
180
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
181 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
182
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
183 function animate() {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
184
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
185 requestAnimationFrame( animate );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
186
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
187 //render();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
188 renderer.render( scene, camera );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
189 //stats.update();
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
190
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
191 }
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
192
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
193 function render() {
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
194 var timer = Date.now() * 0.0005;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
195 camera.position.x = Math.cos( timer ) * 3;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
196 camera.position.z = Math.sin( timer ) * 3;
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
197 camera.lookAt( cameraTarget );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
198 renderer.render( scene, camera );
098335a1d510 web viewer 3d finished
mdd
parents:
diff changeset
199 }

mercurial