PPG オブジェクトと PPGLayout オブジェクトを使用して、パラメータ値の変更、パラメータの追加と削除、およびプロパティ ページ上のコントロールのレイアウト修正を動的に実行できます。
基本パラメータ付きコントロールについては、パラメータ値を直接更新することができます。 ほとんどの場合、新しい値はすぐプロパティ ページに表示されます。
この例外は、標準の数値コントロールを指定して siUISyncSlider 属性を false に設定した場合です。 その場合、レイアウトを更新しない限り、新しい値が表示されません。
パラメータの戻り値は、その基本パラメータのタイプに応じて、基本パラメータのデータ値またはオブジェクト インスタンスのどちらかに決定されます。 たとえば、FCurve パラメータは FCurve のインスタンスを返し、ブール演算パラメータは True または False のいずれかを返します。
基本パラメータから値を取得するには、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 セクションで定義されているコールバック内にあります)を使用すると、PPG.Inspected プロパティ(CustomProperty オブジェクトを返します)を介して基本カスタム プロパティにアクセスすることができます。
レイアウト コントロールに関連付けられているパラメータを削除した場合は、レイアウトを更新してもコントロールは表示されません。 同様に、新しいパラメータを追加したとしても、レイアウトを更新しない限り、そのパラメータがプロパティ ページに表示されません。
PPG オブジェクトを使用すると、PPG.PPGLayout プロパティ(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(); }