index.html 9.5 KB
Newer Older
M
Mr.doob 已提交
1 2
<!DOCTYPE html>
<html lang="en">
3
	<head>
M
Mr.doob 已提交
4
		<title>three.js editor</title>
5 6
		<style>
			body {
M
Mr.doob 已提交
7 8
				font-family: Arial, sans-serif;
				font-size: 14px;
9 10 11 12
				margin: 0;
				overflow: hidden;
			}

M
Mr.doob 已提交
13 14 15
			hr {
				border: 0px;
				border-top: 1px solid #ccc;
16 17 18 19 20 21
			}

		</style>
	</head>
	<body>

M
Mr.doob 已提交
22
		<script src="../build/three.min.js"></script>
M
Mr.doob 已提交
23
		<script src="../examples/js/controls/TrackballControls.js"></script>
M
Mr.doob 已提交
24 25 26 27 28
		<script src="../examples/js/loaders/ColladaLoader.js"></script>
		<script src="../examples/js/loaders/OBJLoader.js"></script>
		<script src="../examples/js/loaders/STLLoader.js"></script>
		<script src="../examples/js/loaders/UTF8Loader.js"></script>
		<script src="../examples/js/loaders/VTKLoader.js"></script>
M
Mr.doob 已提交
29 30 31
		<script src="../examples/js/loaders/ctm/lzma.js"></script>
		<script src="../examples/js/loaders/ctm/ctm.js"></script>
		<script src="../examples/js/loaders/ctm/CTMLoader.js"></script>
32
		<script src="../examples/js/exporters/GeometryExporter.js"></script>
33
		<script src="../examples/js/exporters/SceneExporter.js"></script>
M
Mr.doob 已提交
34 35 36 37

		<script src="js/libs/signals.min.js"></script>

		<script src="js/UI.js"></script>
38
		<script src="js/UI.three.js"></script>
M
Mr.doob 已提交
39
		<script src="js/ui/Menubar.js"></script>
M
Mr.doob 已提交
40
		<script src="js/ui/Menubar.File.js"></script>
41 42 43
		<script src="js/ui/Menubar.Edit.js"></script>
		<script src="js/ui/Menubar.Add.js"></script>
		<script src="js/ui/Menubar.Help.js"></script>
M
Mr.doob 已提交
44 45 46
		<script src="js/ui/Sidebar.js"></script>
		<script src="js/ui/Sidebar.Outliner.js"></script>
		<script src="js/ui/Sidebar.Properties.js"></script>
A
alteredq 已提交
47
		<script src="js/ui/Sidebar.Properties.World.js"></script>
M
Mr.doob 已提交
48 49 50
		<script src="js/ui/Sidebar.Properties.Object3D.js"></script>
		<script src="js/ui/Sidebar.Properties.Geometry.js"></script>
		<script src="js/ui/Sidebar.Properties.Material.js"></script>
M
Mr.doob 已提交
51
		<script src="js/ui/Viewport.js"></script>
52 53 54

		<script>

55 56 57
			window.URL = window.URL || window.webkitURL;
			window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;

58
			var SIGNALS = signals;
59

60 61
			var signals = {

62
				sceneCreated: new SIGNALS.Signal(),
63
				sceneChanged: new SIGNALS.Signal(),
64
				objectAdded: new SIGNALS.Signal(),
65
				objectRemoved: new SIGNALS.Signal(),
66
				objectSelected: new SIGNALS.Signal(),
M
Mr.doob 已提交
67
				objectChanged: new SIGNALS.Signal(),
M
Mr.doob 已提交
68
				materialChanged: new SIGNALS.Signal(),
A
alteredq 已提交
69
				clearColorChanged: new SIGNALS.Signal(),
70
				cameraChanged: new SIGNALS.Signal(),
71 72 73
				fogTypeChanged: new SIGNALS.Signal(),
				fogColorChanged: new SIGNALS.Signal(),
				fogParametersChanged: new SIGNALS.Signal(),
74
				windowResize: new SIGNALS.Signal()
75 76 77

			};

78 79
			//

M
Mr.doob 已提交
80 81 82 83 84 85
			var viewport = new Viewport( signals );
			viewport.setTop( '32px' );
			viewport.setWidth( '-webkit-calc(100% - 300px)', '-moz-calc(100% - 300px)', 'calc(100% - 300px)' );
			viewport.setHeight( '-webkit-calc(100% - 32px)', '-moz-calc(100% - 32px)', 'calc(100% - 32px)' );
			document.body.appendChild( viewport.dom );

M
Mr.doob 已提交
86
			var menubar = new Menubar( signals );
87 88 89 90
			menubar.setWidth( '100%' );
			menubar.setHeight( '32px' );
			document.body.appendChild( menubar.dom );

91
			var sidebar = new Sidebar( signals );
