API ガイド > 付録 >

# 付録 E: API と開発キットの制限事項

ユーザ定義 MPxData 型のアトリビュート

ユーザ定義ノードにアトリビュートとして実装されているユーザ定義 MPxData 型のアトリビュートは、アウトライナ(Outliner)ウィンドウに表示されません。

dagSetMembers[] アトリビュートで MPlug::numElements() を使用する

シェーディング エンジン ノードの dagSetMembers[] アトリビュートで MPlug::numElements() を使用すると、誤った要素数が返されます。

解決方法

MPlug::numConnectedElements() を使用してください。

MPxGlBuffer を使用した場合、オフスクリーン カラー インデックス バッファに格納されたピクセル データが正しく読み込めない

MPxGlBuffer を使用した場合、オフスクリーン カラー インデックス バッファに格納されたピクセル データは正しく読み込めません。オフスクリーン バッファは、RGB モードで説明したとおりの動作をします。

複数の種類のオブジェクト コンポーネントを選択する

たとえば、端と頂点のように、複数の種類のオブジェクト コンポーネントが選択されている場合、アクティブ選択リストに割り当てられている MSelectionList には、最後に選択されたコンポーネントの種類だけが含まれます。たとえば、端を選択した後で、Shift キーを押しながら頂点を選択すると、アクティブ選択リストを表す MSelectionList には、頂点コンポーネントを表す MObject が 1 つだけ含まれます。

解決方法

MItSelectionList リストでは、選択されたコンポーネントが区別されるので、選択したさまざまなコンポーネントを識別するためにこのリストを使用することができます。

MItSelectionList::getDagPath()

MItSelectionList::getDagPath() は、常に、インスタンス化されたノードのオリジナル dagPath を返します。たとえば、Shape ノードが 2 つ選択されていて、これらの dagPaths が

    pCube1|pCubeShape1
    pCube2|pCubeShape1

の場合、getDagPath() は、リスト内の各オブジェクトについて、

    pCube1|pCubeShape1
    pCube1|pCubeShape1

を返します。

解決方法

MSelectionList::getDagPath() は、リスト内の各オブジェクトについて、正しい dagPath を返します。

カメラを作成した直後、MFnCamera::setEyePoint をコールする

次のように、カメラを作成した直後、MFnCamera::setEyePoint をコールした場合

    fnCamera.create ();
    fnCamera.setEyePoint ( MPoint (sceneCamera->eyePt[0], sceneCamera->eyePt[1], sceneCamera->eyePt[2]) );

この呼び出しは失敗します。これは、MFnCamera::create により、正しくノードのパス ポインタ変数が設定されないからです。

解決方法

以下のようなコードでこの問題を回避することができます。

    MFnCamera fnCamera;
    MDagPath cameraPath;
    MDagPath::getAPathTo (fnCamera.create(), cameraPath);
    fnCamera.setObject (cameraPath);
    fnCamera.setEyePoint (...);

コンテキスト プラグインをアンロードすると Maya がクラッシュする

シーンにコンテキストのインスタンスが存在するときに、コンテキスト プラグインをアンロードすると、Maya はクラッシュします。これには marqueeTool や moveTool などの開発キットのサンプル コンテキスト ツールが含まれます。

解決方法

クラッシュを防ぐには、このプラグインを使用して作成したコンテキストの名前を覚えておき、プラグインをアンロードする前に、まず、「file -f new」を実行し、続けて「deleteUI contextName」を実行します。

起動時、Maya がカスタム MEL コマンド プラグインを認識しない

Maya の前のバージョンでは、起動 MEL スクリプトから、API プラグイン経由で実装されたカスタム MEL コマンドをコールすることが可能でした。しかし、プラグインは Maya の起動時に最初にロードされるオブジェクトの 1 つなので、これにより初期化時に問題が発生します。Maya 4.0 以降、API プラグインのロードは Maya の起動処理の後半に行われるようになったため、すでにロードされているプラグインに依存している起動 MEL スクリプトは正しく動作しなくなります。

解決方法

2 つのオプションがあります。次のいずれかを実行します。

- 起動スクリプトでプラグインを手動でロードしてから、「eval」を使用してカスタム プラグイン コマンドにすべてのコールをラップします。
- 起動スクリプトでは、evalDeferred を使用してコマンドへのコールを遅らせ、プラグインを最初にロードすることができます。