Known SDK Limitations v5.0 (XSISDK)

This page will be used to report known limitations/bugs. Internal tracking numbers (which look like "UDEV00180585") are mentioned, when known, so that Softimage can keep track of each item. It is not a comprehensive list, but it highlights certain pitfalls for developers to avoid.

SDK Issues
UDEV00081519 SPDL files cannot be installed when the user is not a power-user or administrator of their machine (Windows only).

Once a SPDL file is installed it can be used by a user with lower priviledges. Note: Connecting to a workgroup will automatically attempt to install any SPDL files found there. Therefore workgroup based shaders or operators may appear to be broken because of this limitation.

Workaround: Give all users "power-user" or "administrator" status on their machines. Otherwise make sure that all SPDL files are explicitly installed by someone with sufficient priviledges.

UDEV00080053 The AlignCenter, AlignRight and AlignLeft SPDL keywords are not supported. This also applies to PPGLayout based layouts.

OnTerminate event when using the new self-installed event code does not work. Workaround: Use the legacy Application.Advise mechanism to create terminate events


The C++ API Scene::GetActivePass does not work. The CRef that is returned is not valid so the name of the pass cannot be read from it. Workaround: Use the CComAPIHandler to call Scene.ActivePass or write a small scripting command to return the information.

UDEV00036343 Primitive::GetConstructionHistory is not implement in the C++ API.

Workaround: Use SIObject::GetNestedObjects to retrieve the operators connected to a Primitive.

UDEV00048516 In some cases it is necessary to use InputPort.Value rather than InputPort.Target2 to get accurate data inside a Custom Operator
UDEV00170452 Problem: If a selection event is muted inside a script it will remain active until the script has finished executing. Therefore it is not possible to temporarily disable a selection event to prevent if from executing when a script intentionally changes the selection.

Workaround: Use a global variable or some other mechanism to tell the selection event to do nothing, rather than relying on the offical XSI mute functionality.

UDEV00040317 For siControlFilePath controls inside PPGLayouts, setting the siUIFileMustExist flag to zero does not work. However the openfile flag does work.
UDEV00077646 The XSI plug-in wizards will sometimes allow creation of an invalid plug-in. For example the scripting name of Custom Parameters should never begin with a number.

Workaround: Always provide names that match XSI parameter naming conventions.

UDEV00070782 The vbscript MsgBox command may truncate some text.

Workaround: Use XSIUIToolkit.MsgBox instead.

UDEV00081980 It may be necessary to close XSI in order to update a Mental Ray Shader DLL. Once it has been loaded by Mental Ray for rendering it may remain in memory, preventing recompilation of the .DLL or .SO.

After a PPG.Refresh call, a "tab change" PPG Event is invoked that claims that the tab has been switched to the first tab, even if the current tab is not the first tab. The same bug occurs when changing the inspected object shown in a property page window.

UDEV00072518 If two commands by the same name are created then this may break functionality depending on either of the commands, and hence XSI plugins may break.

Workaround: Users are recommended to pick a name that is unlike to be picked by anyone else, for example with a prefix based on the company or plugin. The same name should be used for both the command name and command script name.

UDEV00178715 The label of a Custom Menu can normally be set by calling SIObject.Name in the Init Callback for a menu. However this does not work if the custom menu is at the top menu.

Workaround: When the label is not set explicitly it is based on the name of the custom menu. Spaces can be used in that string, they will be striped out for the generation of the callback names. However there is a limitation that top level menus cannot start with a number character.

UDEV00180585 Normally XSI remembers whether an event has been muted by persisting the information. However the Event mute state is not persisted if event name is longer that 30 characters

Workaround: Pick names less than 30 characters

UDEV00083844 If an XSI workgroup contains ActiveX (COM-based) DLLs then XSI does not automatically register them for each user who connects to the workgroup.

Workaround: Write a simple script-based self-installed plugin and sort it on the workgroup. This plugin uses XSIUtils.LaunchProcess to call cmdreg.exe to register each dll file as necessary. By placing this code within the XSILoadPlugin callback it will run at startup or as soon as the workgroup is connected.

UDEV00036121 If a custom property is connected to a custom operator it may be necessary to specify the additional classification flags 0x4061 on each parameter of the Custom Property. The ensures that the operator will evaluate properly.
UDEV00077145 Geometry.Samples returns a SamplePointCollection, and the methods of PolygonNodeCollection are not available on this returned object
UDEV00025517 A parameters of a Custom Operator is not exposed in the Object Model Parameter collection if it has the siNotInspectable flag.

