All C# plug-ins for Softimage define self-installing custom plug-in items available in the Softimage Object Model. These include commands, events, filters, menus, operators and properties. Custom Display and GraphicSequencer plug-in items are not available to C# because they are only implemented in the C++ API.
The sample code in this section is generated automatically by one of the Softimage plug-in wizards and it is highly recommended to use the wizards to set up your plug-ins. See Creating C# Plug-ins for more details.
To get a hook into Softimage, you make sure you include the XSIOM (object model) assembly and then create a class to register the plug-in in Softimage (XSIPlugin in the example below). Each plug-in item is defined within its own class and you use the name of the plug-in item class to register the plug-in item:
using System; using System.Reflection; using XSIOM; // Softimage Object model assembly public class XSIPlugin { public bool Load( PluginRegistrar in_reg ) { in_reg.Author = "Kilroy"; in_reg.Name = "MyCSharpPlugin"; in_reg.Major = 1; in_reg.Minor = 0; in_reg.RegisterCommand( "MyCSharpCmd", null ); in_reg.RegisterMenu( siMenuAnchorPoints.siMenuMainTopLevelID, "MyCSharpMenu", false, false ); in_reg.RegisterProperty( "MyCSharpCustomProp" ); in_reg.RegisterEvent( "MyCSharpSelectionEvent", siEventID.siOnSelectionChange ); in_reg.RegisterFilter( "MyCSharpTriangleFilter", siFilterType.siFilterSubComponentPolygon ); in_reg.RegisterOperator( "SplatterCS" ); in_reg.RegisterCommand( "DotNETHost", null ); return true; } public bool UnLoad( PluginRegistrar in_reg ) { return true; } }
Note that once the Load method terminates, the class uesd to register the plug-in in Softimage (XSIPlugin in the example above) is destroyed. This is by design since the plug-in is unloaded by Softimage once the registration step is done. For more information about Softimage plug-ins in general, see Self-Installing Plug-ins.
The plug-in item class definition must implement the callbacks as public methods (rather than imported function callbacks as it is in the C++ API).
public class MyCSharpCmd { public MyCSharpCmd() { } // Command mandatory implementation public bool Init( Context in_ctxt ) { // ... } public bool Execute( Context in_ctxt ) { // ... } // etc. }
For those already familiar with developing plug-ins with the C++ API, this table maps the C# style to the C++ API style:
Plug-in Item to Create |
Comments |
C# Public Methods to Create |
C++ Callback Function |
---|---|---|---|
Implement a class (for example, MyCSharpCmd) |
MyCSharpCmd.Init MyCSharpCmd.Execute |
MyCSharpCmd_Execute |
|
Implement a class (for example, MyCSharpSelectionEvent) |
MyCSharpSelectionEvent.OnEvent |
||
Implement a class (for example, MyCSharpTriangleFilter) |
MyCSharpTriangleFilter.Match MyCSharpTriangleFilter.Subset MyCSharpTriangleFilter.IsApplicable |
||
Implement a class (for example, MyCSharpMenu). Add callbacks by defining methods in the menu class which contain calls to Menu.AddCallbackItem. |
MyCSharpMenu.Init MyCSharpMenu.<menu-item_callback_name> |
||
Implement a class (for example, SplatterCS) |
SplatterCS.Update SplatterCS.Init SplatterCS.Define SplatterCS.DefineLayout SplatterCS.PPGEvent |
||
Implement a class (for example, MyCSharpCustomProp). Handling logic for property pages in C# mirrors how the C++ API handles logic, unlike the scripting languages that use the Softimage Object Model. For more information, see the PPGEventContext documentation. |
MyCSharpCustomProp.Define MyCSharpCustomProp.DefineLayout MyCSharpCustomProp.PPGEvent |