Known SDK Limitations v5.1 (XSISDK)
|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.
|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 (http://softimage.wiki.avid.com/index.php/Workgroups#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 (http://softimage.wiki.avid.com/index.php/Custom_Operators_%28XSISDK%29#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.
|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) (http://softimage.wiki.avid.com/index.php/Known_SDK_Limitations_v5.0_%28XSISDK%29) 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 (http://softimage.wiki.avid.com/index.php/Cpp_Compilation_%28XSISDK%29#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.