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.
|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.