Checking to see what type of object you are working with can be very tricky, because there's a lot of "type" information to find in Autodesk Softimage SDK. For example, there's the ClassName (Application) property that every Softimage object implements, which differs from the ClassName (Application) method, which identifies which interface or class the item belongs to.
The Application.ClassName method is similar to the VBScript TypeName function which returns the subtype, or what kind of scene item it is (such as X3DObject). The Application.ClassName method allows non-VBScript programmers to test for the interface name.
However, the behavior of the Application.ClassName method differs from the VBScript TypeName function in that TypeName can test for standard data type (string, boolean, integer, etc.) as well as class name but Application.ClassName cannot. For example, in JScript you would have to test with the typeof operator to figure out the data type of a return value.
The table below provides an overview of several Softimage objects and what they return depending on whether you are working with the Type property or the ClassName method:
Item to Test |
What the Type Property Returns |
What LogMessage Shows for Object.Type |
What LogMessage Shows for ClassName(Object) |
---|---|---|---|
XSICollection |
Softimage collection type. |
"XSICollection" |
"Object" |
CollectionItem |
Object type as a string. This could describe the kind of geometry, or indicate that it is a pass or a light or a camera, depending on what the CollectionItem is. |
"camera", "polymsh", etc. |
"CollectionItem" |
Camera Rigs (Camera_Root, Telephoto_Root, etc.) |
Primitive type (for camera rigs, there's only one type). |
"CameraRoot" |
"CameraRig" |
Cameras (Camera, Telephoto, etc.) |
Primitive type (for cameras, there's only one type). |
"camera" |
"Camera" |
Light Rigs (Light_Box_Root, Spot_Root, etc.) |
Primitive type. (for light rigs, there's only one type). |
"SpotRoot" |
"LightRig" |
Lights (Light_Box, Spot, etc.) |
Primitive type (for lights, there's only one type). |
"light" |
"Light" |
OGLLight |
Light type as an siLightType constant value: |
"0", "1", "2", etc. |
"OGLLight" |
Passes (Default_Pass, etc.) |
Object type (for passes, there's only one type). |
"#Pass" |
"Pass" |
Layers (Default_Layer, etc.) |
Object type (for layers, there's only one type). |
"#Group" |
"Layer" |
Nulls |
Primitive type. |
"null" |
"Null" |
Mesh surface objects (cone, cube, cylinder, disc, grid, sphere, torus, *hedron, soccer ball) |
Geometry type. |
"polymsh" |
"X3DObject" |
Implicits (arc, circle, spiral, square, cone, cube, cylinder, disc, grid, sphere, torus) |
Implicit type. |
"arc", "circle", "cone", etc. |
"X3DObject" |
Nurbs surface objects (cone, cube, cylinder, disc, grid, sphere, torus) |
Geometry type. |
"surfmsh" |
"X3DObject" |
CurveList (arc, circle, spiral, square) |
Geometry type. |
"crvlist" |
"X3DObject" |
Primitive |
Geometry type. |
"polymsh", "surfmsh", "crvlist", etc. |
"Primitive" |
SubComponent |
Subcomponent's Cluster type as a string. Format is: cluster_type + "SubComponent" |
"pntSubComponent", "edgeSubComponent", "polySubComponent", etc. |
"SubComponent" |
Operator |
Operator type. Note
See Operator Presets for a list of available operators. |
"twistop", "geom", etc. |
"Operator" |
FCurve |
FCurve type as an siFCurveType constant: |
"0", "10", "20", etc. |
"FCurve" |
Geometry0D Geometry1D Geometry2D |
Subcomponent's Cluster type as a string. |
"pntSubComponent", "edgeSubComponent", "polySubComponent", etc. |
"Geometry0D", "Geometry1D", "Geometry2D", etc. |
Kinematics, Global / Local Transform, Scene_Material (specific parameter sets) |
Parameter (property) set type. |
"kine", "CompoundParameter", "material", etc. |
"Kinematics", "KinematicState", "Material", etc. |
Scene Colors, Ambient Lighting, Display, Geometry Approximation (general parameter sets) |
Parameter (property) set type. |
"Scenecolors", "AmbientLighting", "display", "geomapprox", etc. |
"Property" |
Parameters (PosX, Green, Length, U Subdivisions, etc.) |
Parameter. |
"Parameter" |
"Parameter" |
Constraints |
Constraint name |
"dircns" |
"Constraint" |
EventInfo |
Event type as a string. For all Softimage events, this is XSIApplication. |
"XSIApplication" |
"EventInfo" |
This list contains only a sample of the possible return values for the Type property. For specific information on Type and ClassName, see What Does the Type Property Test For? and What Does the ClassName Method Test For?.
What Does the Type Property Test For?
The Type property returns different kinds of information depending on the object you are checking. For example, if you are checking a 3d object or collection item, it returns the primitive type. If you are checking an fcurve or an OGL light, it returns a numeric value corresponding to the type of fcurve or OGL light.
For more information, see the comparison table at the beginning of Checking Return Values for Type.
Example: using the Type property
' Set up some items to test Set oObj = ActiveSceneRoot.AddGeometry( "Cube", "MeshSurface" ) Set oColl = CreateObject( "XSI.Collection" ) oColl.Add oObj ' Is there any difference between the CollectionItem ' and the object it refers to? printInfo oObj printInfo oColl.Item(0) ' What about fcurves? printInfo oObj.posx.AddFCurve ' Getting the operator type ApplyOp "twist", oObj Set oOpStack = oObj.ActivePrimitive.ConstructionHistory For Each oOp in oOpStack printInfo oOp Next ' Testing parameters and properties printInfo oObj.Properties(0) printInfo oObj.Parameters(0) ' What about the model? printInfo ActiveSceneRoot ' Pass and Layer info printInfo GetValue( "Passes.Default_Pass" ) printInfo GetValue( "Layers.Layer_Default" ) ' CameraRig & primitive Set oCamera = ActiveSceneRoot.FindChild( "camera" ) printInfo oCamera Set oCameraRig = oCamera.Parent printInfo oCameraRig function printInfo( in_object ) logmessage in_object.type end function ' Output of above script is: 'INFO : "polymsh" 'INFO : "polymsh" 'INFO : "20" 'INFO : "twistop" 'INFO : "geom" 'INFO : "kine" 'INFO : "Parameter" 'INFO : "#model" 'INFO : "#Pass" 'INFO : "#Group" 'INFO : "camera" 'INFO : "CameraRoot"
What Does the ClassName Method Test For?
The ClassName method returns the name of the Softimage Object Model interface, or the most derived class (the leaf on the class hierarchy tree). This is similar to using the TypeName() function in VBScript, but this method is available to any language Softimage supports:
Example: calling the ClassName method using JScript
// JScript example : display the class name of an object var oObj = ActiveProject.ActiveScene.Root.AddGeometry("Sphere", "NurbsSurface"); LogMessage( "Object typename = " + Application.ClassName(oObj) );
Example: testing both Type and ClassName on a sphere
For example, if you run the following code fragment:
' Set the workspace Set oRoot = ActiveProject.ActiveScene.Root ' Create a polymesh sphere Set oSphere = oRoot.AddGeometry( "Sphere", _ "MeshSurface" ) Set oPrim = oSphere.ActivePrimitive ' Use the Type property (Softimage type) LogMessage "Type property gives: " & oSphere.Type ' Use the ClassName method (interface name) LogMessage "ClassName method gives: " & _ ClassName( oSphere )
The following messages appear in the History pane of the Script Editor:
' INFO : "Type property gives: polymsh" ' INFO : "ClassName method gives: X3DObject"
However, the Type property behaves differently depending on the object and the context. For more information on what the Type property is checking for, see What Does the Type Property Test For?.
Other Tests: BelongsTo, Owners, Parent, and Parent3DObject
The BelongsTo property accesses the family information (which family of objects the current object belongs to—for more information on families, see What are Families?).
The Owners property returns the parent object of the current object (that is, the parent as far as Autodesk Softimage is concerned)—for more information on owners, see What Are Parents And Owners?.
The Parent property returns either the parent object of the current object or the parenting geometry of the current subcomponent. Softimage knows whether the object you are asking about is an object or a subcomponent and returns the appropriate value.
The Parent3DObject property returns the parenting object of the current subcomponent—for more information on parents, see What Are Parents And Owners?.
For more information on objects and subcomponents, see Accessing Scene Elements.
Families are a way of linking objects that may share some properties or methods but aren't siblings in the object hierarchy. That is, the "family" sets up explicit relations between objects that do not fall on a straight line in the inheritance trees. To see a hierarchical representation of the object model, see the Object Model Hierarchy.
In simpler terms, the Autodesk Softimage SDK developers used the family to set up explicit relations between objects that share properties, methods, and events.
For a complete list of families see the documentation for the siFamily constant.
Example: finding the family of an action source
You can use the Families property to access the family information. In this example, the code fragment creates a simple action (so that there is an action source to find) and then uses the Families property to print a list of the families it belongs to:
' Set up my workspace Set oRoot = Application.ActiveProject.ActiveScene.Root ' The commands create a simple actionsource from some ' animation on the nulls position Set oNull = GetPrim( "Null" ) sPosParams = oNull & ".kine.local.posx," & oNull _ & ".kine.local.posy," & oNull & ".kine.local.posz" Translate oNull, -8.153, 7.015, -0.702, siRelative, _ siView, siObj, siXYZ SaveKey sPosParams, 1.000 Translate oNull, 8.350, -8.935, 0.894, siRelative, _ siView, siObj, siXYZ SaveKey sPosParams, 50.000 Translate oNull, 9.413, 8.935, -0.894, siRelative, _ siView, siObj, siXYZ SaveKey sPosParams, 100.000 StoreAction oRoot, sPosParams, 2, "StoredFcvAction", _ True, 1, 100 ' Get the action source from the model Set oSources = oRoot.Sources ' Print the names and families of each source For Each s In oSources LogMessage s.name & ": " & s.Families Next
To find out the family information for the currently-selected object
' Test to see if the object is a 3D Object If oSel.BelongsTo( "3D Object" ) Then LogMessage "BelongsTo property = True (for 3D Obj)" Else LogMessage "BelongsTo property = False" End If ' Print family id LogMessage "Families property = " & oSel.Families
An object's parent is the node directly above that object in the Softimage hierarchy. An object can have only one parent, but its parent may also have a parent and so on up the explorer tree. For example, in this image, "cube3" is the parent of "sphere1" and "Scene_Root" is the parent of "cube3".
For subcomponents (points, segments, and facets), either the parenting geometry or the parenting object of that subcomponent can be considered its parent.
An object's owners are any other nodes in the Softimage hierarchy which use that object. Often the parent of an object may also be its owner. For example, in the image above, "cube3" is both a parent and an owner of "sphere1". In addition, "sphere1" is also a member of the default layer and the default background objects partition, so it appears under ProjectLayersLayer_Default and ProjectPassesDefault_PassBackground_Objects_Partition.
To find the owner of the currently-selected object
' Get the selection Set oSelected = Selection ' Find the owner & print its name For Each s In oSelected LogMessage s.Owners.Count & " owner(s) for " & s Set oOwner = s.Owners For i = 0 To oOwner.Count - 1 Set o = oOwner(i) LogMessage "Owner #" & i + 1 & " is " & o Next Next
To find the parent of the currently-selected object
' Get the selection Set oSelected = Selection ' Find & print the parent's name of each selected item For Each s In oSelected LogMessage s & "'s parent is " & s.Parent Next
To find the parent information of the currently-selected subcomponent
' Get the selection (assuming it's a subcomponent) Set oSelected = Selection(0) Set oSubSel = oSelected.SubComponent ' Find the Parenting Geometry LogMessage oSubSel & "'s parenting geometry is " & _ oSubSel.Parent ' Find the Parent Object LogMessage oSubSel & "'s parent object is " & _ oSubSel.Parent3DObject