MPxContextCommand

MPxContextCommand は、コンテキストを作成する特殊なコマンドを定義するために使用するクラスです。コンテキスト コマンドは、コマンド ラインから実行したり MEL スクリプトに配置したりできるという点で通常のコマンドと同じです。ただし、このコマンドには編集および検索オプションを持たせてコンテキストのプロパティを修正できます。また、コンテキストのインスタンスが作成され、Mayaに渡されます。コンテキスト コマンドを元に戻すことはできません。

コンテキスト コマンドを作成する

次は、以前に説明したマーキー コンテキストの作成に使用するコンテキスト コマンドの実装例です。

marqueeContextCmd::marqueeContextCmd() {}

このメソッドは、コンテキストのインスタンスを作成するために Maya によって使用されます。

MPxContext* marqueeContextCmd::makeObj()
{
    return new marqueeContext();
}
void* marqueeContextCmd::creator()
{
    return new marqueeContextCmd;
}
MStatus initializePlugin( MObject obj )
{
    MStatus status;
    MFnPlugin plugin( obj, "Autodesk", "1.0", "Any");
    status = plugin.registerContextCommand( \
    "marqueeToolContext", marqueeContextCmd::creator );

コンテキスト コマンドは登録する必要がありますが、この場合は MFnPlugin::registerCommand() の代わりに MFnPlugin::registerContextCommand() が使用されます。

    return status;
}
MStatus uninitializePlugin( MObject obj )
{
    MStatus status;
    MFnPlugin plugin( obj );
    status = plugin.deregisterContextCommand( \
        "marqueeToolContext" );

MFnPlugin::deregisterContextCommand() は、同様にコンテキスト コマンドの登録を削除するために使用します。

    return status;
}

単純なコンテキストの作成で必要になるものが揃いました。

コンテキスト コマンドを Maya シェルフに追加する

コンテキストを「アクティブ化する」、つまり Maya でコンテキストを現在のコンテキストにする方法は 2 つあります。1 つは、setToolTo コマンドを使用する方法です。このコマンドは、コンテキスト(ツール)の名前を取ってそれを現在のコンテキストにします。

もう 1 つは、コンテキストを表すアイコンを作成し、Maya ツール シェルフに配置する方法です。Maya ツール シェルフには、2 種類のボタン、つまりコマンド ボタンとツール ボタンを設定することができます。ツールをアクティブ化すると、そのアイコンが、ツール バー内の標準 Maya ツールの横に表示されます。

以下は、コンテキスト、およびコンテキストのツール ボタンの作成に使用できる MEL コマンドのセットです。

marqueeToolContext marqueeToolContext1;
setParent Shelf1;
toolButton -cl toolCluster
 -t marqueeToolContext1
 -i1 "marqueeTool.xpm" marqueeTool1;

この MEL コードでは、marqueeToolContext のインスタンスがインスタンス化され、共通(Common)ツール シェルフに追加されます。

ツールのアイコン marqueeTool.xpm が検索され UI に追加されるようにするには、marqueeTool.xpm を XBMLANGPATH に配置する必要があります。アイコンが見つからないとシェルフには空白が表示されますが、ツールは使用できます。

このコードは、MEL コマンド ウィンドウから手作業で入力することも、プラグインの initializePlugin() メソッドの MGlobal::sourceFile() でコールすることもできます。