カスタム フィルタは、他の Softimage フィルタと同様、スクリプティング内でも C++ コード内でも使用できます。 カスタム フィルタに使用できるコマンドとしては、たとえば PickElement や SIFilter などがあります。
var cloList = SIFilter( Application.Selection, "My3DObjectFilter" );
こうした SIFilter への呼び出しによって、選択リスト内の各オブジェクト用 My3DObjectFilter_Match コールバックが起動されます。 選択範囲にある 3D オブジェクトを Context オブジェクトにマーシャリングする処理は、Match コールバックが要求し、Softimage で代行されます。 選択範囲に 3D オブジェクト以外のもの(たとえば、ポリゴンやエッジ)が含まれている場合、X3DObject の親が取得されて Match に渡されます。 この処理内容は 3D オブジェクト フィルタだけに当てはまります。それ以外のタイプのフィルタでは、選択範囲にあるものがすべて取得されます。
カスタム フィルタは、Application.Filters コレクションに組み込まれているので、次のようにしてオブジェクト モデルにカスタムフィルタを使用できます。
var oFilter = Application.Filters("MyPolygonFilter"); var cloSubComponents = oFilter.Subset( Application.Selection ); // For each object with selected polygons that matched the filter for (var objEnum = new Enumerator( cloSubComponents ) ; !objEnum.atEnd(); objEnum.moveNext() ) { var oObject = objEnum.item(); // Do something with each polygon for (var polyEnum = new Enumerator( oObject.SubComponent.ComponentCollection ) ; !polyEnum.atEnd(); polyEnum.moveNext() ) { var oPoly = polyEnum.item(); // Do something } }
Subset を使用した場合、Subset コールバック コンテキスト内に Selection オブジェクトが格納され、選択されたものがすべて Subset によって取得されます。 同じ処理は、オブジェクトのコレクションを使用して oFilter.Subset()を呼び出した場合にも実行されます。コレクションがそのままコールバック コンテキストに格納され、コレクション内のものが何でも Subset によって取得されます。