Custom commands can return values, such as numbers, strings, objects, or collections of objects. To return a value, a command must enable the return value in the Init callback. The Execute callback then takes care of returning the value.
If the return value is not enabled, Softimage ignores any value returned by the command. If the return value is enabled, but the command does not return a value, Softimage returns an empty Variant.
For scripted commands, the return value is whatever value the Execute callback returns.
JScript Example: Returning a collection of objects from a custom command
function MyCommand_Init( ctxt )
{
var oCmd;
oCmd = ctxt.Source;
// This command returns a value
oCmd.ReturnValue = true;
var oArgs;
oArgs = oCmd.Arguments;
// By default, this arg will be a collection of all groups
oArgs.AddWithHandler("cloObjects","Collection", "#group*" );
return true;
}
function MyCommand_Execute( cloObjects )
{
// Return all objects in the groups
return cloObjects.Expand();
}C++ commands put their return values in the ReturnValue attribute of the callback context.
C++ Example: Returning a collection of objects from a custom command
XSIPLUGINCALLBACK CStatus MyCommand_Execute( CRef& in_ctxt )
{
Context ctxt( in_ctxt );
CValueArray args = ctxt.GetAttribute(L"Arguments");
// This command uses the Collection argument handler
CValueArray collection = args[0];
// An array
CRefArray objects;
for ( long j = 0; j < collection.GetCount(); ++j )
{
CValue val = collection[j];
CRef ref( val );
if ( ref.GetClassID() == siX3DObjectID )
{
objects.Add( ref );
}
}
// Put the CRefArray in a CValue object
CValue retval( objects );
// Return the X3DObjects
ctxt.PutAttribute( L"ReturnValue", retval );
// This does the same thing as above:
// ctxt.PutAttribute( L"ReturnValue", objects );
return CStatus::OK;
}Autodesk Softimage v7.5