Scripting: Getting the StrandPosition arrays


StrandPosition is an array of arrays: one array of positions for each strand.

Here’s a Python snippet:

from win32com.client import constants
xsi = Application

def dispFix( badDispatch ):
    import win32com.client.dynamic
    # Re-Wraps a bad dispatch into a working one:
    return win32com.client.dynamic.Dispatch(badDispatch)

attr = xsi.Selection(0).ActivePrimitive.Geometry.ICEAttributes( "StrandPosition" )
dataType = attr.DataType
data2D = attr.DataArray2D
for data in data2D:
   for elem in data:
      elem = dispFix(elem)
      xsi.LogMessage( "Vector3: " + str(elem.X) + ":" + str(elem.Y) + ":" + str(elem.Z) )

And here’s a JScript snippet:

a = Selection(0).ActivePrimitive.Geometry.ICEAttributes( "StrandPosition" );
LogMessage( ClassName(a) );

x = a.DataArray2D.toArray();
LogMessage( x.length );
for ( var i = 0; i < x.length; i++ )
{
   y = x[i].toArray();
   LogMessage( "=======================" );
   for ( var j = 0; j < y.length; j++ )
   {
      LogMessage( y[j].X + ", " + y[j].Y + ", " + y[j].Z );
   }
}

Getting values and fcurves for the port parameters of an ICE node


ICE nodes have ports, and the ports have parameters. It’s the parameters that you work with in an ICE node PPG.

For simple types such as float, integer and boolean, you can access the port parameter value through ICENodeInputPort.Value. However, for more complex types, like a 3D vector, you need to go through the ICENodeInputPort.Parameters.

In either case (simple or complex types), to get an Fcurve, you get a parameter and then use Parameter.Source.

For example, suppose you have a Scalar node:
ports_params_Scalar
To get the value from a Scalar node, you’d do this:

si = Application
node = si.Dictionary.GetObject( "pointcloud.pointcloud.ICETree.ScalarNode" )
port = node.InputPorts(0)

# For scalars, you can just use the port.Value property
print port.Value

# Or you could go through the Parameters
print port.Parameters(0).Value
# 0.428628623486
# 0.428628623486

# It's a little confusing because the port and the parameter have the same name:
print port.FullName
print port.Parameters(0).FullName
# pointcloud.pointcloud.ICETree.ScalarNode.value
# pointcloud.pointcloud.ICETree.ScalarNode.value


# Now get the Fcurve
fcv = param.Source

Now consider the case of a 3D Vector node, where you have one port (value) and three parameters (value_x, value_y, and value_z):
ports_params_3DVector
In this case, you cannot use ICENodeInputPort.Value, so you have to go through the parameters collection:

si = Application
node = si.Dictionary.GetObject( "pointcloud.pointcloud.ICETree.3DVectorNode" )
port = node.InputPorts(0)
print port.FullName # pointcloud.pointcloud.ICETree.3DVectorNode.value
param = port.Parameters( 0 )
print param.FullName # pointcloud.pointcloud.ICETree.3DVectorNode.value_x
print param.Value # 0.933080613613

# Now get the Fcurve
fcv = param.Source

hat tip: Alan Fregtman

Scripting: Toggling the constraint compensation mode


Here’s one way, using the not operator.

si = Application
si.SetUserPref( "SI3D_CONSTRAINT_COMPENSATION_MODE", not si.GetUserPref("SI3D_CONSTRAINT_COMPENSATION_MODE") )

The “problem” with this approach is that you’re toggling between 0 and -1, not between 0 and 1 (when you click the CnsComp button in the UI, you set the pref to either 0 or 1). The -1 happens because not 0 is -1.

Application.LogMessage( True == 1 )
Application.LogMessage( False == 0 )
Application.LogMessage( not False == -1 )
# INFO : True
# INFO : True
# INFO : True

So here’s a couple of other ways to toggle the preference value:

si = Application
si.SetUserPref( "SI3D_CONSTRAINT_COMPENSATION_MODE", 0 if si.GetUserPref("SI3D_CONSTRAINT_COMPENSATION_MODE") else 1 )
si = Application
toggle = [1,0]
si.SetUserPref( "SI3D_CONSTRAINT_COMPENSATION_MODE", toggle[si.GetUserPref("SI3D_CONSTRAINT_COMPENSATION_MODE")] )

Objects and default properties


Here’s a scripting question from the mailing list:

Why do I get “None” when I print ChainRoot.Children and
ChainRoot.Bones?

si = Application
chainRoot = si.Create2DSkeleton(0, 0, 0, 10, 0, 0, -90, 0, 0, 4)

print chainRoot
print chainRoot.Children # Not working
print chainRoot.Bones # Not working
print chainRoot.Effector

# root1
# None
# None
# eff1

The answer is that ChainRoot.Children and ChainRoot.Bones are objects that don’t have a default property, so (in Python) you get the string representation of those objects, which is “None”.

ChainRoot and ChainRoot.Effector, being types of SIObject, and they do have a default property: the Name property.

ChainRoot.Children is an X3DObjectCollection, and ChainRoot.Bones is a ChainBoneCollection, and for whatever reason, those two collections don’t have Item as their default property (for some collections, like ISIVTCollection and LinktabRuleCollection, the Item property is the default property).

So the above Python is equivalent to this:

si = Application
chainRoot = si.Create2DSkeleton(0, 0, 0, 10, 0, 0, -90, 0, 0, 4)

print chainRoot.Name
print str( chainRoot.Children )
print chainRoot.Bones.__str__()
print chainRoot.Effector.Name

# root1
# None
# None
# eff1

Note that in JScript and VBScript, you’d get a “Type mismatch” error instead of the string “None” (in the original snippet).

Finding hidden objects


Here’s a little Python snippet that finds all 3d objects that have View Visibility turned off. After you run the snippet, those hidden objects are selected, so you can open the Explorer and press E to see them.

import win32com.client
viewvis = win32com.client.Dispatch( "XSI.Collection" )
hidden = win32com.client.Dispatch( "XSI.Collection" )

si = Application

viewvis.Items = '*.visibility.viewvis'
for o in viewvis:
	if o.Value == False and si.ClassName( o.Parent3DObject ) == "X3DObject" :
		hidden.Add( o.Parent3DObject )

si.SelectObj( hidden )
for o in hidden:
	print o

Finding custom properties by type


Many custom properties, like self-installing custom properties, have a specific type that isn’t “customparamset”. This means you can filter the collection returned by XSIApplication.FindObjects2.

from sipyutils import si		# win32com.client.Dispatch('XSI.Application')
from sipyutils import C			# win32com.client.constants

