Using a pop-up scene explorer in a property page


Here’s how to use a pop-up (transient) explorer to allow users to select multiple objects in the scene.

In this approach, you have a text box and a button.

The OnClicked callback for the button would use OpenTransientExplorer to pop up an explorer where the user can select multiple objects. OpenTransientExplorer returns a collection, so you can store that in a string parameter.

null = None
false = 0
true = 1

def XSILoadPlugin( in_reg ):
	in_reg.Author = "blairs"
	in_reg.Name = "MyMultiSelectTestPlugin"
	in_reg.Major = 1
	in_reg.Minor = 0

	in_reg.RegisterProperty("MyMultiSelectTest")
	#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 MyMultiSelectTest_Define( in_ctxt ):
	oCustomProperty = in_ctxt.Source
	oCustomProperty.AddParameter2("Objects",constants.siString,"",null,null,null,null,constants.siClassifUnknown,constants.siPersistable + constants.siKeyable)
	return true

# Tip: Use the "Refresh" option on the Property Page context menu to 
# reload your script changes and re-execute the DefineLayout callback.
def MyMultiSelectTest_DefineLayout( in_ctxt ):
	oLayout = in_ctxt.Source
	oLayout.Clear()
	oLayout.AddRow()
	oLayout.AddItem("Objects")
	oLayout.AddButton("Explore")
	oLayout.EndRow()
	return true

def MyMultiSelectTest_OnInit( ):
	Application.LogMessage("MyMultiSelectTest_OnInit called",constants.siVerbose)

def MyMultiSelectTest_OnClosed( ):
	Application.LogMessage("MyMultiSelectTest_OnClosed called",constants.siVerbose)

def MyMultiSelectTest_Param_OnChanged( ):
	Application.LogMessage("MyMultiSelectTest_Param_OnChanged called",constants.siVerbose)
	oParam = PPG.Param
	paramVal = oParam.Value
	Application.LogMessage(str("New value: ") + str(paramVal),constants.siVerbose)

def MyMultiSelectTest_Param1_OnChanged( ):
	Application.LogMessage("MyMultiSelectTest_Param1_OnChanged called",constants.siVerbose)
	oParam = PPG.Param1
	paramVal = oParam.Value
	Application.LogMessage(str("New value: ") + str(paramVal),constants.siVerbose)

def MyMultiSelectTest_Explore_OnClicked( ):
	Application.LogMessage("MyMultiSelectTest_Explore_OnClicked called",constants.siVerbose)
	sel = Application.OpenTransientExplorer( Application.ActiveProject.ActiveScene.Passes, constants.siSEFilterAllNodesNoParams, 0, False, True )
	PPG.Objects.Value = sel

For testing, I use the Plugin Tree (in the Plugin Manager) to create an instance of the property: just right-click the custom property and click Create.

That runs this command:

Application.SIAddProp("MyMultiSelectTest", "", "siDefaultPropagation", "", "")

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s