Tags system

Tags can be added to ANY javascript object (not necessarily reserved to BabylonJS) by calling BABYLON.Tags.AddTagsTo.
BABYLON.Tags.MatchesQuery can be used to check if a javascript object matches a "boolean" query:
   var myObject = {};
   BABYLON.Tags.AddTagsTo(myObject, "tag1 tag2");
   BABYLON.Tags.MatchesQuery(myObject, "tag1"); // => true
   BABYLON.Tags.MatchesQuery(myObject, "tag2"); // => true
   BABYLON.Tags.MatchesQuery(myObject, "tag3"); // => false
   BABYLON.Tags.MatchesQuery(myObject, "!tag3"); // => false
   BABYLON.Tags.MatchesQuery(myObject, "tag3 || tag1"); // => true
   BABYLON.Tags.MatchesQuery(myObject, "tag1 && tag2"); // => true
   BABYLON.Tags.MatchesQuery(myObject, "tag1 && !tag2"); // => false
   BABYLON.Tags.MatchesQuery(myObject, "(tag1 && !tag2) || !tag3"); // => true

   BABYLON.Tags.MatchesQuery(myObject, ""); // => true since it has at least one tag

   var myObject2 = {};

   BABYLON.Tags.MatchesQuery(myObject2, ""); // => false since it has no tag

   BABYLON.Tags.MatchesQuery(myObject, undefined); // => true
   BABYLON.Tags.MatchesQuery(myObject2, undefined); // => true

BABYLON.Tags.MatchesQuery doesn't use eval which is prohibited in win8

BABYLON.Scene.prototype.getMeshesByTags uses this system. This is an example of how to use the system. Of course, we could add BABYLON.Scene.prototype.getLightsByTags, BABYLON.Scene.prototype.getCamerasByTags...

This system uses AndOrNotEvaluator

TODO: import/export of tags from/to .babylon files (for meshes, lights...)