プロキシ パラメータ

 
 
 

プロキシ パラメータはリンクされたカスタム パラメータの一種ですが、根本的な違いがあります。 リンクされたカスタム パラメータはターゲット パラメータ(つまり、カスタム パラメータのリンク先のパラメータ)を操作しますが、この 2 つのパラメータは独立した別々のパラメータです。 これは、キーフレームを設定する際に、操作されるパラメータではなくカスタム パラメータにキーを設定することを意味します。

実際のパラメータを操作する、または特定のパラメータのみを抽出し、カスタム プロパティ エディタを作成するには、 プロキシ パラメータを使用します。

カスタム パラメータとは異なり、プロキシ パラメータは、実際にはパラメータのクローンであり、シーン内の別のパラメータのデータを反映します。 プロキシ パラメータを操作すると、実際のパラメータを操作した場合と同じ結果を得られます(値の変更、キーの保存など)。

注:

プロキシの詳細については、『ユーザ ガイド』を参照してください。

プロキシ パラメータを作成してアクセスする

ProxyParameter オブジェクトの作成には CustomProperty.AddProxyParameter メソッドまたは AddProxyParam コマンドを使用できます。このオブジェクトを作成すると、(ProxyParameter.MasterParameter プロパティを使用して)マスタ パラメータにアクセスできます。それ以外の点では、プロキシ パラメータの検索方法は通常のパラメータの検索手順と同じです。

VBScript の例: プロキシ パラメータを作成して検索する

'-----------------------------------------------------
	'SETUP
'
' Set up scene with a null, a cube and a cpset
' containing a proxy to the cube.sclx parameter
NewScene , false
set root = ActiveSceneRoot
root.AddNull
root.AddGeometry "Cube", "MeshSurface"

'-----------------------------------------------------
	'CREATION
'
set cpset = root.AddCustomProperty( "proxy_test" )
cpset.AddProxyParameter "cube.kine.local.sclx"


'-----------------------------------------------------
	'SEARCH
'
' Get a pointer to the proxy parameter and return its info
' NB: The AddProxyParameter method returns the parameter, so this would not
' normally be necessary, this is just to demonstrate finding existing proxies
if TypeName(cpset) <> "Nothing" then
	bFound = false
	for each pxy in cpset.Parameters
		if TypeName(pxy) = "ProxyParameter" then
			bFound = true
			LogMessage pxy.FullName & " is linked to " & pxy.MasterParameter.FullName
		end if
	next
	if Not(bFound) then
		LogMessage "Could not find a proxy parameter on cpset."
	end if
else
	LogMessage "Could not find 'proxy test' custom pset."
end if

'-----------------------------------------------------
	'OUTPUT
'
'INFO : "proxy_test.cube_sclx is linked to cube.kine.local.sclx"

自己インストール プラグインのプロキシ パラメータ

自己インストール カスタム プロパティでプロキシ パラメータを使用することもできます。 OnInit コールバックで定義する代わりに、OnInit コールバックで定義されていないか確認し、定義されていない場合は定義してからページを更新します。

JScript の例: 自己インストール カスタム プロパティでプロキシ パラメータを使用する

この例では、基本的に前の VBScript の例と同じ処理が実行されますが、自己インストール カスタム プロパティ プラグインの内部で行われます。 プロパティ ページを 2 回以上開くと、新しいプロキシ パラメータは作成されないので注意してください。

//-----------------------------------------------------
//	SETUP
//
// Set up scene with a null, a cube and a cpset containing a proxy to the cube.sclx parameter
NewScene( null, false );
var root = Application.ActiveSceneRoot;
root.AddNull();
root.AddGeometry( "Cube", "MeshSurface" );

//-----------------------------------------------------
//	SELF-INSTALLING PROPERTY 
//
// Write the helper functions under CREATION & SEARCH below to the plug-in file
var fso = XSIFactory.CreateObject( "Scripting.FileSystemObject" );
var sFilename = XSIUtils.BuildPath( Application.InstallationPath(siUserPath),
	"Application", "Plugins", "ProxyParamDemo.js" );
var ts = fso.CreateTextFile( sFilename, true /* overwrite old ones */ );
ts.Write( XSILoadPlugin.toString() + ProxyParamDemo_Define.toString() + 
	ProxyParamDemo_DefineLayout.toString() + ProxyParamDemo_OnInit );

// Load the plug-in and then open the property page (to fire the OnInit callback)
var oPlugin = Application.LoadPlugin( sFilename );
var oCusProp = root.AddProperty( oPlugin.Items(0).Name );
var bCancel = InspectObj( oCusProp, "", "ProxyParamDemo", siModal, false );


//-----------------------------------------------------
//	OUTPUT
//
//INFO : ProxyParamDemo.cube_sclx is linked to cube.kine.local.sclx


//-----------------------------------------------------
//	CREATION & SEARCH
//
function XSILoadPlugin( in_reg )
{
	in_reg.Author = "Demo";
	in_reg.Name = "ProxyParamDemoPlugin";
	in_reg.Major = 1;
	in_reg.Minor = 0;

	in_reg.RegisterProperty("ProxyParamDemo");
	return true;
}

function ProxyParamDemo_Define( in_ctxt )
{
	var oCustomProperty = in_ctxt.Source;
	return true;
}

function ProxyParamDemo_DefineLayout( in_ctxt )
{
	var oLayout = in_ctxt.Source;
	oLayout.Clear();
	return true;
}

function ProxyParamDemo_OnInit()
{
	// Get the custom property
	var oCustomProperty = PPG.Inspected.Item(0);
	
	// Does the proxy parameter already exist? If not, create it
	if ( oCustomProperty.Parameters.Count < 1 ) {
		// Make sure the cube actually exists
		var oCube = Application.ActiveSceneRoot.FindChild( "", siCubePrimType );
		if ( oCube ) {
			oCustomProperty.AddProxyParameter( oCube.sclx );
		} else {
			Application.LogMessage( "Could not create proxy parameter because the cube does not exist.", siWarning );
		}
	}
	
	// Check each parameter to find the proxy
	var eParams = new Enumerator( oCustomProperty.Parameters );
	for ( ; !eParams.atEnd(); eParams.moveNext() ) {
		var oProxy = eParams.item();
		if ( oProxy.IsClassOf(siProxyParameterID) ) {
			Application.LogMessage( oProxy.FullName + " is linked to " + oProxy.MasterParameter.FullName );
		}
	}
	
	// Refresh the layout so that it appears
	PPG.Refresh();
}