Learning movies play in the wrong language


A customer in Germany reported that he couldn’t play the Softimage learning movies (aka Essential Skills movies) from NetView, and that when he used Windows Explorer to open the movies, they were playing in Japanese. I had a similar problem on my own machine, where the Maya learning movies played in Japanese instead of English.

First, the links in the NetView learning movies page just “run” the files using the default program for .mov files. If nothing happens when you click a link, check the default program registered for the .mov file type. If you cannot get the links to work, you can find the movies in the folder %XSI_HOME%\Data\NetView_Database\Movies.

The movie files contain multiple audio tracks. Here’s a video that shows how to change to the English audio track:

ERROR : 2004 – Invalid pointer – [line 2]


When you render with xsibatch, you get this error even though the frame does render successfully.

ERROR : 2004 – Invalid pointer – [line 2]

For example:

COMMAND: -render "C:\Users\blairs\Documents\Support\Project\Scenes\Sphere.scn" -
frames 2-4
>Loading: C:\Users\blairs\Documents\Support\Project\Scenes\Sphere.scn...
' ERROR : 2004 - Invalid pointer - [line 2]
' INFO : 4034 - Loaded scene was created with build number: 9.5.184.0 - compatibility version: 900
' ERROR : 2004 - Invalid pointer - [line 2]
OpenScene "C:\Users\blairs\Documents\Support\Project\Scenes\Sphere.scn", False,True
' INFO : Rendering all passes: Passes.Default_Pass
' INFO : Rendering frames '2-4'
' INFO : Rendering pass 'Default_Pass'...
' INFO : Rendering frame 2 (0.0% done)
' INFO : Rendering frame 3 (33.3% done)
RenderPasses "Passes.Default_Pass", , , , siRenderVerbosityDefault

If you running xsibatch from a render manager, this error may cause the render manager to quit the render job.

You can workaround this by renaming the ICEFlow plugin (Application\Plugins\ICEFlow.dll). This plugin manages the transfer of data between Softimage and Maya (the one-click ICE workflow).

Object model methods for finding objects


The Softimage 2011 Subscription Advantage Pack includes new methods for finding objects.

These FindObjects methods are more efficient than X3DObject.FindChildren, because the FindObjects methods don’t go through the scene hierarchy (they go directly to an internal database of objects).

Model.FindObjects( siClassID )
Finds all objects under the model that match a specified class ID (for example, all shaders or all ICE Trees). For example:

 # Enumerate all shaders under the scene root.
 from win32com.client import constants as c
 shaders = Application.ActiveSceneRoot.FindObjects( c.siShaderID )
 for s in shaders:
 	LogMessage( s.ProgID )
 # INFO : Softimage.soft_light.1.0

Supported siClassIDs:
siCameraID | siClusterID | siClusterPropertyID | siConstraintID | siCustomOperatorID | siCustomPropertyID | siEnvelopeID | siEnvelopeWeightID | siExpressionID | siGeometryID | siGroupID | siICETreeID | siLightID | siMaterialID | siModelID | siNullID | siNurbsSurfaceMeshID | siNurbsCurveListID | siOperatorID | siPolygonMeshID | siPropertyID | siShaderID | siShapeKeyID | siX3DObjectID

Application.FindObjects( siClassID )
Finds all objects that match a specified class ID. For example:

from win32com.client import constants as c
oICETrees = Application.ActiveSceneRoot.FindObjects( c.siICETreeID )
for x in oICETrees:
 	LogMessage( x.Nodes.Count )

Supported siClassIDs:
siCameraID | siClusterID | siClusterPropertyID | siConstraintID | siCustomOperatorID | siCustomPropertyID | siEnvelopeID | siEnvelopeWeightID | siExpressionID | siGeometryID | siGroupID | siICETreeID | siImageClipID | siLayerID | siLightID | siMaterialID | siModelID | siNullID | siNurbsSurfaceMeshID | siNurbsCurveListID | siOperatorID | siPassID | siPolygonMeshID | siPropertyID | siShaderID | siShapeKeyID | siX3DObjectID

Model.FindObjectsFomCLSID( sCLSID )
Finds all objects that match a specified CLSID. You can determine the CLSID of an object using XSIUtils.DataRepository () or by inspecting Softimage objects with the SDK Explorer.

# Enumerate all visibility properties under the scene root.
 props = Application.ActiveSceneRoot.FindObjectsFromCLSID( "{11EBE301-A20C-11D0-8478-00A024C7919C}" )
 for vis in props:
 	LogMessage( vis.FullName )
 # INFO : Camera_Root.visibility
 # INFO : Views.ViewC.SpotCamera.visibility
 # INFO : Camera.visibility
 # INFO : Views.ViewB.SpotCamera.visibility
 # INFO : Camera_Interest.visibility
 # INFO : Views.ViewD.SpotCamera.visibility
 # INFO : Views.ViewA.SpotCamera.visibility
 # INFO : light.visibility

C++ versions:

Python: importing modules into plugins


New in the Softimage 2011 Subscription Advantage Pack

The siutils Python module makes it easier to import modules into your self-installing plugins. Just put your modules in the same location as your plugin file , and you can use the __sipath__ variable to specify the module location.

__sipath__ is always defined in the plugin namespace, so no matter where you put a plugin, you can simply use __sipath__ to specify the location.

Here’s a simple example that shows how to import a module into your plugin.

  • Line 04: Import the siutils module
  • Line 39: Use add_to_syspath() to add __sipath__ to the Python sys path.
    If the module was located in a subfolder of the plugin location, you could use siutils.add_subfolder_to_syspath( __sipath__, ‘mysubfolder’ )

  • Line 40: Import the module
import win32com.client
from win32com.client import constants

import siutils

null = None
false = 0
true = 1

def XSILoadPlugin( in_reg ):
	in_reg.Author = "blairs"
	in_reg.Name = "TestPlugin"
	in_reg.Major = 1
	in_reg.Minor = 0

	in_reg.RegisterCommand("Test","Test")
	#RegistrationInsertionPoint - do not remove this line

	return true

def XSIUnloadPlugin( in_reg ):
	strPluginName = in_reg.Name
	Application.LogMessage(str(strPluginName) + str(" has been unloaded."),constants.siVerbose)
	return true

def Test_Init( in_ctxt ):
	oCmd = in_ctxt.Source
	oCmd.Description = ""
	oCmd.ReturnValue = true

	return true

def Test_Execute(  ):

	Application.LogMessage("Test_Execute called",constants.siVerbose)

#	print __sipath__ 

	siutils.add_to_syspath( __sipath__ )
	import TestModule
	TestModule.test( "hello world" )

	return true

Connect to workgroups with a .data file


New in the Softimage 2011 Subscription Advantage Pack
You can now use a workgroup_path.data file to specify your workgroups.

At startup, Softimage scans the Factory (installation) and User folders for a workgroup_path.data file, and connects to all the workgroups listed in that file.

The workgroup_path.data file is a plain text file that can contain multiple directory paths. Each path must be added on a separate line and each line must end with a newline character. For example:

C:\Users\blairs\Documents\Support\Workgroups\studioNEST
\\server\Softimage\workgroups\Shaders