si = si()

props = si.FindObjects2( C.siCustomPropertyID ).Filter( 'Arnold_Render_Options' )
print props.Count
for p in props:
	print p.FullName
	print "   Shaders search path : %s" % p.Parameters( "shaders_path" ).Value
	print "   Textures search path: %s" % p.Parameters( "textures_path" ).Value

SDKExplorer_Custom_Property_Type

Debugging interfaces not available – debugging is disabled..


I recently installed a new build of Softimage, and right from the start I was getting Debugging interfaces not available – debugging is disabled.. messages in the script history.

(Note that I use the Python installed with Softimage.)

I tracked the message down to the SetScriptSite function in
%XSI_HOME%\Application\python\Lib\site-packages\win32comext\axscript\client\framework.py

	#
	# IActiveScript
	def SetScriptSite(self, site):
		# We should still work with an existing site (or so MSXML believes 🙂
		self.scriptSite = site
		if self.debugManager is not None:
			self.debugManager.Close()
		import traceback
		try:
			import win32com.axdebug.axdebug # see if the core exists.
			import debug
			self.debugManager = debug.DebugManager(self)
		except pythoncom.com_error:
			# COM errors will occur if the debugger interface has never been
			# seen on the target system
			trace("Debugging interfaces not available - debugging is disabled..")
			self.debugManager = None
		except ImportError:
			#trace("Debugging extensions (axdebug) module does not exist - debugging is disabled..")
			self.debugManager = None
		except:
			traceback.print_exc()
			trace("*** Debugger Manager could not initialize - %s: %s" % (sys.exc_info()[0],sys.exc_info()[1]))
			self.debugManager = None

		try:
			self.lcid = site.GetLCID() 
		except pythoncom.com_error:
			self.lcid = win32api.GetUserDefaultLCID()
		self.Reset()

Normally (in all my other Softimage installs on this computer), line 10 fails and fires an ImportError. This is invisible because the trace() on line 19 is commented out. So basically, the Softimage install anticipates that win32com.axdebug.axdebug won’t be found.

However, if win32com.axdebug.axdebug is found, then SetScriptSite tries to import debug, and when that fails, you get that Debugging interfaces not available – debugging is disabled.. message. That’s what was happening on my machine.

As usual, my friend Process Monitor was helpful in figuring this out.

My workaround, for now, is to comment out that trace() call on line 16.

DataRepository.GetCount versus FindObjects


Here’s a snippet that will go through a bunch of CLSIDs, find out how many objects with each CLSID are in the DataRepository (the internal object database), and how many objects with each CLSID can be found with FindObjects.

What’s a bit surprising is the difference in the two numbers. For example, in a blank new scene, there are 19 PoseCompensatorOps in the DataRepository, but FindObjects gets just four.

The idea behind doing this was that it might be helpful to troubleshoot problem scenes (eg something really weird might show up in a problem scene).

iObjTotal = 0

for x in CLSIDs:
	s = ""
	o = None
	iObjCurrent = XSIUtils.DataRepository.GetCount( x )
	iObjTotal = iObjTotal + iObjCurrent

	if iObjCurrent > 0:
		print "%i instances of CLSID %s" % ( iObjCurrent, x )
		o = Application.FindObjects( "", x )
		for i in range(o.Count):
			s += "   %s (%s)\n" % ( o(i), Application.ClassName( o(i) ) )
			
	print s
	
print iObjTotal

Here’s a full-fledged script .

