SPDL Logic Examples

The following examples are provided in this section:

Example: Triggering OnChanged() by the user changing a value

Example: Disabling parameters based on conditions

Example: Getting the name of the inspected preset

Example: Displaying a message when the user switches tabs

Example: Triggering OnChanged() by the user changing a value

When a user sets (or clears) the check box labelled "Use Feature A?", then this OnChanged event handler is triggered, making the following changes:

• Enables (or disables) the parameters for Parameter A.

• Disables (or enables) the mutually exclusive Parameter B.

PropertySet "OnChangeDemo_pset"
{
   Parameter "out" output
   {
       GUID = "{248FCEFE-DBA6-412A-9A8F-17A96D97F1E3}";
       Type = color;
   }
   Parameter "ParameterA" input
   {
       GUID = "{379493F5-B9E4-4E09-92DE-923C65DCC119}";
       Type = scalar;
       Value = 0.0;
   }
   Parameter "ParameterB" input
   {
       GUID = "{3F61E7BD-AEA5-41D1-8D41-8B7BD6976847}";
       Type = scalar;
       Value = 0.0;
   }
   Parameter "UseParameterA" input
   {
       GUID = "{D30A583A-ED9C-4065-85F8-436401DD556A}";
       Type = boolean;
       Value = on;
   }
}

Defaults
{
   UseParameterA
   {
       Name = "Use Feature A?";
   }
}

Layout "Default"
{
   ParameterA;
   ParameterB;
   Group "Usage"
   {
       UseParameterA;
   }
}

BeginScript
   ' Notice how we access the parameter value via the default Parameter.Value
   ' property (see How Parameters Behave in The Logic Section)
Sub UseParameterA_OnChanged()
       ParameterA.Enable UseParameterA 
       ParameterB.Enable Not UseParameterA 
   End Sub

   ' To properly set the initial enable states (as the property page opens), 
   ' the OnInit event handler must call the UseParameterA_OnChanged event handler.
   Sub OnInit()
       ParameterA.Enable false
       UseParameterA_OnChanged
   End Sub
EndScript

Example: Disabling parameters based on conditions

Suppose you want to implement some simple logic for the controls on a property page. For example, based on the value of one control, you may want to hide or disable other controls.

You can update the UI state of properties using a Logic section in a SPDL file. A Logic section contains a script that is executed whenever a property value changes.

For example, suppose you have three parameters:

UseLight (boolean)

LightDistance (scalar)

LightSpread (scalar)

Here’s how you might control the UI based on certain property values:

PropertySet "DisablingDemo_pset"
{
   Parameter "out" output
   {
       GUID = "{248FCEFE-DBA6-412A-9A8F-17A96D97F1E3}";
       Type = color;
   }
   Parameter "LightDistance" input
   {
       GUID = "{379493F5-B9E4-4E09-92DE-923C65DCC119}";
       Type = scalar;
       Value = 1.0;
   }
   Parameter "LightSpread" input
   {
       GUID = "{3F61E7BD-AEA5-41D1-8D41-8B7BD6976847}";
       Type = scalar;
       Value = 1.0;
   }
   Parameter "LightAngle" input
   {
       GUID = "{62B67913-8FB7-485F-BF41-128B645735FB}";
       Type = scalar;
       Value = 0.0;
   }
   Parameter "UseLight" input
   {
       GUID = "{D30A583A-ED9C-4065-85F8-436401DD556A}";
       Type = boolean;
       Value = on;
   }
}

BeginScript
   ' Notice how we access the parameter values via the default Parameter.Value
   ' property (see How Parameters Behave in The Logic Section)
   Sub UseLight_OnChanged()
       LightDistance.Enable( UseLight )
       LightSpread.Enable( UseLight )
       LightAngle.Enable( UseLight )
   End Sub

   Sub LightDistance_OnChanged()
       If LightDistance > 55.0 Then
          LightAngle = LightSpread / 3.14
       End If
       Application.LogMessage "LightAngle = " & LightAngle
   End Sub

   Sub LightSpread_OnChanged()
       If LightSpread > 35.0 Then
          LightAngle = LightSpread / 2
       End If
       Application.LogMessage "LightAngle = " & LightAngle
   End Sub

   ' Hide the LightAngle parameter 
   Sub OnInit()
       LightAngle.Show false
   End Sub
EndScript

Example: Getting the name of the inspected preset

The Logic section has access to the PPG.Inspected property. It returns a collection of property page objects being expected. Normally this collection will contain only one object (a CustomProperty); however, the collection will contain more than one object if the page is in multi-edit mode.

This example displays the name(s) of the inspected object(s) when the user clicks the WhoAmI button.

BeginScript
   Sub OnInit()
       ' PPG is a object that always available in the event handlers
       Application.LogMessage "Init PPG for " & PPG.Inspected.GetAsText & " Objects"
       ' INFO : Init PPG for Sources.Materials.DefaultLib.Scene_Material.Phong.InspectObjectsDemo Objects
   End Sub

   Sub WhoAmI_OnClicked()
       Application.LogMessage "I am " & PPG.Inspected.GetAsText
       ' INFO : I am Sources.Materials.DefaultLib.Scene_Material.Phong.InspectObjectsDemo
   End Sub
EndScript

Example: Displaying a message when the user switches tabs

This example demonstrates how to trap the OnTab event. As with other event handlers, the property’s parameters and PPG object are available, so you more than just messaging logging is available if desired.

Layout "Default"
{
   Tab "Greasy"
   {
       ' ...
   }

   Tab "Gooey"
   {
       ' ...
   }
}

BeginScript
   Sub Greasy_OnTab()
       Application.LogMessage "Factoring greasyness..."
   End Sub

   Sub Gooey_OnTab()
       Application.LogMessage "Factoring gooeyness..."
   End Sub
EndScript

 



Autodesk Softimage v7.5