RegisterProperty (PluginRegistrar)

Description

Registers a new type of CustomProperty. To create instances of this CustomProperty, use SceneItem.AddProperty.

Scripting Syntax

    PluginRegistrar.RegisterProperty( Name )

C# Syntax

    PluginItem PluginRegistrar.RegisterProperty( String in_name );

Parameters

Parameter | Type | Description
Name | String | The name of the property (actually, the name of the PluginItem object created for this property). Instances of the property have this name as their SIObject.Type. It should begin with a letter and contain only letters, numbers and the underscore character. It is recommended to use a prefix based on your company or plug-in name. If a property name contains spaces (for example, "My Custom Property"), the callback function names must omit the spaces (for example, "MyCustomProperty_DefineLayout"). Property names must be unique. To avoid naming conflicts, it is recommended to use a prefix based on your company name or the plug-in name (for example, "ACME_TornadoKit_Configuration").

Return Value

PluginItem

Examples

JScript Example

    /*
       "SimpleProp"
       Example of a script-based Custom Property plug-in

       To try out this example, use the Plug-in Tree to create an empty plug-in,
       replace the generated code with the example code, and save the file. Softimage
       will automatically load the plug-in, and you can create an instance of the
       property by right-clicking the property in the Plug-in Tree and choosing
       Create Property.

       (You can also load the plug-in without restarting Softimage - see
       XSIApplication.LoadPlugin)
    */

    function XSILoadPlugin( in_reg )
    {
       // Called on startup of Softimage to defined
       // what is contained in the script.  (We could potentially
       // implement many PluginItems in the same script)

       in_reg.Author = "Softimage SDK Team" ;
       in_reg.Name = "SDK Example - Simple Custom Property" ;

       in_reg.Major = 1 ;
       in_reg.Minor = 1 ;

       in_reg.RegisterProperty( "SimpleProp" ) ;

       return true ;
    }

    function SimpleProp_Define( io_Context )
    {
       //Called when a new instance of the Custom Property is created
       //Define is not called when the plug-in is updated or reloaded.
       var oCustomProperty = io_Context.Source

       oCustomProperty.AddParameter3( "U", siDouble, 0.3, 0.0, 1.0  ) ;
       oCustomProperty.AddParameter3( "V", siDouble, 0.75, 0.0, 1.0  ) ;
       oCustomProperty.AddParameter3( "LockUV",siBool,false,null,null,false ) ;
       oCustomProperty.AddParameter3( "ShowInfo",siBool,false,null,null,false ) ;

       // Some static text that we will dynamically show and hide
       strInfo = "This is an sdk example showing a Custom\r\n" +
                "Property that is defined inside a script-based\r\n" +
                "plug-in." ;
       var oParameter = oCustomProperty.AddParameter3( "InfoStatic", siString ) ;
       oParameter.Show( false ) ;
       oParameter.Value = strInfo ;
    }

    function SimpleProp_DefineLayout( io_Context )
    {
       // Called once per Softimage session, or after
       // a call to XSIUtils.Reload

       var oPPGLayout = io_Context.Source

       //Important first step is to erase any existing contents
       oPPGLayout.Clear() ;

       oPPGLayout.AddGroup( "Data" ) ;

       oPPGLayout.AddRow() ;
       var oItem = oPPGLayout.AddItem( "U" ) ;
       oItem.SetAttribute( siUIThumbWheel, true ) ;
       oItem.LabelMinPixels = 20 ;
       oItem.LabelPercentage = 1 ;

       oItem = oPPGLayout.AddItem( "V" ) ;
       oItem.SetAttribute( siUITreadmill, true ) ;
       oItem.LabelMinPixels = 20 ;
       oItem.LabelPercentage = 1  ;

       oPPGLayout.EndRow() ;

       oPPGLayout.AddItem( "LockUV", "Lock UV" ) ;

       oPPGLayout.EndGroup() ;

       oPPGLayout.AddGroup() ;

       // The InfoStatic is always in the layout,
       // but it will not appear if siNotInspected
       // capability has been set by calling Parameter.Show(false)
       oItem = oPPGLayout.AddItem( "InfoStatic", "", siControlStatic ) ;
       oItem.SetAttribute( siUIValueOnly, true ) ;

       oPPGLayout.AddItem( "ShowInfo", "Show Info" ) ;
       oPPGLayout.EndGroup() ;

       oPPGLayout.AddButton( "Done" ) ;
    }

    //
    // Logic Code - these callbacks are called when
    // events happen in the user interface
    //
    // The syntax is basically the same as SPDL logic
    // but notice how each function uses a prefix based on the
    // Custom Property that we registered, i.e.
    // "SimpleProp_"
    //

    function SimpleProp_OnInit()
    {
       //Called when the UI first appears.
       Application.LogMessage( "Someone is inspecting " +
           PPG.Inspected(0).FullName ) ;
    }

    function SimpleProp_Done_OnClicked()
    {
       // See the documentation for
       // PPG.Close for more info about this
       // technique.

       // Self destruct the property page
       DeleteObj( PPG.Inspected(0) ) ;

       // Close the property page
       PPG.Close() ;
    }

    function SimpleProp_ShowInfo_OnChanged()
    {
       // Toggle the visibility of the static text
       PPG.InfoStatic.Show( PPG.ShowInfo.Value ) ;

       // It isn't strictly necessary to call this for
       // simple cases of hiding and showing controls,
       // but it ensures that the property page is fully
       // redrawn and resized.
       PPG.Refresh() ;
    }

    // The following three logic routines force both
    // parameters to have the same value
    function SimpleProp_U_OnChanged()
    {
       if ( PPG.LockUV.Value )
       {
           // Note: Changing the value from
           // within the logic code will not
           // result in SimpleProp_V_OnChanged
           // being called.  So there is
           // minimal risk of infinite loops.
           PPG.V.Value = PPG.U.Value ;
       }
    }

    function SimpleProp_V_OnChanged()
    {
       if ( PPG.LockUV.Value )
       {
           PPG.U.Value = PPG.V.Value ;
       }
    }

    function SimpleProp_LockUV_OnChanged()
    {
       if ( PPG.LockUV.Value )
       {
           // When locking is enabled make sure
           // that the two values snap to the same,
           // value.
           avg = ( PPG.U.Value + PPG.V.Value  ) / 2 ;
           PPG.U.Value = avg ;
           PPG.V.Value = avg ;
       }
    }

See Also

Plugin.Items | SceneItem.AddProperty | CustomProperty | PPGLayout
PPG | Definition Callbacks for Properties |  |

Autodesk Softimage v7.5