index.html 8.7 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 23 24 25 26 27
		<script src="../build/three.min.js"></script>
		<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 已提交
28 29 30
		<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>
31
		<script src="../examples/js/exporters/GeometryExporter.js"></script>
M
Mr.doob 已提交
32 33 34 35

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

		<script src="js/UI.js"></script>
36
		<script src="js/UI.three.js"></script>
M
Mr.doob 已提交
37 38 39 40 41 42 43 44
		<script src="js/ui/Menubar.js"></script>
		<script src="js/ui/Viewport.js"></script>
		<script src="js/ui/Sidebar.js"></script>
		<script src="js/ui/Sidebar.Outliner.js"></script>
		<script src="js/ui/Sidebar.Properties.js"></script>
		<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>
45 46 47

		<script>

48 49 50
			window.URL = window.URL || window.webkitURL;
			window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;

51
			var SIGNALS = signals;
52

53 54
			var signals = {

55
				sceneCreated: new SIGNALS.Signal(),
56
				sceneChanged: new SIGNALS.Signal(),
57 58
				objectAdded: new SIGNALS.Signal(),
				objectSelected: new SIGNALS.Signal(),
M
Mr.doob 已提交
59
				objectChanged: new SIGNALS.Signal(),
M
Mr.doob 已提交
60
				materialChanged: new SIGNALS.Signal(),
61
				windowResize: new SIGNALS.Signal()
62 63 64

			};

65 66
			//

67 68 69 70 71 72 73
			var canvas = document.createElement( 'canvas' );
			var context = canvas.getContext( '2d' );
			context.fillStyle = 'rgb(255,255,255)';
			context.fillRect( 0, 0, canvas.width, canvas.height );

			var dummyTexture = new THREE.Texture( canvas );
			dummyTexture.needsUpdate = true;
74 75 76

			//

M
Mr.doob 已提交
77
			var menubar = new Menubar( signals );
78 79 80 81
			menubar.setWidth( '100%' );
			menubar.setHeight( '32px' );
			document.body.appendChild( menubar.dom );

82
			var sidebar = new Sidebar( signals );
83 84 85 86
			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 );
87

88 89 90 91 92 93
			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 );

94 95 96 97 98
			document.addEventListener( 'drop', function ( event ) {

				event.preventDefault();

				var file = event.dataTransfer.files[ 0 ];
99
				var extension = file.name.split( '.' ).pop().toLowerCase();
100

M
Mr.doob 已提交
101
				parseFile( file, extension );
102

M
Mr.doob 已提交
103
			}, false );
104

M
Mr.doob 已提交
105
			var parseFile = function ( file, extension ) {
106

M
Mr.doob 已提交
107
				switch ( extension ) {
108

M
Mr.doob 已提交
109
					case 'ctm':
110

M
Mr.doob 已提交
111 112
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
113

M
Mr.doob 已提交
114
							var contents = event.target.result;
115

M
Mr.doob 已提交
116 117
							var stream = new CTM.Stream( contents );
							stream.offset = 0;
118

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

122
								var material = new THREE.MeshLambertMaterial( { map: dummyTexture } );
123

M
Mr.doob 已提交
124
								var mesh = new THREE.Mesh( geometry, material );
125

M
Mr.doob 已提交
126 127
								signals.objectAdded.dispatch( mesh );
								signals.objectSelected.dispatch( mesh );
128

M
Mr.doob 已提交
129
							} );
130

M
Mr.doob 已提交
131 132
						}, false );
						reader.readAsBinaryString( file );
133

M
Mr.doob 已提交
134
						break;
M
Mr.doob 已提交
135

M
Mr.doob 已提交
136
					case 'dae':
M
Mr.doob 已提交
137

M
Mr.doob 已提交
138 139
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
M
Mr.doob 已提交
140

M
Mr.doob 已提交
141
							var contents = event.target.result;
M
Mr.doob 已提交
142

M
Mr.doob 已提交
143 144
							var parser = new DOMParser();
							var xml = parser.parseFromString( contents, 'text/xml' );
145

M
Mr.doob 已提交
146 147
							var loader = new THREE.ColladaLoader();
							loader.parse( xml, function ( collada ) {
148

149 150 151 152 153 154 155
								 collada.scene.traverse( function ( node ) {

									if ( node.material ) node.material.map = dummyTexture;

								} );


M
Mr.doob 已提交
156 157 158 159
								signals.objectAdded.dispatch( collada.scene );
								signals.objectSelected.dispatch( collada.scene );

							} );
M
Mr.doob 已提交
160

M
Mr.doob 已提交
161 162
						}, false );
						reader.readAsText( file );
M
Mr.doob 已提交
163 164 165

						break;

M
Mr.doob 已提交
166
					case 'js':
167

M
Mr.doob 已提交
168 169
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
170

