Here’s one way to get the materials used by model. Note that this will also get any materials applied to clusters.
si=Application
def get_mdl_materials( m ):
from win32com.client import constants as c
return m.FindObjects( c.siMaterialID )
Application.GetPresetModel("Man_Character", "Man_Character", "", "Character.Character_Designer")
for m in get_mdl_materials( si.Dictionary.GetObject( 'Man_Character' ) ):
print m
And here’s an old-school way that uses a couple of string expressions:
si=Application
mdl = si.Dictionary.GetObject( 'Man_Character' )
import win32com.client
mats = win32com.client.Dispatch( "XSI.Collection" )
mats.Items = '{0}.{1},{0}.{2}'.format(mdl.Name, "*.cls.*.material", "*.material")
for m in mats:
print (m)