浏览代码

Adding new function to get cameras, lights, materials by tags
Serialization of tags

Deltakosh 11 年之前
父节点
当前提交
1d1cb7f413

+ 10 - 0
Babylon/Loading/Plugins/babylon.babylonFileLoader.js

@@ -99,6 +99,8 @@ var BABYLON = BABYLON || {};
         material.alpha = parsedMaterial.alpha;
 
         material.id = parsedMaterial.id;
+
+        BABYLON.Tags.AddTagsTo(material, parsedMaterial.tags);
         material.backFaceCulling = parsedMaterial.backFaceCulling;
 
         if (parsedMaterial.diffuseTexture) {
@@ -148,6 +150,8 @@ var BABYLON = BABYLON || {};
 
         multiMaterial.id = parsedMultiMaterial.id;
 
+        BABYLON.Tags.AddTagsTo(multiMaterial, parsedMultiMaterial.tags);
+
         for (var matIndex = 0; matIndex < parsedMultiMaterial.materials.length; matIndex++) {
             var subMatId = parsedMultiMaterial.materials[matIndex];
 
@@ -282,6 +286,8 @@ var BABYLON = BABYLON || {};
 
         light.id = parsedLight.id;
 
+        BABYLON.Tags.AddTagsTo(light, parsedLight.tags);
+
         if (parsedLight.intensity) {
             light.intensity = parsedLight.intensity;
         }
@@ -293,6 +299,8 @@ var BABYLON = BABYLON || {};
         var camera = new BABYLON.FreeCamera(parsedCamera.name, BABYLON.Vector3.FromArray(parsedCamera.position), scene);
         camera.id = parsedCamera.id;
 
+        BABYLON.Tags.AddTagsTo(camera, parsedCamera.tags);
+
         // Parent
         if (parsedCamera.parentId) {
             camera._waitingParentId = parsedCamera.parentId;
@@ -343,6 +351,8 @@ var BABYLON = BABYLON || {};
         var mesh = new BABYLON.Mesh(parsedMesh.name, scene);
         mesh.id = parsedMesh.id;
 
+        BABYLON.Tags.AddTagsTo(mesh, parsedMesh.tags);
+
         mesh.position = BABYLON.Vector3.FromArray(parsedMesh.position);
         if (parsedMesh.rotation) {
             mesh.rotation = BABYLON.Vector3.FromArray(parsedMesh.rotation);

+ 5 - 0
Babylon/Tools/babylon.sceneSerializer.js

@@ -8,6 +8,7 @@ var BABYLON = BABYLON || {};
         var serializationObject = {};
         serializationObject.name = light.name;
         serializationObject.id = light.id;
+        serializationObject.tags = light._tags;
 
         if (light instanceof BABYLON.PointLight) {
             serializationObject.type = 0;
@@ -39,6 +40,7 @@ var BABYLON = BABYLON || {};
     var serializeCamera = function (camera) {
         var serializationObject = {};
         serializationObject.name = camera.name;
+        serializationObject.tags = camera._tags;
         serializationObject.id = camera.id;
         serializationObject.position = camera.position.asArray();
 
@@ -125,6 +127,7 @@ var BABYLON = BABYLON || {};
 
         serializationObject.name = material.name;
         serializationObject.id = material.id;
+        serializationObject.tags = material._tags;
 
         serializationObject.materials = [];
 
@@ -155,6 +158,7 @@ var BABYLON = BABYLON || {};
         serializationObject.alpha = material.alpha;
 
         serializationObject.id = material.id;
+        serializationObject.tags = material._tags;
         serializationObject.backFaceCulling = material.backFaceCulling;
 
         if (material.diffuseTexture) {
@@ -349,6 +353,7 @@ var BABYLON = BABYLON || {};
 
         serializationObject.name = mesh.name;
         serializationObject.id = mesh.id;
+        serializationObject.tags = mesh._tags;
 
         serializationObject.position = mesh.position.asArray();
 

+ 4 - 0
Babylon/Tools/babylon.tags.js

@@ -44,6 +44,10 @@ var BABYLON = BABYLON || {};
     // a tag cannot start with '||', '&&', and '!'
     // it cannot contain whitespaces
     BABYLON.Tags.AddTagsTo = function (obj, tagsString) {
+        if (!tagsString) {
+            return;
+        }
+
         var tags = tagsString.split(" ");
         for (var t in tags) {
             BABYLON.Tags._AddTagTo(obj, tags[t]);

+ 26 - 12
Babylon/babylon.scene.js

@@ -1084,24 +1084,38 @@ var BABYLON = BABYLON || {};
     };
 
     // Tags
-    BABYLON.Scene.prototype.getMeshesByTags = function (tagsQuery) {
-        var meshes = this.meshes;
-
-        if (tagsQuery === undefined) { 
-            // returns all meshes (could be done with BABYLON.Tags.MatchesQuery but no need to have a for-loop here)
-            return meshes;
+    BABYLON.Scene.prototype._getByTags = function(list, tagsQuery) {
+        if (tagsQuery === undefined) {
+            // returns the complete list (could be done with BABYLON.Tags.MatchesQuery but no need to have a for-loop here)
+            return list;
         }
 
-        var meshesByTags = [];
+        var listByTags = [];
 
-        for (var i in meshes) {
-            var mesh = meshes[i];
-            if (BABYLON.Tags.MatchesQuery(mesh, tagsQuery)) {
-                meshesByTags.push(mesh);
+        for (var i in list) {
+            var item = list[i];
+            if (BABYLON.Tags.MatchesQuery(item, tagsQuery)) {
+                listByTags.push(item);
             }
         }
 
-        return meshesByTags;
+        return listByTags;
+    };
+
+    BABYLON.Scene.prototype.getMeshesByTags = function (tagsQuery) {
+        return this._getByTags(this.meshes, tagsQuery);
+    };
+
+    BABYLON.Scene.prototype.getCamerasByTags = function (tagsQuery) {
+        return this._getByTags(this.cameras, tagsQuery);
+    };
+
+    BABYLON.Scene.prototype.getLightsByTags = function (tagsQuery) {
+        return this._getByTags(this.lights, tagsQuery);
+    };
+
+    BABYLON.Scene.prototype.getMaterialByTags = function (tagsQuery) {
+        return this._getByTags(this.materials, tagsQuery).concat(this._getByTags(this.multiMaterials, tagsQuery));
     };
 
     // Statics