Returning Values

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