92 93 94 95
			sidebar.setLeft( '-webkit-calc(100% - 300px)', '-moz-calc(100% - 300px)', 'calc(100% - 300px)' );
			sidebar.setTop( '32px' );
			sidebar.setHeight( '-webkit-calc(100% - 32px)', '-moz-calc(100% - 32px)', 'calc(100% - 32px)' );
			document.body.appendChild( sidebar.dom );
96

97 98
			document.addEventListener( 'keydown', function ( event ) {

99
				switch ( event.keyCode ) {
100

101
					case 46: // delete
102

103
						signals.objectRemoved.dispatch();
104 105

						break;
106 107 108 109 110

				}

			} );

111 112 113 114 115 116
			document.addEventListener( 'drop', function ( event ) {

				event.preventDefault();

				var file = event.dataTransfer.files[ 0 ];

117 118 119 120 121
				var chunks = file.name.split( '.' );
				var extension = chunks.pop().toLowerCase();
				var filename = chunks.join( '.' );

				parseFile( file, filename, extension );
122

M
Mr.doob 已提交
123
			}, false );
124

125
			var parseFile = function ( file, filename, extension ) {
126

M
Mr.doob 已提交
127
				switch ( extension ) {
128

M
Mr.doob 已提交
129
					case 'ctm':
130

M
Mr.doob 已提交
131 132
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
133

M
Mr.doob 已提交
134
							var contents = event.target.result;
135

M
Mr.doob 已提交
136 137
							var stream = new CTM.Stream( contents );
							stream.offset = 0;
138

M
Mr.doob 已提交
139 140
							var loader = new THREE.CTMLoader();
							loader.createModelClassic( new CTM.File( stream ), function( geometry ) {
141

142 143 144
								geometry.sourceType = "ctm";
								geometry.sourceFile = file.name;

145
								var mesh = new THREE.Mesh( geometry, createDummyMaterial( geometry ) );
146
								mesh.name = filename;
147

M
Mr.doob 已提交
148 149
								signals.objectAdded.dispatch( mesh );
								signals.objectSelected.dispatch( mesh );
150

M
Mr.doob 已提交
151
							} );
152

M
Mr.doob 已提交
153 154
						}, false );
						reader.readAsBinaryString( file );
155

M
Mr.doob 已提交
156
						break;
M
Mr.doob 已提交
157

M
Mr.doob 已提交
158
					case 'dae':
M
Mr.doob 已提交
159

M
Mr.doob 已提交
160 161
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
M
Mr.doob 已提交
162

M
Mr.doob 已提交
163
							var contents = event.target.result;
M
Mr.doob 已提交
164

M
Mr.doob 已提交
165 166
							var parser = new DOMParser();
							var xml = parser.parseFromString( contents, 'text/xml' );
167

M
Mr.doob 已提交
168 169
							var loader = new THREE.ColladaLoader();
							loader.parse( xml, function ( collada ) {
170

171
								collada.scene.name = filename;
172

M
Mr.doob 已提交
173 174 175 176
								signals.objectAdded.dispatch( collada.scene );
								signals.objectSelected.dispatch( collada.scene );

							} );
M
Mr.doob 已提交
177

M
Mr.doob 已提交
178 179
						}, false );
						reader.readAsText( file );
M
Mr.doob 已提交
180 181 182

						break;

M
Mr.doob 已提交
183
					case 'js':
184

M
Mr.doob 已提交
185 186
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
187

M
Mr.doob 已提交
188
							var contents = event.target.result;
189

M
Mr.doob 已提交
190
							// 2.0
191

M
Mr.doob 已提交
192
							if ( contents.indexOf( 'postMessage' ) !== -1 ) {
193

M
Mr.doob 已提交
194 195
								var blob = new Blob( [ contents ], { type: 'text/javascript' } );
								var url = URL.createObjectURL( blob );
196

M
Mr.doob 已提交
197
								var worker = new Worker( url );
198

M
Mr.doob 已提交
199
								worker.onmessage = function ( event ) {
200

M
Mr.doob 已提交
201 202
									event.data.metadata = { 'format': 2 };
									parseFile( JSON.stringify( event.data ), extension );
203

M
Mr.doob 已提交
204
								};
205

M
Mr.doob 已提交
206
								worker.postMessage( new Date().getTime() );
M
Mr.doob 已提交
207

M
Mr.doob 已提交
208
								return;
209

M
Mr.doob 已提交
210
							}
211

M
Mr.doob 已提交
212
							// 3.0
213

M
Mr.doob 已提交
214
							var data = JSON.parse( contents );
215

216 217 218 219 220 221 222 223 224 225 226
							if ( data.metadata === undefined ) { // 2.0

								data.metadata = { type: 'geometry' };

							}

							if ( data.metadata.type === undefined ) { // 3.0

								data.metadata.type = 'geometry';

							}
227