M
Mr.doob 已提交
171
							var contents = event.target.result;
172

M
Mr.doob 已提交
173
							// 2.0
174

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

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

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

M
Mr.doob 已提交
182
								worker.onmessage = function ( event ) {
183

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

M
Mr.doob 已提交
187
								};
188

M
Mr.doob 已提交
189
								worker.postMessage( new Date().getTime() );
M
Mr.doob 已提交
190

M
Mr.doob 已提交
191
								return;
192

M
Mr.doob 已提交
193
							}
194

M
Mr.doob 已提交
195
							// 3.0
196

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

M
Mr.doob 已提交
199 200
							if ( data.metadata === undefined ) data.metadata = { type: 'geometry' }; // 2.0
							if ( data.metadata.type === undefined ) data.metadata.type = 'geometry'; // 3.0
201

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

M
Mr.doob 已提交
204
								var geometry = new THREE.GeometryLoader().parse( data );
205
								var material = new THREE.MeshLambertMaterial( { map: dummyTexture } );
206

M
Mr.doob 已提交
207
								var mesh = new THREE.Mesh( geometry, material );
208

M
Mr.doob 已提交
209 210
								signals.objectAdded.dispatch( mesh );
								signals.objectSelected.dispatch( mesh );
M
Mr.doob 已提交
211

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

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

M
Mr.doob 已提交
216 217
									signals.objectAdded.dispatch( scene );
									signals.objectSelected.dispatch( scene );
M
Mr.doob 已提交
218

M
Mr.doob 已提交
219
								}, '' );
M
Mr.doob 已提交
220

M
Mr.doob 已提交
221
							}
M
Mr.doob 已提交
222

M
Mr.doob 已提交
223 224
						}, false );
						reader.readAsText( file );
225

M
Mr.doob 已提交
226
						break;
M
Mr.doob 已提交
227

M
Mr.doob 已提交
228
					case 'obj':
M
Mr.doob 已提交
229

M
Mr.doob 已提交
230 231
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
232

M
Mr.doob 已提交
233
							var contents = event.target.result;
234

M
Mr.doob 已提交
235
							var object = new THREE.OBJLoader().parse( contents );
236

237 238 239 240 241 242
							object.traverse( function ( node ) {

								if ( node.material ) node.material.map = dummyTexture;

							} );

M
Mr.doob 已提交
243 244
							signals.objectAdded.dispatch( object );
							signals.objectSelected.dispatch( object );
M
Mr.doob 已提交
245

M
Mr.doob 已提交
246 247
						}, false );
						reader.readAsText( file );
248

249
						break;
250

251
					case 'stl':
252

M
Mr.doob 已提交
253 254 255 256 257 258
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {

							var contents = event.target.result;

							var geometry = new THREE.STLLoader().parse( contents );
259
							var material = new THREE.MeshLambertMaterial( { map: dummyTexture } );
M
Mr.doob 已提交
260 261

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

M
Mr.doob 已提交
263 264
							signals.objectAdded.dispatch( mesh );
							signals.objectSelected.dispatch( mesh );
265

M
Mr.doob 已提交
266 267
						}, false );
						reader.readAsText( file );
268

269 270
						break;

M
Mr.doob 已提交
271
					/*
272 273
					case 'utf8':

M
Mr.doob 已提交
274 275
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {
276

M
Mr.doob 已提交
277
							var contents = event.target.result;
278

M
Mr.doob 已提交
279 280 281 282 283 284 285 286 287 288
							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 );
289 290

						break;
M
Mr.doob 已提交
291
					*/
292

293 294
					case 'vtk':

M
Mr.doob 已提交
295 296 297 298
						var reader = new FileReader();
						reader.addEventListener( 'load', function ( event ) {

							var contents = event.target.result;
299

M
Mr.doob 已提交
300
							var geometry = new THREE.VTKLoader().parse( contents );
301
							var material = new THREE.MeshLambertMaterial( { map: dummyTexture } );
M
Mr.doob 已提交
302 303 304 305
							var mesh = new THREE.Mesh( geometry, material );

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

M
Mr.doob 已提交
307 308
						}, false );
						reader.readAsText( file );
309 310 311 312 313 314

						break;

				}

			}
315

316
			var geometry = new THREE.SphereGeometry( 75, 25, 15 );
317
			var material = new THREE.MeshLambertMaterial( { color: Math.random() * 0xffffff, map: dummyTexture } );
318 319 320
			var mesh = new THREE.Mesh( geometry, material );

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

M
Mr.doob 已提交
323
			var onWindowResize = function ( event ) {
324

325
				signals.windowResize.dispatch();
326

M
Mr.doob 已提交
327
			};
328

M
Mr.doob 已提交
329
			onWindowResize();
330

M
Mr.doob 已提交
331
			window.addEventListener( 'resize', onWindowResize, false );
332 333 334 335

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