Execute (Command)

Description

This callback is fired every time you invoke the command.

Use this callback to implement a command. This is where you process the arguments, peform some actions, and then return the result (if any). In other words, this callback is roughly equivalent to the XSIOnCommand and XSIOnCommandCPP legacy callbacks.

Applies To

Custom Commands

Syntax

// C#
public class <command_name>
{
   public bool Execute( Context in_ctxt )
   {
       ...
   }
}

 

// C++
CStatus <command_name>_Execute( CRef& in_context )
{
   ...
}

// JScript
function <command_name>_Execute( in_arg0, in_arg1, in_arg2, ... )
{
   ...
}

# Python
def <command_name>_Execute( in_arg0, in_arg1, in_arg2, ... ) :
   ...

' VBScript
Function <command_name>_Execute( in_arg0, in_arg1, in_arg2, ... )
   ...
End Function

# PerlScript
sub <command_name>_Execute 
{ 
   my (@in_args) = @; 
}

<command_name> is the name specified in the call to PluginRegistrar.RegisterCommand, with any spaces removed.

Parameters

Parameter

Language

Type

Description

in_args

Scripting

Depends on the argument

The list of arguments matches the arguments added to the command in the Init (Command) callback.

The actual type of an argument depends on the argument handler (if any) and the value passed in by the caller.

in_context

C#

Context

Context.Source returns the Command.

The command arguments and return value are stored as context attributes.

in_context

C++

CRef & (C++)

A reference to the Context object.

The command arguments and return value are stored as context attributes.

Context Attributes

C++ and C# custom commands use context attributes to get the command arguments and to return values.

Attribute

Description

Arguments

C#
An array of type System.Object. You must cast each element of the array to its proper type before being able to use it.

C++
A CValueArray. Each element of this array is a CValue object that stores an argument, which could be a boolean, numeric, or string value, a single Softimage object, or a collection of objects.

See Working with Arguments.

ReturnValue

Stores the return value of the command.

See Returning Values.

UndoRequired

C++ API only
Determines whether or not an undo stack must be maintained. See Undoing and Redoing Custom Commands.

UndoRedoData

C++ API only
Stores the current activity in the undo stack, which can later be retrieved in the Undo callback See Undoing and Redoing Custom Commands.

Examples

JScript Example

// JScript code generated by the Command Wizard
function XSILoadPlugin( in_reg )
{
   in_reg.Author = "sblair";
   in_reg.Name = "NewCommand12Plugin";
   in_reg.Email = "";
   in_reg.URL = "";
   in_reg.Major = 1;
   in_reg.Minor = 0;

   in_reg.RegisterCommand("NewCommand12","NewCommand12");
   //RegistrationInsertionPoint - do not remove this line

   return true;
}

function XSIUnloadPlugin( in_reg )
{
   strPluginName = in_reg.Name;
   Application.LogMessage(strPluginName + " has been unloaded.");
   return true;
}

function NewCommand12_Init( ctxt )
{
   var oCmd;
   oCmd = ctxt.Source;
   oCmd.Description = "";
   oCmd.ReturnValue = true;

   var oArgs;
   oArgs = oCmd.Arguments;
   oArgs.AddWithHandler("Arg0","AnimatableParameters");
   oArgs.AddWithHandler("Arg1","Collection");
   oArgs.AddWithHandler("Arg2","SingleObj");
   oArgs.AddWithHandler("Arg3","Frame");
   oArgs.AddWithHandler("Arg4","MarkedParameters");
   oArgs.Add("Arg5",siArgumentInput);
   return true;
}

function NewCommand12_Execute( Arg0,Arg1,Arg2,Arg3,Arg4,Arg5 )
{

   Application.LogMessage("NewCommand12_Execute called");

   // 
   // TODO: Put your command implementation here.
   // 
   return true;
}

C++ Example

// C++ code generated by the Command Wizard
#include <xsi_application.h>
#include <xsi_context.h>
#include <xsi_pluginregistrar.h>
#include <xsi_status.h>
#include <xsi_argument.h>
#include <xsi_command.h>
using namespace XSI; 

XSIPLUGINCALLBACK CStatus XSILoadPlugin( PluginRegistrar& in_reg )
{
   in_reg.PutAuthor(L"sblair");
   in_reg.PutName(L"CmdCppExamplePlugin");
   in_reg.PutEmail(L"");
   in_reg.PutURL(L"");
   in_reg.PutVersion(1,0);
   in_reg.RegisterCommand(L"CmdCppExample",L"CmdCppExample");
   //RegistrationInsertionPoint - do not remove this line

   return CStatus::OK;
}

XSIPLUGINCALLBACK CStatus XSIUnloadPlugin( const PluginRegistrar& in_reg )
{
   CString strPluginName = in_reg.GetName();
   Application().LogMessage(strPluginName + L" has been unloaded.");
   return CStatus::OK;
}

XSIPLUGINCALLBACK CStatus CmdCppExample_Init( CRef& in_ctxt )
{
   Context ctxt( in_ctxt );
   Command oCmd;
   oCmd = ctxt.GetSource();
   oCmd.PutDescription(L"");
   oCmd.EnableReturnValue(true);

   ArgumentArray oArgs;
   oArgs = oCmd.GetArguments();
   oArgs.AddWithHandler(L"Arg0",L"AnimatableParameters");
   oArgs.AddWithHandler(L"Arg1",L"Collection");
   oArgs.AddWithHandler(L"Arg2",L"SingleObj");
   oArgs.AddWithHandler(L"Arg3",L"Frame");
   oArgs.AddWithHandler(L"Arg4",L"MarkedParameters");
   oArgs.Add(L"Arg5");
   return CStatus::OK;
}

XSIPLUGINCALLBACK CStatus CmdCppExample_Execute( CRef& in_ctxt )
{
   Context ctxt( in_ctxt );
   CValueArray args = ctxt.GetAttribute(L"Arguments");
   CValue Arg0 = args[0];
   CValue Arg1 = args[1];
   CValue Arg2 = args[2];
   CValue Arg3 = args[3];
   CValue Arg4 = args[4];
   CValue Arg5 = args[5];

   Application().LogMessage(L"CmdCppExample_Execute called");
   // 
   // TODO: Put your command implementation here.
   // 
   // Return a value by setting this attribute:
   ctxt.PutAttribute( L"ReturnValue", true );

   // Return CStatus::Fail if you want to raise a script error
   return CStatus::OK;
}

See Also

Command Callbacks

Init (Command)

Redo

TermUndoRedo

Undo

Custom Command Examples



Autodesk Softimage v7.5