index.html 6.6 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 36 37 38 39 40 41 42 43

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

		<script src="js/UI.js"></script>
		<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>
44 45 46

		<script>

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

50
			var SIGNALS = signals;
51

52 53
			var signals = {

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

			};

64 65
			//

M
Mr.doob 已提交
66
			var menubar = new Menubar( signals );
67 68 69 70
			menubar.setWidth( '100%' );
			menubar.setHeight( '32px' );
			document.body.appendChild( menubar.dom );

71
			var sidebar = new Sidebar( signals );
72 73 74 75
			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 );
76

77 78 79 80 81 82
			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 );

83 84 85 86 87
			document.addEventListener( 'drop', function ( event ) {

				event.preventDefault();

				var file = event.dataTransfer.files[ 0 ];
88
				var extension = file.name.split( '.' ).pop().toLowerCase();
89 90 91 92
				var reader = new FileReader();

				reader.onload = function ( event ) {

93
					parseFile( event.target.result, extension );
94

95 96 97
				};

				reader.readAsText( file );
98

99
			}, false );
100

101
			var parseFile = function ( contents, extension ) {
102

103
				switch ( extension ) {
104

M
Mr.doob 已提交
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
					case 'ctm':

						var stream = new CTM.Stream( contents );
						stream.offset = 0;

						var file = new CTM.File( stream );

						var loader = new THREE.CTMLoader();
						loader.createModelClassic( file, function( geometry ) {

							console.log( geometry );

						} );

						break;

121
					case 'dae':
122

123 124
						var parser = new DOMParser();
						var xml = parser.parseFromString( contents, 'text/xml' );
125

126 127
						var loader = new THREE.ColladaLoader();
						loader.parse( xml, function ( collada ) {
128

129 130
							signals.objectAdded.dispatch( collada.scene );
							signals.objectSelected.dispatch( collada.scene );
131

132
						} );
133

134
						break;
135

136
					case 'js':
137

138
						// 2.0
139

140
						if ( contents.indexOf( 'postMessage' ) !== -1 ) {
141

142 143
							var blob = new Blob( [ contents ], { type: 'text/javascript' } );
							var url = URL.createObjectURL( blob );
144

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

147
							worker.onmessage = function ( event ) {
148

149 150
								event.data.metadata = { 'format': 2 };
								parseFile( JSON.stringify( event.data ), extension );
151

152
							};
153

154
							worker.postMessage( new Date().getTime() );
155

156
							return;
157

158
						}
159

160
						// 3.0
161

162
						var data = JSON.parse( contents );
163

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

167 168 169
						if ( data.metadata.type === 'geometry' ) {

							var geometry = new THREE.GeometryLoader().parse( data );
M
Mr.doob 已提交
170
							var material = new THREE.MeshLambertMaterial();
M
Mr.doob 已提交
171

M
Mr.doob 已提交
172
							var mesh = new THREE.Mesh( geometry, material );
M
Mr.doob 已提交
173 174 175 176

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

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

179
							new THREE.SceneLoader().parse( data, function ( scene ) {
180

181 182
								signals.objectAdded.dispatch( scene );
								signals.objectSelected.dispatch( scene );
M
Mr.doob 已提交
183

184
							}, '' );
M
Mr.doob 已提交
185

186
						}
187

188
						break;
189

190
					case 'obj':
191

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

194 195
						signals.objectAdded.dispatch( object );
						signals.objectSelected.dispatch( object );
196

197
						break;
198

199
					case 'stl':
200

201 202
						var geometry = new THREE.STLLoader().parse( contents );
						var material = new THREE.MeshLambertMaterial();
203

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

206 207
						signals.objectAdded.dispatch( mesh );
						signals.objectSelected.dispatch( mesh );
208

209 210 211 212 213 214 215 216 217 218 219 220 221
						break;

					case 'utf8':

						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 );

						break;
222

223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
					case 'vtk':

						var geometry = new THREE.VTKLoader().parse( contents );
						var material = new THREE.MeshLambertMaterial();

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

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

						break;

				}

			}
238

239
			var geometry = new THREE.SphereGeometry( 75, 25, 15 );
M
Mr.doob 已提交
240
			var material = new THREE.MeshLambertMaterial( { color: Math.random() * 0xffffff } );
241 242 243
			var mesh = new THREE.Mesh( geometry, material );

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

M
Mr.doob 已提交
246
			var onWindowResize = function ( event ) {
247

248
				signals.windowResize.dispatch();
249

M
Mr.doob 已提交
250
			};
251

M
Mr.doob 已提交
252
			onWindowResize();
253

M
Mr.doob 已提交
254
			window.addEventListener( 'resize', onWindowResize, false );
255 256 257 258

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