コード内でのカスタム フィルタの使用

 
 
 

カスタム フィルタは、他の 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 によって取得されます。