Known SDK Limitations v5.1 (XSISDK)

SDK Issues
These limitations may also exist in earlier versions of XSI, but were first reported with XSI 5.1

PPG Logic doesn't work for C++-based SICO

Workaround: Use a Custom Property as input to the operator.

UDEV00196841 CMeshBuilder - Cannot be used from within a custom operator
UDEV00195694 C++ API Method ClusterProperty::SetValues is only available when using the CClusterPropertyBuilder.

It is not available with Custom Operators or when updating an existing Cluster Property.

Workaround: Use CClusterPropertyElementArray::PutArray instead
UDEV00043632 Subcomponent object missing from C++ API. Workaround: Use a script based command to retrieve data about the subcomponent selection and return it as an array to C++
UDEV00040908 GridData and FCurve parameters are not supported as Parameter types for Custom Operators
UDEV00161143 XSI only scans for custom layouts at startup time. Therefore if you connect to a workgroup containing layouts XSI will not see it until it is restarted
UDEV00161144 XSI only scans for custom keymaps at startup time. Therefore if you connect to a workgroup containing keymaps XSI will not see it until it is restarted
UDEV00167382 The Plug-in Manager supports drag and drop installation of Plug-ins but only when dragging within XSI. Drag and drop from the Windows explorer is not supported.
UDEV00183250 The Command Hyperlink feature in the script history does not work for some commands when vbscript is the active language. Workaround: Right click on the line to launch help from the context menu.
UDEV00211139 The ClusterElementCollection.ItemsByIndex may crash XSI when used with a Cluster. Workaround: Use ClusterElementCollection.Elements to retrieve the entire index mapping array
UDEV00213543 Tear-off menus appear in the View Collection with the C++, but as an invalid object. Calling View::GetFloating()

and other related methods can lead to a crash. For example the "Cascade" Simple Menu example will crash if any tear-off menus are on screen.

Workaround: Test View::IsValid() before calling any methods on the View.
UDEV00211830 Python: Cannot use KinematicState.Transform with the Frame agrument Workaround: Write a small command in JScript or VBScript to retrieve this information
SDK Issues (also reported with XSI 5.0)
These limitations were also reported in Known SDK Limitations v5.0 (XSISDK)
UDEV00080053 The AlignCenter, AlignRight and AlignLeft SPDL keywords are not supported. This also applies to PPGLayout based layouts.
UDEV00036343 Primitive::GetConstructionHistory is not implement in the C++ API.
  • Workaround: Use SIObject::GetNestedObjects to retrieve the operators connected to a Primitive.
  • Workaround 2: Use CComAPIHandler or a small script command to call DataRepository::GetConnectionStackInfo to retrieve full information about all operator connections.
  • Workaround 3: If you know the name of the operator it can be retrieved directly, e.g. with CRef::Set
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, and avoid passing long strings. Breaking the message into multiple lines (using VBScript vbCrLf or JScript "\n" character) can help.

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.

See also Updating a Workgroup that is being used by other users (

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.

For more details see Custom Operators - Classification Flag (

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.
  • Workaround: Delete the file manually
  • Workaround 2: A good way to store custom preferences is inside an Addon location (user or workgroup) so that it is automatically removed when the addon is uninstalled or the workgroup is disconnected.
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.

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.

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

This section only covers differences from v5.0 to v5.1. See Known SDK limitations v5.0 (XSISDK) ( for differences between v5.0 and previous versions.


Stricter directory scanning. In previous versions XSI was doing exhaustive scanning in User, Workgroup and Factory locations. This meant that sometimes .SPDL files were working even if they weren't located in the recommended locations. This extra scanning was slowing down the startup time of XSI and other operations, so it has been removed.

The recommended locations that are scanned are:

<user> <user>\Addon <user>\Addon\<AddonName> <workgroup> <workgroup>\Addon <workgroup>\Addon\<AddonName> <factory>\Addon <factory>\Addon\<AddonName>

And within each of these possibilities the files must be in exactly the correct subdirectory. For example spdls must always be inside "Application\spdl".

An example valid SPDL file location is:

<user>\Addons\MyEffect\Application\spdl\myspdl.spdl      // GOOD

An example that will not work anymore is any installed Addon file that used more than one directory in its path. For example:

<user>\Addons\Shaders\MyEffect\Application\spdl\myspdl.spdl // BAD

To help with backward compatibility XSI will automatically ignore any extra subdirectories specified in the .xsiaddon file. However Addons that are already installed may be affected.

The workaround is to rearrange the files into the expected directory structuring. Such a re-organization will help ensure that tool works well with the Plug-in Manager and future enhancements to XSI.


When traversing a render tree XSI now returns the "Texture" SDK object for any texture. This was the same behavior as pre v5.0 versions of XSI. For XSI 5.0 the "Shader" object was returned instead of "Texture".


A few enhancements have been added to the C++ API, including new constructor signatures to CValue and other automatic conversion between CValue and other data types. This may, in some special cases cause compiler errors when recompiling existing plug-ins. Such errors are easy to fix with more explicit type casting. See Cpp Compilation - Cannot Convert ( for more details.


In XSI 5.0 and 5.1 the Sequence command now shows a dialog box, blocking any script from finishing execution until the "OK" button is pressed. With 5.1 there is now a command called SISequence that is equivalent to Sequence but shows no user interface. It was introduced too late to appear in the command reference, but supports the same arguments as Sequence. Any older scripts that were calling Sequence should be updated to call SISequence.

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

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