BabylonJS/Babylon.js — pull request #170 by gwenael-hagenmuller (2014-04-03 16:03:59+00:00)
Title: 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...)