'----------------------------------------------------------
'
' 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
|