Move to Background

This little script has been written in both VBScript and recently converted to Python in order to get acquainted with the language.

Having worked on a project that uses hundreds of passes which contain a similar number of partitions I felt a simple little script that would move the selected objects/lights into the background partitions in either the current pass or multiple selected passes would make the process of hiding off objects a lot lot easier.

Python

# Move selected objects to background partitions
 
# created by Gareth Bell
 
# original created in VBScript 28-11-11
# converted to Python 26-07-2012
 
 
# Description:
# This script will put the selected objects into either the current passes bg partitions or, if selected, multiple passes bg partitions
 
##################################
 
# To use:  select objects and passes. Run.
 
##################################
 
import win32com
xsi = Application
 
#create collections to store objects
geoColl = win32com.client.Dispatch( "XSI.Collection" )
passesColl = win32com.client.Dispatch( "XSI.Collection" )
lightsColl = win32com.client.Dispatch( "XSI.Collection" )
 
selection = win32com.client.Dispatch( "XSI.Collection" )
selection.AddItems (xsi.Selection)
 
#sort selection into collections (objects, lights and passes)
for obj in selection:
          if obj.type == "light":
                   lightsColl.AddItems (obj)
          elif obj.type == "Pass":
                   passesColl.AddItems (obj)
          else:
                   geoColl.AddItems (obj)
                  
passCount = passesColl.Count
 
#decide if sorting is in only the current pass or multiple passes
if passCount > 0:
          for eachPass in passesColl:     
			print str(geoColl) + " has/have been put into the background partition in " + str(eachPass.name)
			xsi.MoveToPartition(str(eachPass) + ".background_objects_partition", geoColl, eachPass)
			print str(lightsColl) + " has/have been put into the background partition in " + str(eachPass.name)
			xsi.MoveToPartition(str(eachPass) + ".background_lights_partition", lightsColl, eachPass)
else:
	currentPass = xsi.ActiveProject.ActiveScene.ActivePass
	print str(geoColl) + " has/have been put into the background partition in the current pass"
	xsi.MoveToPartition(str(currentPass) + ".background_objects_partition", geoColl, currentPass)               
	print str(lightsColl) + " has/have been put into the background partition in the current pass"
	xsi.MoveToPartition(str(currentPass) + ".background_lights_partition", lightsColl, currentPass)    
				   
				   

VBScript

' Move selected objects to background partitions
' created by Gareth Bell
 
' 28-11-11
 
' Description:
'  This script will put the selected objects into either the current passes bg partitions or, if selected, multiple passes bg partitions
 
'#################################
 
' To use:  select objects and passes. Run.
 
'#################################
 
set oGeometry = CreateObject ("XSI.Collection")
set oPasses = CreateObject ("XSI.Collection")
set oLights = CreateObject ("XSI.Collection")
 
set oSelection = CreateObject ("XSI.Collection")
oSelection.AddItems Selection
 
for each oObj in oSelection
          if oObj.type = "light" then
                   oLights.AddItems oObj
          else    if oObj.type = "Pass" then
                   oPasses.AddItems oObj      
          else
                   oGeometry.AddItems oObj
          end if
          end if
next
 
passesCount = oPasses.count
 
if passesCount > 0 then
          for each oPass in oPasses
                   for each oGeo in oGeometry
                   logmessage oGeo & " has been put into the background partition in " & oPass.name
                   MoveToPartition  oPass & ".background_objects_partition", oGeo, oPass
                   next
                  
                   for each oLight in oLights    
                   logmessage oLight & " has been put into the background lights partition in " & oPass.name
                   MoveToPartition  oPass & ".background_lights_partition", oLight, oPass
                   next
          next
 
else
          oCurrentPass = Application.ActiveProject.ActiveScene.ActivePass
          for each oGeo in oGeometry
                   logmessage oGeo & " has been put into the background partition"
                   MoveToPartition  oCurrentPass & ".background_objects_partition", oGeo, oCurrentPass
          next
         
          for each oLight in oLights    
                   logmessage oLight & " has been put into the background lights partition"
                   MoveToPartition  oCurrentPass & ".background_lights_partition", oLight, oCurrentPass
          next
 
end if