Workaround: Use a custom layout to specify which parameters are shown on the Property Page, rather than this capability.

UDEV00028382 A Custom Preference that is deleted in the explorer will re-appear the next time XSI is restarted. The only supported way to completely remove a custom preference is to remove the associated .Preset file from disk.
UDEV00027368 The command line options ""xsi -i"" and ""xsi -u"" do not support wildcards. For example ""xsi -u *.spdl"" is not supported.
UDEV00184459 The Category argument to InstallCustomPreferences does not work

Workaround: Do not specify a category. The resulting custom preferences will appear under the Custom node.

UDEV00085681 It is possible to connect a scripted operator to a 3d object and read its envelopes however, this kind of operator is illegal in the context of scripted operators and may lead to un-expected results. If you need to read the envelope's deformers you must explicitly connect to them. This is the only way to ensure that the deformers are evaluated correctly and that you do no create an evaluation cycle ( recursive loop in the scene graph evaluation ).
UDEV00137033 CreateToolbar command creates an old style toolbar (.DSToolbar). Workaround: write the XML file for a toolbar directly. The toolbar wizard includes a helper script command that can be used to do this easily.
UDEV00140596 The collection returned by the Object Model Constraint.Constraining method may contain the same object multiple times.

Workaround: Filter the returned collection to remove duplicate entries. Once possible way to do this is to use an XSICollection with the Unique property set to true.

UDEV00030278 A Cluster SDK object will become invalid if a cluster property underneath it is frozen. In general it is not safe to cache a cluster object and reference if after significant changes have occurred on the geometry, its clusters or the cluster properties.

Workaround: Get a new SDK object for the cluster after the freeze operation. A straightfoward way to do this is to remember the fullname of the cluster inside a string variable, then call GetValue or Dictionary.GetObject to retreive a new SDK object.

UDEV00185412 The siOnEndSceneSave event does not pass the file path of the file that is being saved.

If the file has already been saved its path can be determined via the object model, e.g. Application.ActiveProject.ActiveScene.Filename.Value. However if the scene has never been saved the scene filename has not yet been determined at the time the callback is performed.


The MenuItem.Filter method only works for contextual based menus. Workaround: Set the menu to dynamic, so the Init method is called each time it is shown. The menu can then be rebuilt according to the current context.


FCurve.SetKeyTangents does not work in some cases. Workaround: Set the tangents using methods like FCurveKey.LeftTanY


Custom Property Wizard does not create Animated Parameters properly in Python

Workaround: Replace the " or " with " + " in the generated AddParameter2 calls.

For example: oCustomProperty.AddParameter2("Param",constants.siInt4,0,0,100,0,100,0,constants.siPersistable + constants.siAnimatable)

xsibatch -script does not support passing arguments to a Python script

Workaround: Write an intermediate jscript or vbscript script that takes the path to a python script and a list of arguments and invokes the Python script with Application.ExecuteScript

Backward Compatibility Issues

The data type returned by XSI for a color parameter in previous versions was "siUnknown" and now in v5.0 it is "siEmpty"


In previous versions, when traversing a render tree XSI would return a Texture object rather than a Shader object for shaders belonging to the "Texture" family. In XSI 5.0 a Shader object is returned. Only the Material.CurrentTexture API returns a Texture.


The "signature" for X3DModel.AddModel changed from IDispatch*,BSTR to VARIANT,VARIANT. This breaks backward compatibility for COM API plugins that call that methods. It has not affect on C++ API and Scripting. This was done to improve JScript support.


ValueType changed for Color Parameters. Before XSI 5.0, calling from scripting or from C++ API would return siUnknown/VT_UNKNOWN,i.e. Parameter::GetValueType() or ValueType (Parameter). Now in XSI 5.0, no SDK call returns this useless value. Instead it will return siEmpty/VT_EMPTY. We suggest 2 workarounds to ensure backword compatibility. 1) check for both return value of siUnknown or siEmpty. 2) You can also test whether Parameter.Type is "CompoundType". Then see if the sub-parameters "red", "green", "blue" and/or "alpha" exist.

This page was last modified 20:57, 2 Nov 2010.
This page has been accessed 23440 times.

© Copyright 2009 Autodesk Inc. All Rights Reserved. Privacy Policy | Legal Notices and Trademarks | Report Piracy