プロキシ パラメータはリンクされたカスタム パラメータの一種ですが、根本的な違いがあります。 リンクされたカスタム パラメータはターゲット パラメータ(つまり、カスタム パラメータのリンク先のパラメータ)を操作しますが、この 2 つのパラメータは独立した別々のパラメータです。 これは、キーフレームを設定する際に、操作されるパラメータではなくカスタム パラメータにキーを設定することを意味します。
実際のパラメータを操作する、または特定のパラメータのみを抽出し、カスタム プロパティ エディタを作成するには、 プロキシ パラメータを使用します。
カスタム パラメータとは異なり、プロキシ パラメータは、実際にはパラメータのクローンであり、シーン内の別のパラメータのデータを反映します。 プロキシ パラメータを操作すると、実際のパラメータを操作した場合と同じ結果を得られます(値の変更、キーの保存など)。
ProxyParameter オブジェクトの作成には CustomProperty.AddProxyParameter メソッドまたは AddProxyParam コマンドを使用できます。このオブジェクトを作成すると、(ProxyParameter.MasterParameter プロパティを使用して)マスタ パラメータにアクセスできます。それ以外の点では、プロキシ パラメータの検索方法は通常のパラメータの検索手順と同じです。
'----------------------------------------------------- '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 コールバックで定義されていないか確認し、定義されていない場合は定義してからページを更新します。
この例では、基本的に前の 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(); }