Softimage でコマンドを使えるようにするには、そのコマンドを XSILoadPlugin に登録します。この XSILoadPlugin は、Softimage が自己インストール プラグインをロードするときに呼び出されます。XSILoadPlugin が PluginRegistrar または PluginRegistrar オブジェクトを Softimage から取得するので、RegisterCommand または RegisterCommand を使ってカスタム コマンドを登録します。
XSIPLUGINCALLBACK CStatus XSILoadPlugin( PluginRegistrar& in_reg ) { in_reg.PutAuthor(L"Command Wizard User"); in_reg.PutName(L"MyCommands"); in_reg.PutVersion(1,0); // This plug-in contains two custom commands in_reg.RegisterCommand(L"MyCommand",L"MyCommand"); in_reg.RegisterCommand(L"My Other Command",L"MyCommand2"); return CStatus::OK; }
function XSILoadPlugin( in_reg ) { in_reg.Author = "Command Wizard User"; in_reg.Name = "MyNewCommandPlugin"; in_reg.Major = 1; in_reg.Minor = 0; // This plug-in contains two custom commands in_reg.RegisterCommand("MyNewCommand","MyNewCommand"); // Register a second command and set the plug-in categories var myPluginItem = in_reg.RegisterCommand(L"My Other Command",L"MyCommand2"); myPluginItem.Categories = Array( "Example", "Custom" ); return true; }
RegisterCommand または RegisterCommand への最初のパラメータは、コマンドの名前です。これは、Softimage ユーザ インターフェイスに表示される名前です。また、XSIApplication.Commands または Application::GetCommands が戻すコマンド コレクション内のコマンド名でもあります。
このコマンド名は、コールバック関数(Execute、Init など)に名前を付けるためにも使用されます。 たとえば、"MyCommand" という名前のコマンドの Execute コールバックは "MyCommand_Execute" という名前になります。
コマンド名の先頭文字には英字を使用します。 先頭文字以外には、英字、数字、アンダースコア(_)、またはスペースを指定できます。 コマンド名にスペースが含まれている場合("My Simple Command" など)は、コールバック関数名でスペースを削除します("MySimpleCommand_Init"、"MySimpleCommand_Execute" など)。
RegisterCommand または RegisterCommand への 2 番目のパラメータは Command.ScriptingName または Command::GetScriptingName です。これは、スクリプトまたは C++ コードからコマンドを実行するときに使用する名前です。コマンド名の先頭文字には英字を使用します。 以降に続く文字は、英字、数字、アンダースコア(_)のいずれも使用できます。 スクリプト名にはスペースを含めることはできません。
あらゆるスクリプト言語からコマンドを実行できるようにするには、先頭文字に英字を使用する必要があります(VBScript では、名前の先頭文字にアンダースコアを使用できません)。
スクリプト名にはスペースやハイフンなどの文字を含めることができますが、これらの文字を含めると、スクリプト名で参照することによってコマンドを実行することができなくなります。 たとえば、スクリプト名が「My-Command」の場合、コマンドを実行する唯一の手段は、オブジェクト モデルを使用することです。
// Command.Name = "MyCommand", Command.ScriptingName = "My-Command" var oCmd = Application.Commands( "MyCommand" ); oCmd.Execute(); Application.ExecuteScriptCommand( "123MyCommand" );