Softimage のカスタム メニューは、自己インストール プラグインとしてのみ作成できます。 自己インストール メニューには、定義(メニューに表示される項目、その動作の仕方、および外観)、そして提供したい追加のカスタム関数(該当メニュー項目をクリックしたときに実行されるプロシージャ)が組み込まれています。
ここでは、カスタム メニューの作成方法について詳しく説明する前に、まずメニューおよびそのコンポーネントの構造についての質疑応答を挙げておきます。
メニュー上に表示されるものはすべて「メニュー項目」と呼ばれています。 メニュー項目のオリジン(コマンドまたはコールバックがインストールされた場所)に応じて、次のいずれかのシンボルがラベルの横に表示されます。
シンボル |
オリジン |
---|---|
|
ユーザ ロケーション |
|
ワークグループ ロケーション |
(シンボルなし) |
ファクトリ ロケーション - または - カスタム ロケーション(XSI_PLUGINS 環境変数で指定される場所) |
コマンド(通常のコマンド、インスタンス コマンド、およびテンプレート コマンド)
カスタム コマンド、および組み込みの Softimage コマンドを起動します。
ユーザ独自のカスタム コールバック関数を起動します。 これらの関数は、ユーザ メニューの定義と同じファイルで定義する必要があります。
ユーザ メニューは、横線を挿入して論理セクションに分割することができます。 これらの横線は、純粋な装飾エンティティです。
サブメニュー(一部はセカンダリ メニューまたはドロップダウン メニューと呼ばれる)
メニューをネストさせることにより、ユーザ メニューおよびメニュー項目を系統立てて編成できます。 サブメニューは、エントリ ラベルの右側の矢印で識別することができます。
選択できる場所は 100 以上あります(完全なリストについては、siMenuAnchorPoints を参照)。これらの場所は、メニュー アンカー ポイントと呼ばれ、メニュー登録中に指定します(「Softimage でのカスタム メニューの登録」を参照)。アンカー ポイントは、次の場所で使用できます。
静的メニューまたは動的メニューのどちらかを任意に作成できます。 メニューは Softimage にロードまたは再ロードされるたびに再ビルドされます。ただし、親メニュー(それらのメニューのアンカー先メニュー)が開いたときに毎回、メニューを再ビルドするかどうかをユーザが選択することもできます。
たとえば、(MenuItem.Filter プロパティを使用して)メニュー上の項目にフィルタを割り当てることにより、メニューを表示する前に、メニューを表示先のオブジェクトまたは選択されたオブジェクトと突き合わせて検証することができます。カスタム メニュー項目は、フィルタの条件を満たさない場合、淡色表示されます。また、コンテキスト メニューにアタッチされた場合は削除されます。
あるいは、一定の条件が満たされない場合だけメニュー項目を非表示にすることもできます。 たとえば、ユーザ メニューの Init コールバックは次のような形式になります。
if ( Selection.Count > 0) { menu.AddCommandItem( "Add Duck To Water", "AddDuckToWater" ); } else { menu.AddCommandItem( "Drain Tub", "DrainTub" ); } menu.AddCommandItem( "Add More Hot Water", "AddMoreHotWater" );
このサンプルでは、ユーザがメニューを開いたときに現在のシーン内で何も選択しない限り、表示されるのは Drain Tub コマンド項目および Add More Hot Water コマンド項目だけです。 何かを選択した場合は、Add Duck to Water コマンド項目および Add More Hot Water コマンド項目が表示されます。
デフォルトでは、メニューは動的です。 ユーザ メニューを静的メニューにするには、RegisterMenu (PluginRegistrar) メソッドを XSILoadPlugin 登録コールバック内で呼び出す際に、Dynamic パラメータを false に設定してください。
はい。 メニューは、スクリプト作成やコンパイルが可能ですが、(Script Editorで)処理中に作成することはできません。 カスタム メニューを自己インストール プラグインとして実装するには、適切なコールバックを使用する必要があります。 詳細については、「自己インストール プラグイン」を参照してください。