PPG オブジェクトおよび PPGLayout オブジェクトを使用して、パラメータ値の変更、パラメータの追加/削除、およびプロパティページ上のコントロールのレイアウト変更を動的に実行できます。
基本パラメータ付きコントロールについては、パラメータ値を直接更新することができます。 ほとんどの場合、新しい値はすぐプロパティ ページに表示されます。
これに対する例外は、標準の数値コントロールを指定して siUISyncSlider 属性を false に設定した場合です。その場合、レイアウトを更新しない限り、新しい値が表示されません。
パラメータの戻り値は、その基本パラメータのタイプに応じて、基本パラメータのデータ値またはオブジェクト インスタンスのどちらかに決定されます。 たとえば、ブール型パラメータが true または false のどちらかを返すのに対して、FCurve パラメータは FCurve のインスタンスを返します。
基本パラメータから値を取得するには、PPG オブジェクト(プロパティ ページ Logic セクションのコンテキスト内のグローバル変数)を使用します。PPG オブジェクトを使用してパラメータにアクセスすることができ、アクセスしたパラメータを使用してパラメータ値を取得することができます。
たとえば、DaisyChain という文字列パラメータを作成して、パラメータ値が変更されるたびにパラメータ値を記録したい場合があります。 スクリプトの主要箇所を次に示します。
// Create the underlying parameters (eg., under the _Define callback) var oCusProp = in_Context.Source oCusProp.AddParameter3( "DaisyChain", siString, "Wheelbarrow6" ); // <snip> // Create the property page layout (eg., under the _DefineLayout callback) var oPPGLayout = in_Context.Source oPPGLayout.AddItem( "DaisyChain" ); // <snip> // Event handler must be attached to logic function DaisyChain_OnChanged() { LogMessage( PPG.DaisyChain.Value ); }
行コントロール以外のコントロールはそれぞれ、PPGLayout オブジェクトから名前でアクセスでき、一般的にいくつかの UI コンポーネント(たとえば、ラベルや幅)を持ちます。レイアウトを介して、または(PPGLayout.Item を使用して)コントロールに名前で直接アクセスして、すべてのコントロールを列挙できます。
各コントロールにアクセスできれば、それらのコントロールの属性にアクセスできます。これにより、外観(つまり、レイアウト)を制御できます。ただし、属性のタイプはきわめて多様です。 たとえば、属性によってはコントロールの高さ、幅、および一般的スタイルを制御するものもあれば、Softimage を更新するかどうかをインタラクティブに決定するものもあります。 また、コントロールに表示されるビットマップの場所を指定する属性もあります。 使用可能な項目属性の完全なリストについては、「コントロール属性を設定する」のセクションの冒頭を参照してください。
コントロールに属性を設定するには、PPGItem.SetAttribute メソッドを使用します。SetAttribute は、設定する属性の名前と使用する値の、2 つの引数を取ります。PPGItem オブジェクトの取得方法は、開発プロセスにおける現在のステージに応じて決定されます。レイアウトを定義する際には、作成した項目へのポインタを取得することができます。Logic では PPG(グローバル)オブジェクトを使用して PPGLayout を取得し、そこから PPGItem オブジェクトを取得する必要があります。
プロパティ ページの Logic セクションを介してレイアウトを変更する場合、PPG.Refresh メソッドを使用して、画面上のレイアウトを忘れずに更新してください。
たとえば、ユーザがボタンをクリックしたときに別のイメージにインタラクティブに変更できるビットマップ コントロールを作成したいとします。 スクリプトの主要箇所を次に示します。
// Create the underlying parameters (eg., inside the Define callback) var oCusProp = in_Context.Source oCusProp.AddParameter3( "CompanyLogo", siString ); // <snip> // Create the property page layout (eg., under the _DefineLayout callback) var oPPGLayout = in_Context.Source // Need to set up the location of the bitmap image when layout is defined var oItem = oPPGLayout.AddItem( "CompanyLogo", "", siControlBitmap ); oItem.SetAttribute( siUIFilePath, "C:\temp\images\pauper.bmp" ); oPPGLayout.AddButton( "ChgImg", "Change Image" ); // <snip> // Event handler must be attached to logic function ChgImg_OnClicked() { // Get a pointer to the control as a PPGItem var oCtrl = PPG.PPGLayout.Item( "CompanyLogo" ); if ( oCtrl.GetAttribute(siUIFilePath) == "C:\temp\images\pauper.bmp" ) { oCtrl.SetAttribute( siUIFilePath, "C:\temp\images\prince.bmp" ); } else { oCtrl.SetAttribute( siUIFilePath, "C:\temp\images\pauper.bmp" ); } // Finish by refreshing the layout PPG.Refresh(); }
また、プロパティ ページを検証すると同時に、カスタム プロパティ セットのパラメータを追加、削除、または再定義することもできます。 PPG オブジェクト(Logic セクションに対して定義されたコールバック内部で常に使用可能)では、CustomProperty オブジェクトを戻り値とする PPG.Inspected プロパティを介して、基本カスタムプロパティにアクセスできます。
レイアウト コントロールに関連付けられているパラメータを削除した場合は、レイアウトを更新してもコントロールは表示されません。 同様に、新しいパラメータを追加したとしても、レイアウトを更新しない限り、そのパラメータがプロパティ ページに表示されません。
PPG オブジェクトを使用すると、PPGLayout オブジェクトを戻り値とする PPG.PPGLayout プロパティを介して、関連するレイアウトにアクセスできます。
次に、自己インストールプラグインのサンプルを示します。このサンプルでは、ユーザが AddField ボタンをクリックすると処理中に文字列フィールドを追加でき、ロジックが装備されます(ただし、機能的には明らかに脆弱です)。
function MyProperty_AddField_OnClicked() { // Get the CustomProperty and PPGLayout objects var oCusProp = PPG.Inspected(0); var oLayout = PPG.PPGLayout; // Add a new string parameter to the CustomProperty sNewName = "Item_" + oLayout.Count.toString(); oCusProp.AddParameter3( sNewName, siString ); // Add a new string control to the PPGLayout with logic oLayout.AddItem( sNewName ); oLayout.Logic = oLayout.Logic.toString() + "function " + sNewName + "_OnChanged() {\n" + " Application.LogMessage( PPG." + sNewName + ".Value );\n" + "}"; // Redraw the page PPG.Refresh(); }