A few people have asked me about the new “Python-specific” methods added in the Softimage 2013 SDK.
Basically, these new “Python-specific” methods are wrappers for the existing methods. What the new, Python-specific versions do is make sure you get back an object that supports all the advertised methods and properties of the class hierarchy.
For example, Menu is a subclass of MenuItem, and Menu adds new methods like AddCommandItem().
Menu.AddItem() returns a Menu object that supports all the MenuItem methods and properties, but doesn’t support the Menu methods and properties, such as Menu.AddCommandItem().
Menu.AddItem2() , on the other hand, returns an object that supports all the MenuItem and Menu methods and properties.
I blogged about the Menu.AddItem() problem awhile back.
Python-specific methods
- Clip.AddProperty2 – Creates and adds a UserDataBlob or CustomProperty to a Clip object. This method is specific to the python language.
- Layout.CreateViewFromDefinitionFile2 – Creates a new View object given the path to its definition on disk. This method is similar to Layout.CreateViewFromDefinitionFile but specific to the python language.
- Layout.FindView2 – Finds an existing View object given a name in this layout. This method is similar to Layout.FindView but specific to the python language.
- Menu.AddItem2 – Adds a menu item at to end of the menu. This method is similar to Menu.AddItem but specific to the python language.
- Menu.AddCommandItem2 – Adds a menu item at the end of the menu and attaches a command. This method is similar to Menu.AddCommandItem but specific to the python language.
- Menu.AddCallbackItem2 – Adds a menu item to the end of the menu and attaches a callback function. This method is similar to Menu.AddCallbackItem but specific to the python language.
- ICENode.GetPortFromName2 – Returns the ICENodePort object that matches a specific port name. This method is similar to ICENode.GetPortFromName but specific to the python language.
- ICENode.GetPortFromIndex2 – Returns the ICENodePort object specified by a port index, group index and group instance index. This method is similar to ICENode.GetPortFromIndex but specific to the python language.
- Operator.GetPort3 – Returns the specified Port object for the operator. This method is similar to Operator.GetPort2 but specific to the python language.
- Override.AddParameterEntry2 – Adds a new entry to override the input parameter and returns the new overriding parameter. This method is similar to Override.AddParameterEntry but specific to the python language.
- Primitive.GetGeometry3 – Returns a Geometry object containing the object’s geometry. This method is similar to Primitive.GetGeometry2 but specific to the python language.
- SceneItem.GetPropertyFromName2 – Returns a property, given its scripting name. This method is similar to SceneItem.GetPropertyFromName but specific to the python language.
- SceneItem.GetLocalPropertyFromName2 – Returns a local property, given its scripting name. This method is similar to SceneItem.GetLocalPropertyFromName but specific to the python language.
- ShaderArrayParamDef.ItemDef2 – Returns the underlying ShaderParamDef or ShaderStructParamDef object for this array item. This method is similar to ShaderArrayParamDef.ItemDef but specific to the Python language.
- ShaderArrayParameter.Item2 – Returns the specified ShaderParameter item in this array. This method is similar to ShaderArrayParameter.Item but specific to the Python language.
- ShaderParamDefContainer.AddParamDef2 – This method is similar to ShaderParamDefContainer.AddParamDef but specific to the Python language.
- ShaderParamDefContainer.GetParamDefByName2 – Returns the ShaderParamDef that matches the specified name from this container. This method is similar to ShaderParamDefContainer.GetParamDefByName but specific to the Python language.
- ShaderParameter.Definition2 – Returns the shader parameter definition as a ShaderParamDef object. This method is similar to ShaderParameter.Definition but specific to the Python language.
- View.FindView2 – Finds an existing View object given a name. This method is similar to View.FindView but specific to the Python language.
- X3DObject.GetActivePrimitive3 – Returns the 3D object’s active Primitive for a given frame. This method is similar to X3DObject.GetActivePrimitive2 but specific to the Python language.
- XSIApplication.ActiveProject3 – Returns or sets the active XSIProject object. This method is similar to XSIApplication.ActiveProject2 but specific to the Python language.
- XSIApplication.GetObjectFromID2 – Returns the object matching the specified ID. This method is similar to XSIApplication.GetObjectFromID but specific to the python language.
- XSIFactory.CreateObjectFromPreset2 – Creates an object from a preset and optional preset family name. This method is similar to XSIFactory.CreateObjectFromPreset but specific to the Python language.
GetPortFromName2 crashes Softimage if port does not exist
For example create a cube and apply ICETree with Set Topology node:
si = Application
oICENode = si.Dictionary.GetObject(“cube.polymsh.ICETree.Set_Topology”)
oPort = oICENode.GetPortFromName2(“Cookie”)
And it’s actually crashes if port exist. In this case string:
COMPOUND = “Apply Collapse Edge”
PORT = “String Array”
from win32com.client import constants as c
si = Application
count = si.Selection.Count
for i in range(count) :
if PORT :
obj = si.Dictionary.GetObject(si.Selection(i).FullName.rsplit(“.”, 1)[0])
elements = ‘, ‘.join(str(e) for e in si.Selection(i).SubComponent.ElementArray)
else : obj = si.Selection(i)
oICETree = si.ApplyOp(“ICETree”, obj)
si.AddICECompoundNode(COMPOUND, oICETree)
compound = str(oICETree)+”.”+COMPOUND.replace(” “, “_”)
si.ConnectICENodes(str(oICETree)+”.port1″, compound+”.Execute”)
if PORT :
oICENode = si.Dictionary.GetObject(compound)
if PORT.replace(” “, “_”) in [i.Name for i in oICENode.InputPorts] :
oPort = oICENode.GetPortFromName2(PORT)
if oPort.DataType == c.siICENodeDataString :
si.SetValue(compound+”.”+PORT+”_string”, elements)
Uh, WordPress. Here with tabs: http://dl.dropbox.com/u/10965660/share/SI_2013_GetPortFromName2_Test.py
No worries, the defect has been logged.
The Dev are working on it
Oh god, again. New python specific method GetGeometry3 crashes also. Repro:
Application.Selection(0).GetActivePrimitive3().GetGeometry3()
How the hell it was not even tested on a beta stage?!
Hi there
I’ll repro this and take care of logging it.
Who are you?