M
Mr.doob 已提交
228
							if ( data.metadata.type === 'geometry' ) {
229

M
Mr.doob 已提交
230
								var geometry = new THREE.GeometryLoader().parse( data );
231 232 233
								geometry.sourceType = "ascii";
								geometry.sourceFile = file.name;

234
								var mesh = new THREE.Mesh( geometry, createDummyMaterial( geometry ) );
235
								mesh.name = filename;
236

M
Mr.doob 已提交
237 238
								signals.objectAdded.dispatch( mesh );
								signals.objectSelected.dispatch( mesh );
M
Mr.doob 已提交
239

M
Mr.doob 已提交
240
							} else if ( data.metadata.type === 'scene' ) {
241

M
Mr.doob 已提交
242
								new THREE.SceneLoader().parse( data, function ( scene ) {
M
Mr.doob 已提交
243

244 245
									scene.name = filename;

M
Mr.doob 已提交
246 247
									signals.objectAdded.dispatch( scene );
									signals.objectSelected.dispatch( scene );
M
Mr.doob 已提交
248

M
Mr.doob 已提交
249
								}, '' );
M
Mr.doob 已提交
250

M
Mr.doob 已提交
251
							}
M
Mr.doob 已提交
252

M
Mr.doob 已提交
253 254
						}, false );
						reader.readAsText( file );
255

M
Mr.doob 已提交
256
						break;
M
Mr.doob 已提交
257

M
Mr.doob 已提交
258
					case 'obj':
M
Mr.doob 已提交
259

M
Mr.doob 已提交
260 261
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
262

M
Mr.doob 已提交
263
							var contents = event.target.result;
264

M
Mr.doob 已提交
265
							var object = new THREE.OBJLoader().parse( contents );
266
							object.name = filename;
267

M
Mr.doob 已提交
268 269
							signals.objectAdded.dispatch( object );
							signals.objectSelected.dispatch( object );
M
Mr.doob 已提交
270

M
Mr.doob 已提交
271 272
						}, false );
						reader.readAsText( file );
273

274
						break;
275

276
					case 'stl':
277

M
Mr.doob 已提交
278 279 280 281 282 283
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {

							var contents = event.target.result;

							var geometry = new THREE.STLLoader().parse( contents );
284 285 286
							geometry.sourceType = "stl";
							geometry.sourceFile = file.name;

287
							var mesh = new THREE.Mesh( geometry, createDummyMaterial( geometry ) );
288
							mesh.name = filename;
289

M
Mr.doob 已提交
290 291
							signals.objectAdded.dispatch( mesh );
							signals.objectSelected.dispatch( mesh );
292

M
Mr.doob 已提交
293 294
						}, false );
						reader.readAsText( file );
295

296 297
						break;

M
Mr.doob 已提交
298
					/*
299 300
					case 'utf8':

M
Mr.doob 已提交
301 302
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
303

M
Mr.doob 已提交
304
							var contents = event.target.result;
305

M
Mr.doob 已提交
306 307 308 309 310 311 312 313 314 315
							var geometry = new THREE.UTF8Loader().parse( contents );
							var material = new THREE.MeshLambertMaterial();

							var mesh = new THREE.Mesh( geometry, material );

							signals.objectAdded.dispatch( mesh );
							signals.objectSelected.dispatch( mesh );

						}, false );
						reader.readAsBinaryString( file );
316 317

						break;
M
Mr.doob 已提交
318
					*/
319

320 321
					case 'vtk':

M
Mr.doob 已提交
322 323 324 325
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {

							var contents = event.target.result;
326

M
Mr.doob 已提交
327
							var geometry = new THREE.VTKLoader().parse( contents );
328 329 330
							geometry.sourceType = "vtk";
							geometry.sourceFile = file.name;

331
							var mesh = new THREE.Mesh( geometry, createDummyMaterial( geometry ) );
332
							mesh.name = filename;
M
Mr.doob 已提交
333 334 335

							signals.objectAdded.dispatch( mesh );
							signals.objectSelected.dispatch( mesh );
336

M
Mr.doob 已提交
337 338
						}, false );
						reader.readAsText( file );
339 340 341 342 343 344

						break;

				}

			}
345

346
			var geometry = new THREE.SphereGeometry( 75, 25, 15 );
347 348

			var color = Math.random() * 0xffffff;
A
alteredq 已提交
349
			var material = new THREE.MeshLambertMaterial( { color: color, ambient: color } );
350

351
			var mesh = new THREE.Mesh( geometry, material );
352
			mesh.name = "Sphere";
353 354

			signals.objectAdded.dispatch( mesh );
355
			signals.objectSelected.dispatch( mesh );
356

M
Mr.doob 已提交
357
			var onWindowResize = function ( event ) {
358

359
				signals.windowResize.dispatch();
360

M
Mr.doob 已提交
361
			};
362

363 364
			var createDummyMaterial = function ( geometry ) {

A
alteredq 已提交
365
				return new THREE.MeshLambertMaterial();
366 367 368

			};

M
Mr.doob 已提交
369
			onWindowResize();
370

M
Mr.doob 已提交
371
			window.addEventListener( 'resize', onWindowResize, false );
372 373 374 375

		</script>
	</body>
</html>