index.html 6.0 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 28 29 30 31 32 33 34 35 36 37 38 39
		<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>

		<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>
40 41 42

		<script>

43 44 45
			window.URL = window.URL || window.webkitURL;
			window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;

46
			var SIGNALS = signals;
47

48 49
			var signals = {

50
				sceneChanged: new SIGNALS.Signal(),
51 52
				objectAdded: new SIGNALS.Signal(),
				objectSelected: new SIGNALS.Signal(),
M
Mr.doob 已提交
53
				objectChanged: new SIGNALS.Signal(),
M
Mr.doob 已提交
54
				materialChanged: new SIGNALS.Signal(),
55
				windowResize: new SIGNALS.Signal()
56 57 58

			};

59 60
			//

M
Mr.doob 已提交
61
			var menubar = new Menubar( signals );
62 63 64 65
			menubar.setWidth( '100%' );
			menubar.setHeight( '32px' );
			document.body.appendChild( menubar.dom );

66
			var viewport = new Viewport( signals );
M
Mr.doob 已提交
67
			viewport.setTop( '32px' );
68 69
			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)' );
M
Mr.doob 已提交
70
			document.body.appendChild( viewport.dom );
71

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

78 79 80 81 82 83 84 85 86 87
			document.addEventListener( 'drop', function ( event ) {

				event.preventDefault();

				var file = event.dataTransfer.files[ 0 ];
				var extension = file.name.split( '.' )[1].toLowerCase();
				var reader = new FileReader();

				reader.onload = function ( event ) {

88
					parseFile( event.target.result, extension );
89

90 91 92
				};

				reader.readAsText( file );
93

94
			}, false );
95

96
			var parseFile = function ( contents, extension ) {
97

98
				switch ( extension ) {
99

100
					case 'dae':
101

102 103
						var parser = new DOMParser();
						var xml = parser.parseFromString( contents, 'text/xml' );
104

105
						// TODO: Update ColladaLoader
106

107 108
						var loader = new THREE.ColladaLoader();
						loader.parse( xml, function ( collada ) {
109

110 111
							signals.objectAdded.dispatch( collada.scene );
							signals.objectSelected.dispatch( collada.scene );
112

113
						} );
114

115
						break;
116

117
					case 'js':
118

119
						// 2.0
120

121
						if ( contents.indexOf( 'postMessage' ) !== -1 ) {
122

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

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

128
							worker.onmessage = function ( event ) {
129

130 131
								event.data.metadata = { 'format': 2 };
								parseFile( JSON.stringify( event.data ), extension );
132

133
							};
134

135
							worker.postMessage( new Date().getTime() );
136

137
							return;
138

139
						}
140

141
						// 3.0
142

143
						var data = JSON.parse( contents );
144

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

148 149 150
						if ( data.metadata.type === 'geometry' ) {

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

M
Mr.doob 已提交
153
							var mesh = new THREE.Mesh( geometry, material );
M
Mr.doob 已提交
154 155 156 157

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

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

160
							new THREE.SceneLoader().parse( data, function ( scene ) {
161

162 163
								signals.objectAdded.dispatch( scene );
								signals.objectSelected.dispatch( scene );
M
Mr.doob 已提交
164

165
							}, '' );
M
Mr.doob 已提交
166

167
						}
168

169
						break;
170

171
					case 'obj':
172

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

175 176
						signals.objectAdded.dispatch( object );
						signals.objectSelected.dispatch( object );
177

178
						break;
179

180
					case 'stl':
181

182 183
						var geometry = new THREE.STLLoader().parse( contents );
						var material = new THREE.MeshLambertMaterial();
184

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

187 188
						signals.objectAdded.dispatch( mesh );
						signals.objectSelected.dispatch( mesh );
189

190 191 192 193 194 195 196 197 198 199 200 201 202
						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;
203

204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
					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;

				}

			}
219

220 221 222
			//

			var geometry = new THREE.SphereGeometry( 75, 25, 15 );
M
Mr.doob 已提交
223
			var material = new THREE.MeshLambertMaterial( { color: Math.random() * 0xffffff } );
224 225 226
			var mesh = new THREE.Mesh( geometry, material );

			signals.objectAdded.dispatch( mesh );
227
			signals.objectSelected.dispatch( mesh );
228 229

			//
230

M
Mr.doob 已提交
231
			var onWindowResize = function ( event ) {
232

233
				signals.windowResize.dispatch();
234

M
Mr.doob 已提交
235
			};
236

M
Mr.doob 已提交
237
			onWindowResize();
238

M
Mr.doob 已提交
239
			window.addEventListener( 'resize', onWindowResize, false );
240 241 242 243

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