Maya .NET API で IEnumerable および LINQ を使用する

Maya .NET API の多くのクラスに IEnumerable<T>インタフェースが実装されています。一部の例には、MCGeometryMCDagMCDependencyGraph などのヘルパー クラスに加えて、MColorArrayMFloatPointArray などのさまざまな Maya 配列クラスも含まれています。IEnumerable<T>を実装しているすべてのクラスを表示するには、オブジェクト ブラウザを使用して GetEnumerator() を検索します。

GetEnumerator() 関数(IEnumerable を実装する関数を含む)を実装し、IEnumerator インタフェースに準拠しているクラスを返す任意のクラスで foreach キーワードを使用できます。たとえば、シーン内で選択したオブジェクトを使用して、次のコードを実行すると、選択したすべてのオブジェクトのパス名が表示されます。

foreach (var s in MGlobal.activeSelectionList)
           MGlobal.displayInfo(s.partialPathName);

System.Linq ネームスペースを読み込むと、IEnumerable<T>を実装しているすべてのコレクションで LINQ 拡張メソッドを使用できます。たとえば、次のコードでは、選択したすべてのメッシュが返されます。

var meshes = MGlobal.activeSelectionList.Where(p => p.hasFn(MFn.Type.kMesh)).Select(p => new MFnMesh(p)); 

これは、「メソッド構文」と呼ばれます。LINQ でサポートされるその他の構文は、「クエリー構文」と呼ばれます。次のコードは、前のコードと同じです。

var meshes = from p in MGlobal.activeSelectionList where p.hasFn(MFn.Type.kMesh) select new MFnMesh(p);

その他の LINQ の使用例については、Developer Kit インストールの devkit¥dotnet¥wpfexamples フォルダにある DAGExplorer のサンプルを参照してください。