And here’s the output for all the CLSIDs from the Softimage ComServerLocations registry entry (for a new scene in Softimage 2014 SP2, with Arnold installed…76 ArnoldRenderOptions properties, really? 🙂

# 1 instances of CLSID {0091ED92-CF66-4779-BE32-D51584138ECA}
#    Scene.Environments (ProjectItem)
# 6 instances of CLSID {00CB04DA-C252-11D0-A586-00A0C91412DE}
#    light.light.Associated Models (Group)
# 1 instances of CLSID {03356066-FB65-413E-AB28-D53B02C67048}
#    preferences.FaceRobot (Property)
# 7 instances of CLSID {0496EAB0-0ECF-11D1-ABF1-00A02485CECB}
#    Scene_Root (Model)
# 1 instances of CLSID {052601ED-0C90-4974-936D-F3761F963200}
#    preferences.scripting (Property)
# 27 instances of CLSID {07A92499-74B5-11D2-B33F-00105A1F4A37}
#    Views.ViewB.TopCamera.camdisp (Property)
#    Views.ViewA.UserCamera.camdisp (Property)
#    Views.ViewA.TopCamera.camdisp (Property)
#    Views.ViewA.FrontCamera.camdisp (Property)
#    Views.ViewA.RightCamera.camdisp (Property)
#    Camera.camdisp (Property)
#    Views.ViewA.SpotCamera.camdisp (Property)
#    Views.ViewA.SequencerCamera.camdisp (Property)
#    Views.ViewC.SpotCamera.camdisp (Property)
#    Views.ViewB.UserCamera.camdisp (Property)
#    Views.ViewB.FrontCamera.camdisp (Property)
#    Views.ViewB.RightCamera.camdisp (Property)
#    Views.ViewB.SpotCamera.camdisp (Property)
#    Views.ViewB.SequencerCamera.camdisp (Property)
#    Views.ViewC.UserCamera.camdisp (Property)
#    Views.ViewC.TopCamera.camdisp (Property)
#    Views.ViewC.FrontCamera.camdisp (Property)
#    Views.ViewC.RightCamera.camdisp (Property)
#    Views.ViewC.SequencerCamera.camdisp (Property)
#    Views.ViewD.UserCamera.camdisp (Property)
#    Views.ViewD.TopCamera.camdisp (Property)
#    Views.ViewD.FrontCamera.camdisp (Property)
#    Views.ViewD.RightCamera.camdisp (Property)
#    Views.ViewD.SpotCamera.camdisp (Property)
#    Views.ViewD.SequencerCamera.camdisp (Property)
# 1 instances of CLSID {09410AC8-71E7-11D3-B49F-00A0244EEB76}
#    TransientObjectContainer (CollectionItemLegacy)
# 1 instances of CLSID {0A4A1F03-AF67-4425-A83C-AC671EB4D9C9}
#    preferences.explorer (Property)
# 1 instances of CLSID {0B211A42-E71D-4E4F-B8EC-F684C996212B}
#    preferences.scene_search (Property)
# 6 instances of CLSID {0D29533C-B095-48F8-88B9-BDF8419453E7}
# 27 instances of CLSID {1152E9B1-545E-11D0-8466-00A024C7919C}
#    Views.ViewB.TopCamera.camera (Primitive)
#    Views.ViewC.TopCamera.camera (Primitive)
#    Views.ViewD.FrontCamera.camera (Primitive)
#    Views.ViewA.SpotCamera.camera (Primitive)
#    Views.ViewB.RightCamera.camera (Primitive)
#    Views.ViewA.SequencerCamera.camera (Primitive)
#    Views.ViewC.SpotCamera.camera (Primitive)
#    Views.ViewD.UserCamera.camera (Primitive)
#    Views.ViewD.SequencerCamera.camera (Primitive)
#    Camera.camera (Primitive)
#    Views.ViewA.RightCamera.camera (Primitive)
#    Views.ViewA.TopCamera.camera (Primitive)
#    Views.ViewC.SequencerCamera.camera (Primitive)
#    Views.ViewA.UserCamera.camera (Primitive)
#    Views.ViewB.SpotCamera.camera (Primitive)
#    Views.ViewA.FrontCamera.camera (Primitive)
#    Views.ViewB.UserCamera.camera (Primitive)
#    Views.ViewD.RightCamera.camera (Primitive)
#    Views.ViewB.FrontCamera.camera (Primitive)
#    Views.ViewC.FrontCamera.camera (Primitive)
#    Views.ViewB.SequencerCamera.camera (Primitive)
#    Views.ViewC.UserCamera.camera (Primitive)
#    Views.ViewD.TopCamera.camera (Primitive)
#    Views.ViewC.RightCamera.camera (Primitive)
#    Views.ViewD.SpotCamera.camera (Primitive)
# 1 instances of CLSID {11A264FD-B6D1-4CFC-82D3-C7E3A6ADE264}
#    preferences.simulation (Property)
# 29 instances of CLSID {11EBE301-A20C-11D0-8478-00A024C7919C}
#    Camera.visibility (Property)
#    Views.ViewC.SpotCamera.visibility (Property)
#    Camera_Interest.visibility (Property)
#    Camera_Root.visibility (Property)
#    light.visibility (Property)
#    Views.ViewD.SpotCamera.visibility (Property)
#    Views.ViewB.SpotCamera.visibility (Property)
#    Views.ViewA.SpotCamera.visibility (Property)
# 5 instances of CLSID {1265D911-AFA3-41F5-9AEA-7890A10A2812}
#    Views.ViewD.RenderRegion.mentalray (Property)
#    Passes.mentalray (Property)
#    Views.ViewC.RenderRegion.mentalray (Property)
#    Views.ViewB.RenderRegion.mentalray (Property)
#    Views.ViewA.RenderRegion.mentalray (Property)
# 10 instances of CLSID {12F18B50-D380-11D0-9225-08003629EA02}
# 1 instances of CLSID {145520D3-4E75-4539-863F-A60DB27CEE25}
#    preferences.General (Property)
# 7 instances of CLSID {16681C01-C066-11D2-A95B-00A024190119}
# 1 instances of CLSID {1A66378B-490A-4D5E-904B-28631EA027C9}
#    Scene.Passes (PassContainer)
# 1 instances of CLSID {2194FFE3-A0B2-4CAB-A3E8-FC8EDC9F159A}
# 1 instances of CLSID {25571B24-CB95-11D2-88C8-00A024EE6238}
#    PlayControl (Property)
# 1 instances of CLSID {288D850F-3056-4DFB-877A-30F0BAA6E1DE}
#    ReadAnimation (Property)
# 1 instances of CLSID {28DEC312-62B3-11D1-B79B-00A0243E3694}
# 2 instances of CLSID {293AFC8C-CEA7-4D05-8ED5-9E45E7CA619D}
#    preferences.SymmetryProperties (Property)
#    SymmetryProperties (Property)
# 1 instances of CLSID {2A9FFC70-5BA0-11D1-9987-00A0243F0E60}
#    preferences.duplicate (Property)
# 1 instances of CLSID {2F37DA65-86DF-48B4-911A-4819A374A5C5}
#     (CollectionItemLegacy)
# 4 instances of CLSID {2FABFBE6-679E-46C6-BF2E-B8AE4F383D8C}
#    Views.ViewC.RenderRegion (Property)
#    Views.ViewD.RenderRegion (Property)
#    Views.ViewA.RenderRegion (Property)
#    Views.ViewB.RenderRegion (Property)
# 1 instances of CLSID {311236AA-6D18-4198-8DD7-BD6E8B7D7525}
#    preferences.time (Property)
# 1 instances of CLSID {342FB217-15CC-4C38-AE4D-4240C0E900B1}
#    preferences.Camera (Property)
# 126 instances of CLSID {38506572-DD46-40E0-9A6A-708546381D04}
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Passes.Default_Pass.Main (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
#    Framebuffer (Framebuffer)
# 5 instances of CLSID {389E27DD-5FB0-11D2-B11C-00A0C906811E}
# 1 instances of CLSID {394EA0E9-78A1-4B48-A09F-A0F81A68AE5B}
#    preferences (Property)
# 1 instances of CLSID {3D17F684-7DBB-44A2-B4FF-3A40B29CCB02}
#    preferences.objectview (Property)
# 1 instances of CLSID {3DCC9BFD-16F7-4C45-94B4-3CD2228B2C5C}
#    preferences.preset_manager (Property)
# 1 instances of CLSID {3F48C534-0301-11D2-85A3-00C04F8EDF15}
#    BrushProperties (CollectionItemLegacy)
# 9 instances of CLSID {400CCE36-4400-11D0-BDDD-00A0241981E2}
#    Scene Defaults.polymsh (Primitive)
# 6 instances of CLSID {453C2160-61E1-11D1-AE8D-00A0244EEB76}
#    light.light.Associated Models.Selective Light (CollectionItemLegacy)
# 1 instances of CLSID {455D7C9B-F73E-4394-AB88-895AC9237ADF}
#    Passes.RenderOptions (SceneRenderProperty)
# 11 instances of CLSID {45BAD6C1-E075-11D1-999B-00A0243F0E60}
#    Scene_Root.geomapprox (Property)
# 1 instances of CLSID {46F7B210-C532-11D2-B924-00A024C78EE3}
#    application (CollectionItemLegacy)
# 1 instances of CLSID {479F2E10-3900-11D1-B0B3-00A024C79287}
#    Layers.Layer_Default (Layer)
# 10 instances of CLSID {4C4F7500-51EF-11D0-854E-00A02417D029}
#    __SHADERBALL_MATERIAL_LIBRARY__.Grid_Material (Material)
#    __SHADERBALL_MATERIAL_LIBRARY__.Apple_Material (Material)
#    __SHADERBALL_MATERIAL_LIBRARY__.Scene_Material (Material)
#    __SHADERBALL_MATERIAL_LIBRARY__.Stem_Material (Material)
#    __SHADERBALL_MATERIAL_LIBRARY__.Cloud_Material (Material)
#    __SHADERBALL_MATERIAL_LIBRARY__.Light_Material1 (Material)
#    __SHADERBALL_MATERIAL_LIBRARY__.Dark_Material1 (Material)
#    __SHADERBALL_MATERIAL_LIBRARY__.Squares_Material (Material)
#    __SHADERBALL_MATERIAL_LIBRARY__.Lines_Material1 (Material)
#    Sources.Materials.DefaultLib.Scene_Material (Material)
# 1 instances of CLSID {50B4532C-7316-4708-A15A-3A63E542E8CC}
#    preferences.render_tree (Property)
# 50 instances of CLSID {51BF4F41-6777-11D1-BE9F-00A024EE478D}
#    Views.ViewB.TopCamera (Camera)
#    Views.ViewC.SpotCamera (Camera)
#    Views.ViewC.UserCamera (Camera)
#    Views.ViewA.SpotCamera (Camera)
#    Views.ViewD.FrontCamera (Camera)
#    Camera_Interest (Null)
#    Views.ViewB.RightCamera (Camera)
#    Scene_Root (Model)
#    Views.ViewA.SequencerCamera (Camera)
#    Views.ViewA.FrontCamera (Camera)
#    Views.ViewC.RightCamera (Camera)
#    Views.ViewD.RightCamera (Camera)
#    Views.ViewB.FrontCamera (Camera)
#    Views.ViewA.RightCamera (Camera)
#    Views.ViewA.UserCamera (Camera)
#    Views.ViewA.TopCamera (Camera)
#    Views.ViewB.UserCamera (Camera)
#    Views.ViewB.SpotCamera (Camera)
#    Views.ViewB.SequencerCamera (Camera)
#    Views.ViewC.TopCamera (Camera)
#    Views.ViewC.FrontCamera (Camera)
#    Views.ViewC.SequencerCamera (Camera)
#    Views.ViewD.SpotCamera (Camera)
#    Views.ViewD.UserCamera (Camera)
#    Views.ViewD.TopCamera (Camera)
#    Views.ViewD.SequencerCamera (Camera)
#    Camera_Root (CameraRig)
#    Camera (Camera)
#    light (Light)
# 1 instances of CLSID {551C2B18-98F4-4553-A3DE-F20C24B39823}
#    preferences.xsi_explorer (Property)
# 1 instances of CLSID {5E4BD436-737B-4AD3-8E32-D7F9BB7B2573}
#    preferences.data_management (Property)
# 43 instances of CLSID {5FC0CCAE-3DC8-11D0-9449-00AA006D3165}
#    Views.ViewA.SpotCamera (Camera)
#    Views.ViewD.TopCamera (Camera)
#    Views.ViewA.SequencerCamera (Camera)
#    Views.ViewC.RightCamera (Camera)
#    Views.ViewD.UserCamera (Camera)
#    Views.ViewB.SequencerCamera (Camera)
#    Views.ViewA.UserCamera (Camera)
#    Views.ViewA.TopCamera (Camera)
#    Views.ViewB.RightCamera (Camera)
#    Views.ViewA.FrontCamera (Camera)
#    Views.ViewB.SpotCamera (Camera)
#    Views.ViewA.RightCamera (Camera)
#    Views.ViewB.UserCamera (Camera)
#    Views.ViewB.TopCamera (Camera)
#    Views.ViewC.SpotCamera (Camera)
#    Views.ViewD.SpotCamera (Camera)
#    Views.ViewB.FrontCamera (Camera)
#    Views.ViewD.RightCamera (Camera)
#    Views.ViewC.UserCamera (Camera)
#    Views.ViewC.TopCamera (Camera)
#    Views.ViewC.FrontCamera (Camera)
#    Views.ViewC.SequencerCamera (Camera)
#    Views.ViewD.FrontCamera (Camera)
#    Views.ViewD.SequencerCamera (Camera)
#    Camera_Root (CameraRig)
#    Camera (Camera)
#    Camera_Interest (Null)
#    light (Light)
# 11 instances of CLSID {600E50F1-52FC-11D2-A924-00A024190119}
# 3 instances of CLSID {600E50F2-52FC-11D2-A924-00A024190119}
# 9 instances of CLSID {60F7ADA0-7E12-11D0-9960-00A0243F0E60}
#    cls (CollectionItemLegacy)
# 2 instances of CLSID {61782E14-9177-412E-BF9B-2B44B9A668DD}
#    library_source (MaterialLibrary)
#    Sources.Materials.DefaultLib (MaterialLibrary)
# 1 instances of CLSID {62362303-A6D4-4658-9651-905C1ADB056F}
#    preferences.TweakNormals (Property)
# 1 instances of CLSID {639AD931-3896-11D3-97AC-00A0243E3463}
#    Camera.kine.global.IndpCns_E (CollectionItem)
# 13 instances of CLSID {6495C5C1-FD18-474E-9703-AEA66631F7A7}
#    __SHADERBALL_MATERIAL_LIBRARY__.Squares_Material.Lambert (Shader)
#    __SHADERBALL_MATERIAL_LIBRARY__.Stem_Material.Lambert (Shader)
#    __SHADERBALL_MATERIAL_LIBRARY__.Light_Material1.Lambert (Shader)
#    __SHADERBALL_MATERIAL_LIBRARY__.Scene_Material.Phong (Shader)
#    __SHADERBALL_MATERIAL_LIBRARY__.Dark_Material1.Lambert (Shader)
#    __SHADERBALL_MATERIAL_LIBRARY__.Lines_Material1.Lambert (Shader)
#    Sources.Materials.DefaultLib.Scene_Material.Phong (Shader)
#    light.light.arnold_distant_light (Shader)
# 1 instances of CLSID {64E231F5-5A70-4012-B351-4046650227EA}
#    preferences.fcurve_editor (Property)
# 2 instances of CLSID {6630D811-0699-11D1-B723-00AA0068BF56}
# 27 instances of CLSID {675F9E0C-6851-11D2-B335-00105A1F4A37}
#    Views.ViewA.SpotCamera.camvis (Property)
#    Views.ViewD.FrontCamera.camvis (Property)
#    Views.ViewC.TopCamera.camvis (Property)
#    Views.ViewD.TopCamera.camvis (Property)
#    Views.ViewA.UserCamera.camvis (Property)
#    Views.ViewA.TopCamera.camvis (Property)
#    Views.ViewA.FrontCamera.camvis (Property)
#    Views.ViewB.FrontCamera.camvis (Property)
#    Views.ViewA.RightCamera.camvis (Property)
#    Views.ViewA.SequencerCamera.camvis (Property)
#    Views.ViewB.UserCamera.camvis (Property)
#    Views.ViewB.TopCamera.camvis (Property)
#    Views.ViewB.RightCamera.camvis (Property)
#    Views.ViewB.SpotCamera.camvis (Property)
#    Views.ViewB.SequencerCamera.camvis (Property)
#    Views.ViewC.UserCamera.camvis (Property)
#    Views.ViewC.FrontCamera.camvis (Property)
#    Views.ViewC.RightCamera.camvis (Property)
#    Views.ViewC.SequencerCamera.camvis (Property)
#    Views.ViewC.SpotCamera.camvis (Property)
#    Views.ViewD.UserCamera.camvis (Property)
#    Views.ViewD.RightCamera.camvis (Property)
#    Views.ViewD.SpotCamera.camvis (Property)
#    Views.ViewD.SequencerCamera.camvis (Property)
#    Camera.camvis (Property)
# 1 instances of CLSID {68520F4D-333E-44F0-B76D-0E9527F47497}
#    preferences.dopesheet (Property)
# 1 instances of CLSID {6A4AA345-4253-11D0-B148-00A02485CECB}
#    Scene (Scene)
# 1 instances of CLSID {6B00918D-D1F8-44B6-B6A1-5608971A2B84}
#    preferences.MaterialManager (Property)
# 1 instances of CLSID {6B2F8E3E-3BE3-45A3-9187-094616A04ACC}
#    preferences.SnapProperties (Property)
# 27 instances of CLSID {6B3772E6-27C1-11D3-A280-08003658D403}
#    Views.ViewD.FrontCamera.rotoscope (Property)
#    Views.ViewB.RightCamera.rotoscope (Property)
#    Views.ViewD.TopCamera.rotoscope (Property)
#    Views.ViewA.TopCamera.rotoscope (Property)
#    Views.ViewA.UserCamera.rotoscope (Property)
#    Views.ViewA.FrontCamera.rotoscope (Property)
#    Views.ViewA.RightCamera.rotoscope (Property)
#    Views.ViewA.SpotCamera.rotoscope (Property)
#    Views.ViewA.SequencerCamera.rotoscope (Property)
#    Views.ViewB.UserCamera.rotoscope (Property)
#    Views.ViewB.TopCamera.rotoscope (Property)
#    Views.ViewB.FrontCamera.rotoscope (Property)
#    Views.ViewB.SpotCamera.rotoscope (Property)
#    Views.ViewB.SequencerCamera.rotoscope (Property)
#    Views.ViewC.UserCamera.rotoscope (Property)
#    Views.ViewC.TopCamera.rotoscope (Property)
#    Views.ViewC.FrontCamera.rotoscope (Property)
#    Views.ViewC.RightCamera.rotoscope (Property)
#    Views.ViewC.SpotCamera.rotoscope (Property)
#    Views.ViewC.SequencerCamera.rotoscope (Property)
#    Views.ViewD.UserCamera.rotoscope (Property)
#    Views.ViewD.RightCamera.rotoscope (Property)
#    Views.ViewD.SpotCamera.rotoscope (Property)
#    Views.ViewD.SequencerCamera.rotoscope (Property)
#    Camera.rotoscope (Property)
# 1 instances of CLSID {6D81DA53-61DF-11D1-83C1-00A0243E268D}
#    ViewportCapture (CollectionItemLegacy)
# 24 instances of CLSID {72936430-9B0C-4167-8CA7-C30FC2188BB9}
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    Views.ViewB.SequencerCamera.camera.XSISequencerCameraPrimOp (CustomOperator)
#    Views.ViewC.SequencerCamera.camera.XSISequencerCameraPrimOp (CustomOperator)
#    Views.ViewA.SequencerCamera.camera.XSISequencerCameraPrimOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    Views.ViewC.SequencerCamera.kine.global.XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    Views.ViewD.SequencerCamera.kine.global.XSISequencerCameraKineOp (CustomOperator)
#    XSISequencerCameraKineOp (CustomOperator)
#    Views.ViewB.SequencerCamera.kine.global.XSISequencerCameraKineOp (CustomOperator)
#    Views.ViewA.SequencerCamera.kine.global.XSISequencerCameraKineOp (CustomOperator)
#    Views.ViewD.SequencerCamera.camera.XSISequencerCameraPrimOp (CustomOperator)
# 1 instances of CLSID {74895A03-F74D-11D0-96C5-00A024191BAC}
#    DeviceManager (DeviceCollection)
# 76 instances of CLSID {76332571-D242-11D0-B69C-00AA003B3EA6}
#    preferences.Cg_Display (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    preferences.ICEOperators (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Passes.Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    preferences.Arnold Render (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Views.ViewC.RenderRegion.Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Arnold_Render_Options (CustomProperty)
#    Views.ViewD.RenderRegion.Arnold_Render_Options (CustomProperty)
#    Views.ViewB.RenderRegion.Arnold_Render_Options (CustomProperty)
#    Views.ViewA.RenderRegion.Arnold_Render_Options (CustomProperty)
# 1 instances of CLSID {76AA7786-F7E2-4BB6-9FC3-D56ED34EDF68}
#    preferences.MaterialPanel (Property)
# 19 instances of CLSID {77F74C81-7010-11D1-96F5-00A0243E3463}
#    Camera_Root.kine.local (KinematicState)
#    Camera.kine.local (KinematicState)
#    Camera_Interest.kine.local (KinematicState)
#    light.kine.local (KinematicState)
# 1 instances of CLSID {7954E245-8EF2-48AB-A07D-8DEEFDD9FF23}
#    preferences.netview (Property)
# 1 instances of CLSID {79EEBE8E-0ABA-4240-A033-6B02858250D9}
#    PaintTool (CollectionItemLegacy)
# 1 instances of CLSID {7A1BB9D6-58A3-49D6-84BA-39429EDAD489}
#    Passes.Default_Pass.Background_Lights_Partition (Partition)
# 66 instances of CLSID {7ABF1486-448D-11D0-BE37-00A024EE478D}
#    Camera_Root.kine.global (KinematicState)
#    global (KinematicState)
#    Views.ViewC.SequencerCamera.kine.global (KinematicState)
#    global (KinematicState)
#    global (KinematicState)
#    Views.ViewC.UserCamera.kine.global (KinematicState)
#    global (KinematicState)
#    Views.ViewC.SpotCamera.kine.global (KinematicState)
#    Views.ViewA.SequencerCamera.kine.global (KinematicState)
#    Views.ViewD.RightCamera.kine.global (KinematicState)
#    global (KinematicState)
#    Views.ViewC.FrontCamera.kine.global (KinematicState)
#    Views.ViewA.FrontCamera.kine.global (KinematicState)
#    Camera.kine.global (KinematicState)
#    global (KinematicState)
#    global (KinematicState)
#    Views.ViewB.SpotCamera.kine.global (KinematicState)
#    global (KinematicState)
#    Views.ViewD.UserCamera.kine.global (KinematicState)
#    global (KinematicState)
#    global (KinematicState)
#    global (KinematicState)
#    global (KinematicState)
#    Views.ViewA.RightCamera.kine.global (KinematicState)
#    global (KinematicState)
#    global (KinematicState)
#    global (KinematicState)
#    global (KinematicState)
#    Views.ViewB.FrontCamera.kine.global (KinematicState)
#    Views.ViewD.SpotCamera.kine.global (KinematicState)
#    Views.ViewB.SequencerCamera.kine.global (KinematicState)
#    Views.ViewB.TopCamera.kine.global (KinematicState)
#    Views.ViewB.RightCamera.kine.global (KinematicState)
#    Views.ViewD.FrontCamera.kine.global (KinematicState)
#    Views.ViewD.SequencerCamera.kine.global (KinematicState)
#    Views.ViewA.SpotCamera.kine.global (KinematicState)
#    Scene_Root.kine.global (KinematicState)
#    Views.ViewA.UserCamera.kine.global (KinematicState)
#    Views.ViewA.TopCamera.kine.global (KinematicState)
#    light.kine.global (KinematicState)
#    Views.ViewB.UserCamera.kine.global (KinematicState)
#    Views.ViewC.TopCamera.kine.global (KinematicState)
#    Views.ViewC.RightCamera.kine.global (KinematicState)
#    Views.ViewD.TopCamera.kine.global (KinematicState)
#    Camera_Interest.kine.global (KinematicState)
# 4 instances of CLSID {80183202-4F8A-11D0-9BAE-00AA0068BF56}
#     (CollectionItemLegacy)
#     (CollectionItemLegacy)
#     (CollectionItemLegacy)
#     (CollectionItemLegacy)
# 1 instances of CLSID {80D1207E-1C0D-4DEF-AF30-387384DCA4BA}
#    preferences.Compositing (Property)
# 1 instances of CLSID {82443034-51B1-11D0-85AE-080036E93203}
#    Passes.Default_Pass.RenderOptions (CollectionItemLegacy)
# 1 instances of CLSID {82443035-51B1-11D0-85AE-080036E93203}
#    ViewRenderOptions (CollectionItemLegacy)
# 1 instances of CLSID {82C99CA9-3D7E-4A1B-B015-1F4CBF2113C6}
#    Context (CollectionItemLegacy)
# 1 instances of CLSID {83B04845-8E86-4C6C-8196-A6BAA4A657DF}
# 1 instances of CLSID {8A323F88-7344-48F5-907E-2E698A066A60}
#    Sources.Materials (CollectionItemLegacy)
# 1 instances of CLSID {8B291AD2-AAC2-4F09-A027-B47E6C11E4AC}
#    Passes.Default_Pass.Background_Objects_Partition (Partition)
# 1 instances of CLSID {8C4CE8C0-4884-11D5-897C-00D0B71DA41F}
#    LoaderOptions (Property)
# 1 instances of CLSID {8FB0A8D8-2AA2-11D4-B6A3-006094EB029C}
#    RefPlanes (CollectionItemLegacy)
# 19 instances of CLSID {90994BB1-D357-11D2-8B80-00A024EE586F}
#    Camera_Root.kine.local.PoseCompensatorOp (CollectionItem)
#    Camera.kine.local.PoseCompensatorOp (CollectionItem)
#    Camera_Interest.kine.local.PoseCompensatorOp (CollectionItem)
#    light.kine.local.PoseCompensatorOp (CollectionItem)
# 1 instances of CLSID {91B2319A-9DB1-11D1-80CF-00A0248F9397}
#    preferences.Scenecolors (Property)
# 1 instances of CLSID {922D62D1-3208-4E92-9744-8E8D0816B4C8}
#    preferences.Polygon (Property)
# 1 instances of CLSID {961496BA-7EF2-4E91-A493-2C828E61AC2D}
#    preferences.shaderball (Property)
# 1 instances of CLSID {9694B47E-C847-11D3-B7D4-0008C7A011A6}
#    Camera_Interest.CameraInterest (Primitive)
# 1 instances of CLSID {973E6F73-CD0F-11D3-A88B-00C04F8EDF15}
#    Camera_Root.CameraRoot (Primitive)
# 1 instances of CLSID {97599A5D-A2BC-468A-AC6E-FB2F5E7E75D6}
#    preferences.keying_panel (Property)
# 6 instances of CLSID {98859160-CD10-11D3-A88B-00C04F8EDF15}
# 1 instances of CLSID {98CAD7D1-393A-11D2-8B40-00A024EE586F}
#    Camera.kine.dircns (Constraint)
# 1 instances of CLSID {997E1E42-7DC9-43A3-8B78-2B8352382703}
#    preferences.plugin_manager (Property)
# 2 instances of CLSID {9AF45FC0-8DC4-11D4-B915-0800690C8BD0}
# 6 instances of CLSID {9B82ACED-9947-4FD0-87AE-4AC0A3D42BEA}
# 1 instances of CLSID {9DC6AEC5-0D8D-4710-8C78-46748D6B722A}
#    preferences.camera_sequencer (Property)
# 1 instances of CLSID {9E1CD6BD-A30E-49E4-A1CE-57AFB5502D07}
#    preferences.layercontrol (Property)
# 1 instances of CLSID {9E4533F4-E6CF-4FE4-B8D4-15B32E954A81}
#    preferences.Display (Property)
# 1 instances of CLSID {9E734591-4B92-11D4-B7F3-0008C7A011A6}
# 1 instances of CLSID {A04BA012-0B7F-4E8C-8B81-EF09820A875B}
#    preferences.units (Property)
# 14 instances of CLSID {A0D4A4E1-7B7A-445B-A871-C55A9988DFDC}
#    Scene_Material (Material)
# 6 instances of CLSID {A15B3913-073F-11D4-B7DF-0008C7A011A6}
#    refplane (Property)
#    RefPlanes.XY (Property)
#    RefPlanes.XZ (Property)
#    RefPlanes.View (Property)
#    RefPlanes.Transform (Property)
#    RefPlanes.YZ (Property)
# 19 instances of CLSID {A2C21F92-96E3-11D3-B8A0-00A0C92469BE}
#    Camera_Root.kine.local.ParentPoseAndPoseCns_D (CollectionItem)
#    Camera.kine.local.ParentPoseAndPoseCns_D (CollectionItem)
#    Camera_Interest.kine.local.ParentPoseAndPoseCns_D (CollectionItem)
#    light.kine.local.ParentPoseAndPoseCns_D (CollectionItem)
# 1 instances of CLSID {A8BF89CA-1025-11D2-B5FD-006094EB029C}
#    Scene.Audio Container Properties (Property)
# 1 instances of CLSID {AD2412A8-3426-47CD-B65F-E98A2093130D}
#    dotXSIImportOptions (Property)
# 1 instances of CLSID {ADDBD2A0-85A4-11D4-8C31-009027BC3A0E}
# 6 instances of CLSID {B0A5373D-E8B3-4816-BC5A-A6A31E4B4158}
# 4 instances of CLSID {B49C1779-D1FE-4FB6-B9DB-9C253E3F3648}
# 1 instances of CLSID {B4ACAE9C-4F44-43D5-A591-295B61EE52A3}
#    preferences.Interaction (Property)
# 1 instances of CLSID {B533F218-5FDD-4800-ADE0-06534BDFD6B4}
#    preferences.weighteditor (Property)
# 1 instances of CLSID {B54D8594-0F35-4CB8-876D-0C88DC45BA3C}
#    preferences.Select (Property)
# 1 instances of CLSID {B8AD87C9-EE5C-4FDF-A51F-8DB121CB8991}
#    WriteAnimation (Property)
# 1 instances of CLSID {BBEED5A8-7763-11D2-977A-00A0C982C728}
#    FramePreviewSettings (CollectionItemLegacy)
# 1 instances of CLSID {BD407DFB-4120-4898-8475-44150D6B522C}
#    preferences.shape_animation (Property)
# 1 instances of CLSID {BDC5A1EE-EEBE-4CD2-9443-A5B7AF67ED22}
#    preferences.schematic (Property)
# 1 instances of CLSID {BFDAF164-5DD8-4422-9F1E-35527CDC2A02}
#    Passes.Default_Pass (Pass)
# 1 instances of CLSID {C23A9A23-5260-4E80-9165-F8673D9086B7}
#    preferences.modeling (Property)
# 2 instances of CLSID {C27897E0-1B97-11D4-AE61-00A0C96E63E1}
# 57 instances of CLSID {C4EF9563-8317-42EA-849D-58705A9B32B5}
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    Views.ViewA.RenderRegion.HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    Views.ViewD.RenderRegion.HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    Passes.HardwareRenderer (Property)
#    Views.ViewC.RenderRegion.HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    HardwareRenderer (Property)
#    Views.ViewB.RenderRegion.HardwareRenderer (Property)
# 1 instances of CLSID {C68A1E9A-8879-4F7A-9247-56B5F602E795}
#    preferences.icetree (Property)
# 1 instances of CLSID {CA7AB48C-EE62-4675-8BE6-DE979CB63692}
#    preferences.animation (Property)
# 1 instances of CLSID {CBA2D702-8E67-47B1-A0D2-89354E33C241}
#    preferences.Tweak (Property)
# 4 instances of CLSID {CCACF571-B1B8-11D3-9E9B-009027BC38DD}
#    Scene_Root.display (Property)
# 1 instances of CLSID {CE38DE41-5C05-11D4-B4A2-00D0B71903E4}
#    Scene Defaults (Property)
# 66 instances of CLSID {D557CF35-57E3-11D2-8B5A-00A024EE586F}
#    Views.ViewA.RightCamera.kine (Kinematics)
#    Views.ViewD.UserCamera.kine (Kinematics)
#    Views.ViewB.TopCamera.kine (Kinematics)
#    kine (Kinematics)
#    kine (Kinematics)
#    kine (Kinematics)
#    kine (Kinematics)
#    Views.ViewD.SpotCamera.kine (Kinematics)
#    Views.ViewA.SequencerCamera.kine (Kinematics)
#    kine (Kinematics)
#    Views.ViewB.FrontCamera.kine (Kinematics)
#    kine (Kinematics)
#    kine (Kinematics)
#    kine (Kinematics)
#    Views.ViewA.SpotCamera.kine (Kinematics)
#    kine (Kinematics)
#    kine (Kinematics)
#    kine (Kinematics)
#    kine (Kinematics)
#    Views.ViewC.RightCamera.kine (Kinematics)
#    kine (Kinematics)
#    Views.ViewC.FrontCamera.kine (Kinematics)
#    kine (Kinematics)
#    kine (Kinematics)
#    Views.ViewD.TopCamera.kine (Kinematics)
#    kine (Kinematics)
#    Views.ViewB.SpotCamera.kine (Kinematics)
#    Views.ViewD.SequencerCamera.kine (Kinematics)
#    Views.ViewD.FrontCamera.kine (Kinematics)
#    Views.ViewB.SequencerCamera.kine (Kinematics)
#    Views.ViewA.FrontCamera.kine (Kinematics)
#    Views.ViewC.SequencerCamera.kine (Kinematics)
#    Scene_Root.kine (Kinematics)
#    Views.ViewB.RightCamera.kine (Kinematics)
#    Views.ViewA.UserCamera.kine (Kinematics)
#    Views.ViewC.UserCamera.kine (Kinematics)
#    Views.ViewA.TopCamera.kine (Kinematics)
#    Views.ViewB.UserCamera.kine (Kinematics)
#    Views.ViewC.TopCamera.kine (Kinematics)
#    Views.ViewC.SpotCamera.kine (Kinematics)
#    Views.ViewD.RightCamera.kine (Kinematics)
#    Camera_Root.kine (Kinematics)
#    Camera.kine (Kinematics)
#    Camera_Interest.kine (Kinematics)
#    light.kine (Kinematics)
# 1 instances of CLSID {D7D93C1D-902E-444E-99DD-C6A3D08627C2}
#    preferences.rendering (Property)
# 6 instances of CLSID {DBA00978-85BE-4D94-AEC5-422ECB4EE4BD}
# 1 instances of CLSID {DC84D7A3-ABA5-4BBF-9E09-A9B6FFE86983}
#    preferences.output_format (Property)
# 4 instances of CLSID {DD4BA6C4-60F1-11D1-8680-00A0C91412D9}
#    Scene_Root.AmbientLighting (Property)
# 19 instances of CLSID {DD804FBB-84DE-11D3-B89F-00A0C92469BE}
#    Camera_Interest.kine.global.ParentPoseCns_E (CollectionItem)
#    Camera_Root.kine.global.ParentPoseCns_E (CollectionItem)
#    Camera.kine.global.ParentPoseCns_E (CollectionItem)
#    light.kine.global.ParentPoseCns_E (CollectionItem)
# 1 instances of CLSID {DDA7A96E-7E81-433D-89BF-94FC82D71C06}
#    sequencerplotting (Property)
# 1 instances of CLSID {E068B6F5-CC79-48C4-92B1-1A265ACA7190}
#    PaintTool (CollectionItemLegacy)
# 2 instances of CLSID {E0CBD759-BDD7-44D1-8730-981472AFC5E9}
#    preferences.TransformProperties (Property)
#    TransformProperties (Property)
# 1 instances of CLSID {E2A86051-F669-11D1-8D60-080036F3CC02}
#    FCurve (FCurve)
# 1 instances of CLSID {E2FE2EF1-FEA2-41DE-8C3C-7FB1E819AAED}
#    preferences.transformgroup (Property)
# 11 instances of CLSID {E4DD8E40-1E1C-11D0-AA2E-00A0243E34C4}
# 1 instances of CLSID {E662A425-C427-4D18-9669-6858E59F6FA1}
#    preferences.texture_layer_editor (Property)
# 1 instances of CLSID {E8734CFA-4185-4CEA-A7E0-24E45ACA26D2}
#    preferences.animation_mixer (Property)
# 1 instances of CLSID {E9EF4BE1-3A2B-11D3-97AC-00A0243E3463}
#    Camera.kine.dircns.PosePoseCns_D (CollectionItem)
# 1 instances of CLSID {EA3AB345-F8A8-488D-826B-6943CFF9C604}
#    dotXSIExportOptions (Property)
# 1 instances of CLSID {EA861F7A-D67C-11D2-88C9-00A024EE6238}
#    Views (CollectionItemLegacy)
# 4 instances of CLSID {EA861F7B-D67C-11D2-88C9-00A024EE6238}
#    Views.ViewA (CollectionItemLegacy)
#    Views.ViewB (CollectionItemLegacy)
#    Views.ViewC (CollectionItemLegacy)
#    Views.ViewD (CollectionItemLegacy)
# 1 instances of CLSID {EC8D460F-40F1-439D-AE59-8F81AA2871F3}
#    preferences.scripteditor (Property)
# 1 instances of CLSID {EE4D73A9-3962-45C1-86CB-77562467BB52}
#    preferences.ViewCube (Property)
# 1 instances of CLSID {EE641152-A847-4F36-B5FD-FCA002F90634}
#    PaintTool.FloodFillTemplate (CollectionItemLegacy)
# 1 instances of CLSID {F16DA201-13A2-11D3-B37A-00105A1E70DE}
#    Scene.Sources (CollectionItemLegacy)
# 1 instances of CLSID {F16DA202-13A2-11D3-B37A-00105A1E70DE}
#    Scene.Clips (CollectionItemLegacy)
# 6 instances of CLSID {F3705C30-5204-11D0-8298-00A0243E366B}
#    light.light (Primitive)
# 1 instances of CLSID {F946644B-B42A-4063-B653-A0E884EA4D29}
#    preferences.SceneDebugging (Property)
# 1 instances of CLSID {FCA78BFF-DFC2-4610-8455-FA5C9B980BB7}
#    preferences.texture_editor (Property)
# 1 instances of CLSID {FD0EA020-390C-11D1-B0B3-00A024C79287}
#    Scene.Layers (CollectionItemLegacy)
# 1 instances of CLSID {FF22E061-5CED-4ED1-B6F3-58FD451FFDE5}
#    preferences.animation_editor (Property)
# 1034

Dispatching XSI.Factory versus using the intrinsic XSIFactory object


The other day in the comments, A asked about some Python I had posted a few years ago: Why did I manually dispatch XSI.Factory instead of just using the global XSIFactory object? Honestly, I don’t know why I did. I had seen other code do it that way, so I did it too. And I see that the sipyutils.py also dispatches objects like XSI.Application, XSI.Utils, and XSI.Math, so I figured I was in good company.

A little research shows that XSIFactory uses late bound automation (aka dynamic dispatch) and so avoids any possible problems with the pywin32 cache. Late-bound automation means that PythonCOM doesn’t know what properties or methods the object supports; whenever you try to access a property or method, PythonCOM will query the object to find out if the property/method is supported.

In contrast, when you dispatch XSI.Factory, PythonCOM uses the pywin32 cache to support early-binding, where all the available properties and methods are known beforehand.

You can read more about this Chapter 12 of Python Programming on Win32, Advanced Python and COM

Here’s a little Python snippet demonstrating the differences between a dispatched XSI.Factory and the global XSIFactory object. Note in particular the output of dir() for each object.

from win32com.client import Dispatch as disp
sifact = disp('XSI.Factory')

print sifact
print XSIFactory
# <win32com.gen_py.Softimage|XSI Object Model Library v1.5.XSIFactory instance at 0x564246344>
# <COMObject XSIFactory>

print dir(sifact)
print dir(XSIFactory)
# ['CLSID', 'CreateActiveXObject', 'CreateFCurveKeyCollection', 'CreateFCurveParamDef', 'CreateGridData', 'CreateGridParamDef', 'CreateGuid', 'CreateObject', 'CreateObjectFromFile', 'CreateObjectFromFile2', 'CreateObjectFromPreset', 'CreateObjectFromPreset2', 'CreateParamDef', 'CreateParamDef2', 'CreateScriptedOp', 'CreateScriptedOpFromFile', 'CreateShaderDef', 'CreateShaderParamDefOptions', 'RemoveShaderDef', '_ApplyTypes_', '__doc__', '__eq__', '__getattr__', '__init__', '__module__', '__ne__', '__repr__', '__setattr__', '_get_good_object_', '_get_good_single_object_', '_oleobj_', '_prop_map_get_', '_prop_map_put_', 'coclass_clsid']
# ['_Close_', '__doc__', '__getattr__', '__init__', '__module__', '__repr__', '__setattr__', '_scriptItem_']

print sifact.__module__
print XSIFactory.__module__
# win32com.gen_py.269C4D8C-E32D-11D3-811D-00A0C9AC19A9x0x1x0.XSIFactory
# win32com.axscript.client.pyscript