## Model.Groups

### Description

Returns a GroupCollection containing all Group objects in the model.

### C# Syntax

    // get accessor
    GroupCollection rtn = Model.Groups;

### Examples

#### VBScript Example

    '----------------------------------------------------------
    '
    '       This example demonstrates 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
    '
    '       NB: The Model.Groups property has a limitation of only
    '               getting the immediate children of that model
    '               (whereas you can get every all models in all
    '               generations with the X3DObject.Models property).
    '
    '----------------------------------------------------------
    '
    '       SETUP
    '
    NewScene , false
    ' Set up a scene with 4 objects
    set oRoot = ActiveSceneRoot
    set oMbr1 = oRoot.AddGeometry( "Disc", "MeshSurface" )
    set oMbr2 = oRoot.AddGeometry( "Torus", "MeshSurface" )
    set oMbr3 = oRoot.AddGeometry( "Sphere", "MeshSurface" )
    set oMbr4 = oRoot.AddNull()
    ' Create a group under the root
    oRoot.AddGroup oMbr1, "RootGroup"
    ' Create a new model and another group under the new model
    set oMdl = oRoot.AddModel( oMbr2, "ChildModel" )
    oMdl.AddGroup oMbr2, "ChildGroup"
    ' Add another model to the root
    set oMdl = oRoot.AddModel( oMbr3, "AnotherChildModel" )
    oMdl.AddGroup oMbr3, "AnotherChildGroup"
    ' Nest yet another model under the second child model
    set 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
            set oGrps = in_model.Groups
            for each g in oGrps
                    LogMessage g.FullName & " contains these members:"
                    for each m in g.Members
                            LogMessage vbTab & m.Name
                    next
            next
    end function
    '----------------------------------------------------------
    ' Finds all groups under a specific model (recursive). Since
    ' we can get every model recursively (except the one we
    ' started with) start with listing the groups under the
    ' current model and then get 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
            for each mdl in in_model.Models
                    FindGroupsUnderModel mdl
            next
    end function