## Group

Object Hierarchy | Related C++ Class: Group

### Inheritance

###

SIObject

ProjectItem

SceneItem

Group

### Introduced

v1.0

### Description

A group is a collection of related objects.

### Methods

AddCustomOp | AddCustomProperty | AddICEAttribute | AddMaterial
AddMember | AddProperty | AddScriptedOp | AddScriptedOpFromFile
AnimatedParameters2 | ApplyEnvelope | BelongsTo | EvaluateAt
GetICEAttributeFromName | GetLocalPropertyFromName | GetLocalPropertyFromName2 | GetPropertyFromName
GetPropertyFromName2 | IsA | IsAnimated2 | IsClassOf
IsEqualTo | IsKindOf | IsLocked | IsMember
IsSelected | LockOwners | RemoveAllMembers | RemoveICEAttribute
RemoveMember | SetAsSelected | SetCapabilityFlag | SetLock
SetMaterial | TaggedParameters | UnSetLock |

### Properties

Application | BranchFlag | Capabilities | Categories
Envelopes | EvaluationID | ExpandedMembers | Families
FullName | Help | HierarchicalEvaluationID | ICEAttributes
LocalProperties | LockLevel | LockMasters | LockType
Material | Members | Model | Name
NestedObjects | ObjectID | Origin | OriginPath
Owners | PPGLayout | Parameters | Parent
Parent3DObject | Properties | Selected | Type

### Examples

#### 1. VBScript Example

    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

#### 2. JScript Example

    /* ----------------------------------------------------------

    	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() );

    	}

    }