2
0
Luis Fraguada 5 жил өмнө
parent
commit
bed4fcea2b

+ 43 - 18
examples/jsm/loaders/3DMLoader.js

@@ -5,6 +5,7 @@
 import {
 	BufferAttribute,
 	BufferGeometry,
+	BufferGeometryLoader,
 	FileLoader,
 	Loader
 } from "../../../build/three.module.js";
@@ -106,7 +107,7 @@ Rhino3dmLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
 				} );
 
 			} )
-			.then( ( message ) => this._createGeometry( message.geometry ) );
+			.then( ( message ) => this._createGeometry( message.geometryList ) );
 
 		// Remove task from the task list.
 		// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)
@@ -144,26 +145,19 @@ Rhino3dmLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
 
 	_createGeometry: function ( geometryData ) {
 
-		var geometry = new BufferGeometry();
+		var geometries = [];
+		let loader = new BufferGeometryLoader();
+		console.log(geometryData);
 
-		if ( geometryData.index ) {
+		for(var i = 0; i < geometryData.length; i++){
 
-			geometry.setIndex( new BufferAttribute( geometryData.index.array, 1 ) );
+			var geometry = loader.parse( geometryData[i] );
 
-		}
-
-		for ( var i = 0; i < geometryData.attributes.length; i ++ ) {
-
-			var attribute = geometryData.attributes[ i ];
-			var name = attribute.name;
-			var array = attribute.array;
-			var itemSize = attribute.itemSize;
-
-			geometry.setAttribute( name, new BufferAttribute( array, itemSize ) );
+			geometries.push(geometry);
 
 		}
-
-		return geometry;
+		
+		return geometries;
 
 	},
 
@@ -334,18 +328,49 @@ Rhino3dmLoader.Rhino3dmWorker = function () {
 				break;
 
 			case 'decode':
-
+				// console.log(message);
+				var buffer = message.buffer;
 				libraryPending.then( () => { 
 
 					// TODO
 					var sphere = new rhino.Sphere([0,0,0], 10);
 					console.log(sphere.radius);
 
+
+
 					var arr = new Uint8Array(buffer);
 					var doc = rhino.File3dm.fromByteArray(arr);
-
 					console.log(doc);
 
+					var objects = doc.objects();
+					var geometryList = [];
+					var geometry;
+					
+					for (var i = 0; i < objects.count; i++) {
+						var obj = objects.get(i).geometry();
+						if(obj instanceof rhino.Mesh) {
+							// convert all meshes in 3dm model into threejs objects
+							
+							geometry = obj.toThreejsJSON();
+							geometryList.push(geometry);
+							
+							
+							
+						}
+
+						/*
+					
+						if(obj instanceof rhino.PointCloud){
+							let threePts = pointsToThreejs(obj, ptMat);
+							scene.add(threePts);
+						}
+
+						*/
+						
+					}
+
+					self.postMessage( { type: 'decode', id: message.id, geometryList } );
+
 				} );
 				
 				break;

+ 13 - 14
examples/webgl_loader_3dm.html

@@ -27,11 +27,12 @@
 
 			function init() {
 
+				THREE.Object3D.DefaultUp = new THREE.Vector3(0,0,1);
 				container = document.createElement( 'div' );
 				document.body.appendChild( container );
 
-				camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 0.1, 10 );
-				camera.position.z = 2;
+				camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000 );
+				camera.position.set(26,-40,5)
 
 				scene = new THREE.Scene();
 				scene.add( new THREE.HemisphereLight() );
@@ -43,21 +44,19 @@
 				var loader = new Rhino3dmLoader( );
 				loader.setLibraryPath('jsm/libs/rhino3dm/');
 				
-				loader.load( 'models/3dm/hello_mesh.3dm', function ( object ) {
+				loader.load( 'models/3dm/hello_mesh.3dm', function ( objects ) {
 
-                    /*
-					object.traverse( function ( child ) {
+					console.log('onLoad');
+					console.log(objects);
 
-						if ( child.isMesh ) {
+					// they need materials
 
-							child.material.normalMap = normal;
-
-						}
-
-					} );
-
-					scene.add( object );
-                    */
+					var material = new THREE.MeshNormalMaterial();
+					for(var i = 0; i < objects.length; i++) {
+						var mesh = new THREE.Mesh(objects[i], material);
+						scene.add( mesh );
+					}
+                    
 
                 } );