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 への 1 番目のパラメータは、コマンドの名前です。 これは、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" );