Registers a new type of CustomProperty. To create instances of this CustomProperty, use SceneItem.AddProperty.
oReturn = PluginRegistrar.RegisterProperty( Name ); |
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"). |
/* "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 ; } } |