Ver código fonte

Adding multi mesh import from same file

I've edited importMesh and isDescendantOf method to accepts array of meshes to import from same file. If you use .incremental file with this method it loads meshes one by one (like when you import whole .incremental file). I don't know if it's the clearest way to do that, but the idea is here ;)
OBRE Nicolas 11 anos atrás
pai
commit
4132e9ee5b
1 arquivos alterados com 15 adições e 9 exclusões
  1. 15 9
      Babylon/Tools/babylon.sceneLoader.js

+ 15 - 9
Babylon/Tools/babylon.sceneLoader.js

@@ -1,4 +1,4 @@
-"use strict";
+"use strict";
 
 var BABYLON = BABYLON || {}; 
 
@@ -448,11 +448,14 @@ var BABYLON = BABYLON || {};
         return mesh;
     };
 
-    var isDescendantOf = function (mesh, name, hierarchyIds) {
-        if (mesh.name === name) {
-            hierarchyIds.push(mesh.id);
-            return true;
-        }
+    var isDescendantOf = function (mesh, names, hierarchyIds) {
+		names = (names instanceof Array) ? names : [names];
+		for(var i in names){
+			if (mesh.name === names[i]) {
+				hierarchyIds.push(mesh.id);
+				return true;
+			}
+		}
 
         if (mesh.parentId && hierarchyIds.indexOf(mesh.parentId) !== -1) {
             hierarchyIds.push(mesh.id);
@@ -521,7 +524,7 @@ var BABYLON = BABYLON || {};
                 scene._selectionOctree.addMesh(mesh);
             }
         },
-        ImportMesh: function (meshName, rootUrl, sceneFilename, scene, then, progressCallBack) {
+        ImportMesh: function (meshesNames, rootUrl, sceneFilename, scene, then, progressCallBack) {
             // Checking if a manifest file has been set for this scene and if offline mode has been requested
             var database = new BABYLON.Database(rootUrl + sceneFilename);
             scene.database = database;
@@ -539,7 +542,10 @@ var BABYLON = BABYLON || {};
                 for (var index = 0; index < parsedData.meshes.length; index++) {
                     var parsedMesh = parsedData.meshes[index];
 
-                    if (!meshName || isDescendantOf(parsedMesh, meshName, hierarchyIds)) {
+                    if (!meshesNames || isDescendantOf(parsedMesh, meshesNames, hierarchyIds)) {
+						// Remove found mesh name from list.
+						delete meshesNames[meshesNames.indexOf(parsedMesh.name)];
+						
                         // Material ?
                         if (parsedMesh.materialId) {
                             var materialFound = (loadedMaterialsIds.indexOf(parsedMesh.materialId) !== -1);
@@ -729,4 +735,4 @@ var BABYLON = BABYLON || {};
             }
         }
     };
-})();
+})();