Introduced
1.0
Description
Prompts the user to pick an element.
Note: This command uses output arguments. C# and some scripting languages (such as JScript, PerlScript and Python) don't support arguments passed by reference so you need to use the best workaround for your situation:
For scripting languages this command returns an ISIVTCollection which you can use to get the output arguments.
For C# you can use the XSIApplication.ExecuteCommand method to call this command. ExecuteCommand packs the output arguments into a C# System.Object containing an Array of the output arguments (see Calling Commands from C#).
Scripting Syntax
PickElement( SelFilter, LeftMessage, MiddleMessage, [PickedElement], [ButtonPressed], SelRegionMode, [ModifierPressed] )
Parameters
|
Parameter |
Type |
Description |
|
SelFilter |
Selection filter that specifies what type of element to pick. Default Value: siGenericObjectFilter |
|
|
LeftMessage |
Status bar message for the left mouse button. |
|
|
MiddleMessage |
Status bar message for the middle mouse button. |
|
|
PickedElement [out] |
Returns the element picked by the user. |
|
|
ButtonPressed [out] |
Returns the mouse button clicked by the user. Possible Values: • 0: Right mouse button (or the Esc key), which means the user aborted the picking session • 1: Left mouse button • 2: Middle mouse button |
|
|
SelRegionMode |
Type of selection to perform. Default Value: 0 Possible Values: • 0: None (use current mode) • 1: Rectangle • 2: Raycast • 3: Lasso • 4: Freeform • 5: Paint |
|
|
ModifierPressed [out] |
Returns the modifier key pressed by the user. Possible Values: • 0: None • 1: Shift modifier key • 2: Ctrl modifier key • 3: Shift-Ctrl modifier key |
Examples
1. JScript Example
/* This example illustrates how to set up a pick session to pick only polygons. */ NewScene( null, false ); CreatePrim( "Cube", "MeshSurface" ); var rtn = PickElement( "polygon", "Select polygons", "Select polygons", polygons, button, 0 ) logmessage( "Picked Element:" + rtn.Value("PickedElement") + " Button:" + rtn.Value("ButtonPressed") + " Modifier:" + rtn.Value("ModifierPressed") ); var element = rtn.Value( "PickedElement" ); var button = rtn.Value( "ButtonPressed" ); var modifier = rtn.Value( "ModifierPressed" ); if ( button != 0 ) { var polygons = element.SubComponent.Parent3DObject.ActivePrimitive.Geometry.Facets; var polygonIndices = element.SubComponent.ElementArray.toArray(); for ( var i=0; i<polygonIndices.length; i++ ) { var currpolygon = polygons( polygonIndices[i] ); logmessage( currpolygon + " is at index " + currpolygon.Index ); } } // Result is something like this (varies as to what gets picked): // INFO : Picked Element:cube.poly[0,4] Button:1 Modifier:0 // INFO : PolygonFace is at index 0 // INFO : PolygonFace is at index 4 //
2. VBScript Example
' The following example uses PickElement to pick an object of a given type ' (eg: mesh) then another of another given type (eg: nurbs) to finally ' parent one to the other dim parent, child, button, modifier CreatePrim "Sphere", "NurbsSurface" Translate , -4.80504207251944, 6.3879907927616, -0.63879907927616, _ siRelative, siView, siObj, siXYZ CreatePrim "Cone", "MeshSurface" PickElement "surface_mesh", "Select parent nurbs object", _ "Select parent nurbs object", parent, button,, modifier if button <> 0 then PickElement "polygon_mesh", "Select child mesh object", _ "Select child mesh object", child, button if button <> 0 then if modifier = 0 then ParentObj parent, child else ParentObj child, parent end if end if end if 'The nurbs should now be parent of the mesh (or vice-versa for MMB)
3. JScript Example
/* The following example uses PickElement to pick subcomponents on a geometry */ CreatePrim( "Sphere", "MeshSurface" ); SetSelFilter("Vertex"); var rtn = PickElement( "point", "Select points", "Select points" ); var button = rtn.Value( "ButtonPressed" ); var points = rtn.Value("PickedElement"); if ( button != 0 ) { CreateCluster( points ); } // A cluster of points should now exist in the sphere.
4. VBScript Example
' ' The following example uses PickElement to select a property of a 3D object ' dim parent, child, button CreatePrim "Sphere", "MeshSurface" set AProperty = PickElement( "property", "Select a property", _ "Select a property", property, button ) if button <> 0 then SelectObj property end if ' A property of the sphere should now be selected.
5. Python Example
# # This example demonstrates how to get values from the # output arguments of PickElement. # from win32com.client import constants as c xsi = Application xsi.NewScene( Application.ActiveProject, 0 ) root = xsi.ActiveSceneRoot # Set up some models to pick oMdl = root.AddModel() oMdl.Name = "Parent1" oMdl = root.AddModel() oMdl.Name = "Parent2" oMdl1 = oMdl.AddModel() oMdl1.Name = "Child" oPicked = xsi.PickElement( c.siModelFilter, 'Pick model', 'Pick model' ) xsi.LogMessage( "# of values returned: " + str(oPicked.Count) ) # You can access the output arguments by index (returned sorted # alphabetically according to parameter name)... xsi.LogMessage( "Button pressed: " + str(oPicked(0)) ) xsi.LogMessage( "Picked element: " + str(oPicked(2)) ) # ... or access them by name xsi.LogMessage( "Modifier pressed: " + str(oPicked.Value("ModifierPressed")) ) # Expected result for picking Parent2 with the MMB while # holding down alt+shift (# of values will always be 3): #INFO : # of values returned: 3 #INFO : Button pressed: 2 #INFO : Picked element: Parent2 #INFO : Modifier pressed: 3
Autodesk Softimage v7.5