現在のコンテキストを使用して評価する

Maya 2018 以降、現在の評価コンテキストの概念を使用して、コードのコンテキスト評価を効率化できるようになりました。

以前のバージョンの Maya では、標準以外のコンテキストで評価する場合、そのコンテキストをメソッドに渡す必要があります。例:

MPxTransform::getTranslation( MSpace::Space, const
MDGContext&, MStatus* );

これにより、コンテキストがさらに次のメソッドに渡されて、コンテキストを渡すメソッドが長いチェーンを形成することがあります。現在の評価コンテキストという概念と新しいユーティリティが導入されたことに伴い、このチェーンを作成する必要がなくなりました。次の操作を実行できるようになりました。

コンテキスト パラメータを含む既存のメソッドを引き続き使用することができますが、コンテキストに依存しないバリエーションを使用することをお勧めします。例:

return myTransform.getTranslation(MSpace::kTransform, myNewContext, &status);

機能的に以下と同等になりました。

                {
                                MDGContextGuard ctxGuard( myNewContext );
                                return myTransform.getTranslation( MSpace::kTransform, &status );
                }

ほとんどのコードは現在のコンテキストで評価する必要があるため、通常の場合、myNewContext は不要です。例外は、代わりのコンテキストで意図的に評価される時間ベースのキャッシュとゴースト化などです。

別のコンテキスト内で呼び出される長いシーケンスがある場合は、現在のコンテキストのスコープ付き変更を使用することができます。例:

                {
MDGContextGuard tempContext( myDifferentContext );
                                firstPlug.getValue( value1 );
                                secondPlug.getValue( value2 );
                                thirdPlug.getValue( value3 );
                …
}

複数のメソッド内をコンテキストが通過しないようにします。マルチスレッド評価に対するコードの安全性を維持するには、常に現在のコンテキストを使用します。