From a discussion on the mailing list today, a few of the different ways to get every instance of a specific parameter, and some [crude] timing of the different methods.
I was also glad to see confirmation that using wildcards like “*.visibility” pick up everything (because I’ve never got any variation of “*#3dobject” to pick up all objects).
si = Application
import time
from win32com.client import Dispatch as disp
from win32com.client import constants as c
t = time.clock()
oObj = disp("XSI.Collection")
oObj.Items = "*.visibility"
for o in oObj:
v = o.viewvis.Value
print 'XSICollection.Items : count=%s, time=%s' % ( oObj.Count, time.clock() - t )
t = time.clock()
oObj.Items = "*.visibility.viewvis"
for o in oObj:
v = o.Value
print 'XSICollection.Items : count=%s, time=%s' % ( oObj.Count, time.clock() - t )
t = time.clock()
items = si.ActiveSceneRoot.FindChildren2()
for obj in items:
vis = obj.GetPropertyFromName2("Visibility")
v = vis.viewvis.value
print 'GetPropertyFromName2 : count=%s, time=%s' % ( items.Count, time.clock() - t )
t = time.clock()
items = si.ActiveSceneRoot.FindChildren2()
for obj in items:
v = obj.Properties('visibility').Parameters('viewvis').Value
print 'Properties.Parameters: count=%s, time=%s' % ( items.Count, time.clock() - t )
t = time.clock()
items = si.ActiveSceneRoot.FindChildren2()
for item in items:
si.Tag(item.fullname + '.visibility.viewvis', c.siTag1)
print 'Tag() : count=%s, time=%s' % ( items.Count, time.clock() - t )
t = time.clock()
items = si.ActiveSceneRoot.FindChildren2()
for item in items:
p = item.Properties( "Visibility" ).Parameters( "viewvis" )
p.Tags = c.siTag1
print 'Parameter.Tag : count=%s, time=%s' % ( items.Count, time.clock() - t )
t = time.clock()
val = si.ActiveSceneRoot.TaggedParameters(c.siTag1, False)
for v in val:
v = v.value
print 'TaggedParameters : count=%s, time=%s' % ( items.Count, time.clock() - t )
Notice how turning off command logging speeds up those two commands:
# XSICollection.Items : count=4367, time=1.18428964264
# XSICollection.Items : count=4367, time=1.00415073153
# GetPropertyFromName2 : count=4367, time=2.07334397855
# Properties.Parameters: count=4367, time=4.38064481075
# Tag() : count=4367, time=20.6681847681
# Parameter.Tag : count=4367, time=5.11316244631
# TaggedParameters : count=4367, time=0.705648810261
Application.SetValue("preferences.scripting.cmdlog", False, "")
# XSICollection.Items : count=4367, time=1.16849869148
# XSICollection.Items : count=4367, time=0.988541493731
# GetPropertyFromName2 : count=4367, time=2.03344763365
# Properties.Parameters: count=4367, time=4.33773781962
# Tag() : count=4367, time=7.47015675041
# Parameter.Tag : count=4367, time=4.99573667863
# TaggedParameters : count=4367, time=0.687065751859