If you use AddCallbackItem to implement a contextual menu, then you can get the objects to which the context menu applies. A menu item callback gets a Context object from Softimage, and that Context contains a Target context attribute. Target specifies the selected objects, or the object under the mouse:
- If more than one object is selected, then the Target attribute is a collection of all selected objects.
- Otherwise, the Target attribute is a collection that contains just the object under the mouse.
Here’s a Python example of a context menu implemented with AddCallbackItem.
import win32com.client
from win32com.client import constants
null = None
false = 0
true = 1
def XSILoadPlugin( in_reg ):
in_reg.Author = "blairs"
in_reg.Name = "Test_CommandPlugin"
in_reg.Major = 1
in_reg.Minor = 0
in_reg.RegisterCommand("Test_Command","Test_Command")
in_reg.RegisterMenu(constants.siMenuSEModelContextID,"Model_Context_Menu",false,false)
in_reg.RegisterMenu(constants.siMenuSEObjectContextID,"Object_Context_Menu",false,false)
#RegistrationInsertionPoint - do not remove this line
return true
def XSIUnloadPlugin( in_reg ):
strPluginName = in_reg.Name
Application.LogMessage(str(strPluginName) + str(" has been unloaded."),constants.siVerbose)
return true
def Model_Context_Menu_Init( in_ctxt ):
oMenu = in_ctxt.Source
oMenu.AddCallbackItem( "Log target model", "SE_ContextCallback" )
return true
def Object_Context_Menu_Init( in_ctxt ):
oMenu = in_ctxt.Source
oMenu.AddCallbackItem( "Log target object", "SE_ContextCallback" )
return true
#
# Menu item callback
#
def SE_ContextCallback( in_ctxt ):
target = in_ctxt.GetAttribute("Target")
# Target attribute returns an XSICollection
for o in target:
Application.LogMessage( o.FullName )
