# Copyright 2009 Autodesk, Inc.  All rights reserved.
# Use of this software is subject to the terms of the Autodesk license agreement 
# provided at the time of installation or download, or which otherwise accompanies
# this software in either electronic or hard copy form.
# 
# This script demonstrate the usage of FBGetSelectedModels.
#
# Topic: FBGetSelectedModels
#

from pyfbsdk import FBVector3d, FBModel, FBModelCube, FBModelList, FBGetSelectedModels, FBMessageBox


# Create some models for demostrate of selection.
def CreateModel(pName, pPos):
    lModel = FBModelCube(pName)
    lModel.Scaling = FBVector3d(20, 20, 20)
    lModel.Translation = pPos
    lModel.Show = True;
    lModel.Visible = True
    return lModel

lModel1 = CreateModel("Cube 1", FBVector3d(-80, 10, 0))
lModel2 = CreateModel("Cube 2", FBVector3d(0, 10, 0))
lModel3 = CreateModel("Cube 3", FBVector3d(80, 10, 0))

lModel3.Parent = lModel2;

# Simulate the interactiv selection in non scene graph order
lModel2.Selected = True
lModel3.Selected = True
lModel1.Selected = True

# Define the function to show the list to the user.
def DisplaySelectList(pModelList, pMsg):
    if len( lModelList ) == 0:
      FBMessageBox( "Message", pMsg + "Nothing selected", "OK", None, None )
    else:
      lMessage = pMsg + "%d selected models:" % len( lModelList )

      # Okay, the following line looks a bit complicated... but we just
      # build a string with all the selected object's name. One per line.
      lMessage += ''.join( map( lambda pModel: "\n  " + pModel.Name, lModelList ))

      # And bring up the pop-up...
      FBMessageBox( "Message", lMessage, "OK", None, None )
      del( lMessage )

lModelList = FBModelList()

# Get list of selected models in scene graph order 
FBGetSelectedModels( lModelList)
DisplaySelectList(lModelList, "Get list of selected models in scene graph order.\n" )
lModelList.Clear()

# Get list of selected models under lModel2 in scene graph order 
FBGetSelectedModels( lModelList, lModel2, True )
DisplaySelectList(lModelList, "Get list of selected models under lModel2 in scene graph order.\n")
lModelList.Clear()

# Get list of selected models in select order 
FBGetSelectedModels( lModelList, None, True, True )
DisplaySelectList(lModelList, "Get list of selected models in select order.\n")
lModelList.Clear()


# Cleanup.
del( lModelList, lModel1, lModel2, lModel3 )
del( FBVector3d, FBModel, FBModelCube, FBModelList, FBGetSelectedModels, FBMessageBox )