Object Hierarchy | Related C++ Class: Group
Group
v1.0
A group is a collection of related objects.
set oRoot = Application.ActiveProject.ActiveScene.Root set oGroup = oRoot.AddGroup set oCube = oRoot.AddGeometry( "Cube", "MeshSurface" ) oGroup.AddMember oCube for each oMember in oGroup.Members LogMessage oMember.Name & " is a member of the " & oGroup.Name next |
/* ---------------------------------------------------------- This example shows how to find groups under the scene root or under a specific model given the following structure: Scene_Root Model Group + RootGroup * + ChildModel * + ChildGroup * + AnotherChildModel * + AnotherChildGroup * + GrandChildModel * + GrandChildGroup * ===== ===== 3 4 Note: The Model.Groups property gets only the immediate children of a model (unlike the X3DObject.Models property, which gets all nested models. */ // ---------------------------------------------------------- // // SETUP // NewScene( null, false ); // Set up a scene with 4 objects var oRoot = ActiveSceneRoot; var oMbr1 = oRoot.AddGeometry( "Disc", "MeshSurface" ); var oMbr2 = oRoot.AddGeometry( "Torus", "MeshSurface" ); var oMbr3 = oRoot.AddGeometry( "Sphere", "MeshSurface" ); var oMbr4 = oRoot.AddNull(); // Create a group under the root oRoot.AddGroup( oMbr1, "RootGroup" ); // Create a new model and another group under the new model var oMdl = oRoot.AddModel( oMbr2, "ChildModel" ); oMdl.AddGroup( oMbr2, "ChildGroup" ); // Add another model to the root var oMdl = oRoot.AddModel( oMbr3, "AnotherChildModel" ); oMdl.AddGroup( oMbr3, "AnotherChildGroup" ); // Nest yet another model under the second child model var oMdl = oMdl.AddModel( oMbr4, "GrandChildModel" ); oMdl.AddGroup( oMbr4, "GrandChildGroup" ); //---------------------------------------------------------- // // SEARCH // // Find all groups under the scene root LogMessage( "******** GROUPS UNDER " + oRoot.Name + " ********" ); FindGroupsUnderModel( oRoot ); // Find all groups under 'AnotherChildModel' LogMessage( "******** GROUPS UNDER " + oMdl.Name + " ********" ); FindGroupsUnderModel( oMdl ); // Now find all groups in the scene RecursiveGroupSearch( oRoot ); //---------------------------------------------------------- // // RESULTS // //INFO : "******** GROUPS UNDER Scene_Root ********" //INFO : "RootGroup contains these members:" //INFO : " disc" //INFO : "******** GROUPS UNDER GrandChildModel ********" //INFO : "GrandChildModel.GrandChildGroup contains these members:" //INFO : " null" //INFO : "******** FINDING ALL GROUPS IN THE SCENE ********" //INFO : "# of models under the root: 3" //INFO : "RootGroup contains these members:" //INFO : " disc" //INFO : "ChildModel.ChildGroup contains these members:" //INFO : " torus" //INFO : "AnotherChildModel.AnotherChildGroup contains these members:" //INFO : " sphere" //INFO : "GrandChildModel.GrandChildGroup contains these members:" //INFO : " null" //---------------------------------------------------------- // // HELPERS // // Finds all groups under a specific model (not recursive) function FindGroupsUnderModel( in_model ) { // Find all groups under the specified model var oGrps = in_model.Groups; for (var g=0; g<oGrps.Count; g++) { LogMessage( oGrps(g).FullName + " contains these members:" ); var m = new Enumerator( oGrps(g).Members ); for ( ; !m.atEnd(); m.moveNext() ) { LogMessage( "\t" + m.item().Name ); } } } //---------------------------------------------------------- // Recursively finds all groups under a model. Because // we can get every model recursively (except for our starting point, the // current model), we start by listing the groups under the // current model and then the groups for each model under // it, calling FindGroupsUnderModel for each one. function RecursiveGroupSearch( in_model ) { LogMessage( "******** FINDING ALL GROUPS IN THE SCENE ********" ); LogMessage( "# of models under the root: " + in_model.Models.Count ); // First print out the groups info for the current model FindGroupsUnderModel( in_model ); // Then iterate over every model contained inside the // current model, printing the groups info for each one var mdl = new Enumerator( in_model.Models ); for ( ; !mdl.atEnd(); mdl.moveNext() ) { FindGroupsUnderModel( mdl.item() ); } } |