プロパティ フィルタの記述

 
 
 

3D ビューにおいてプロパティ フィルタは、コンストレイント、ジョイント、およびオペレータの選択をフィルタできるフィルタです。

スケマティック ビューでは、マテリアル(およびパーティクル タイプ)の選択範囲をプロパティ フィルタでフィルタできます。 スケマティック ビュー内のコンストレイントおよびオペレータ リンクの選択範囲は、プロパティ フィルタでは変更されません。ユーザがスケマティック ビューでリンクを選択しても、フィルタは呼び出されません。

プロパティ フィルタは、エクスプローラ ビューでは利用できません。

非アクティブなコンストレイントをプロパティ フィルタで除外し、アクティブなコンストレイントだけが選択されるようにする例を、次に示します。

function ActiveConstraints_Match( oContext )
{
	// Get the Constraint object
	var oObject = oContext.GetAttribute( "Input" );
	var bMatch = false;

	// Check if the object is an active constraint
	if ( oObject.BelongsTo( siConstraintFamily ) && oObject.Parameters.Item("active").Value == true )
	{
		bMatch = true;
	}

	return( bMatch );
}

コンストレイント、ジョイント、およびオペレータをプロパティ フィルタで処理するには、3D ビュー内で特定の[カメラの表示/非表示]オプションを設定する必要があります。

3D ビューで任意の場所をクリックすると、シーン内の各コンストレイント、ジョイント、およびオペレータ用の Match コールバックが起動しますが、Softimage で選択されるのはプロパティ(ユーザがクリックした場合)だけです。

また、プロパティ フィルタを使用して、そのプロパティに基づいてオブジェクトを選択することもできます。 たとえば、Softimage に組み込みの Local Material プロパティ フィルタでは、ローカル マテリアルを持つオブジェクトが選択されます。 Softimage に付属している Local Material フィルタは VBScript で記述されています。以下に示すのは、JScript バージョンです。

function MyLocalMaterial_Match( oContext )
{
	// Get the input object, which could a Primitive, X3DObject, Constraint, Joint, ...
	var oInput = oContext.GetAttribute( "Input" );

	// Return value
	var bMatch = false;

	// Try to get a 3D object from the input object
	var o3DObject = Get3DObject( oInput );

	// If we have a 3D object, check its local properties for a material
	if ( o3DObject != null && classname( o3DObject ) == "X3DObject" )
	{
		for (var enumerator = new Enumerator( o3DObject.LocalProperties ) ; !enumerator.atEnd(); enumerator.moveNext())
		{
			var oProperty = enumerator.item();
			if ( classname( oProperty ) == "Material" )
			{
				bMatch = true;
				break;
			}
		}

	}

	return ( bMatch );
}

プロパティ フィルタは、どのタイプのオブジェクトも処理できなければなりません。Softimage から取得されるオブジェクトが必ずしも 3D オブジェクトであるとは限らないためです。 たとえば、3D ビューでユーザがマウスを使用してオブジェクトを選択した場合、フィルタで取得されるのは X3DObjects ではなく Primitive オブジェクトです。 また、シーン内のコンストレイン、ジョイント、およびオペレータのそれぞれに対して、Match コールバックが呼び出されます。

function Get3DObject( oObject )
{
	var o3DObject = null;

	if ( classname( oObject ) == "X3DObject"  )
	{
		o3DObject = oObject ;
	}
	else if ( classname( oObject ) == "Primitive" )
	{
		o3DObject = oObject.Parent;
	}

	return( o3DObject );
}