Go to: Synopsis. Return value. Flags. Python examples.
scriptCtx(
string
, [baseClassName=string], [cumulativeLists=boolean], [enableRootSelection=boolean], [exists=boolean], [exitUponCompletion=boolean], [expandSelectionList=boolean], [finalCommandScript=script], [forceAddSelect=boolean], [history=boolean], [ignoreInvalidItems=boolean], [image1=string], [image2=string], [image3=string], [lastAutoComplete=boolean], [name=string], [setAllowExcessCount=boolean], [setAutoComplete=boolean], [setAutoToggleSelection=boolean], [setDoneSelectionPrompt=string], [setNoSelectionHeadsUp=string], [setNoSelectionPrompt=string], [setSelectionCount=int], [setSelectionHeadsUp=string], [setSelectionPrompt=string], [showManipulators=boolean], [title=string], [toolCursorType=string], [toolFinish=script], [toolStart=script], [totalSelectionSets=int])
Note: Strings representing object names and arguments must be separated by commas. This is not depicted in the synopsis.
scriptCtx is undoable, queryable, and editable.
This command allows a user to create their own tools based on
the selection tool. A number of selection lists can be collected,
the behaviour of the selection and the selection masks are fully
customizable, etc.
The command is processed prior to being executed. The keyword
"$Selection#" where # is a number 1 or greater specifies
a selection set. The context can specify several selection sets
which are substituted in place of the $Selection# keyword in the form
of a Mel string array. Items that are specific per set need to
be specified in each set, if they are going to be specified for any of
the sets. See examples below.
In addition, in order to specify the type of selection you need
to be making, any of the selection type flags from "selectType" command
can be used here.
In query mode, return type is based on queried flag.
baseClassName, cumulativeLists, enableRootSelection, exists, exitUponCompletion, expandSelectionList, finalCommandScript, forceAddSelect, history, ignoreInvalidItems, image1, image2, image3, lastAutoComplete, name, setAllowExcessCount, setAutoComplete, setAutoToggleSelection, setDoneSelectionPrompt, setNoSelectionHeadsUp, setNoSelectionPrompt, setSelectionCount, setSelectionHeadsUp, setSelectionPrompt, showManipulators, title, toolCursorType, toolFinish, toolStart, totalSelectionSets
Long name (short name) |
Argument types |
Properties |
|
baseClassName(bcn)
|
string
|
|
|
This string will be used to produce MEL function names for
the property sheets for the tool. For example, if
"myScriptTool" was given, the functions "myScriptToolValues"
and "myScriptToolProperties" will be used for the
property sheets. The default is "scriptTool".
|
|
cumulativeLists(cls)
|
boolean
|
|
|
If set, the selection lists will be cumulative. For example,
the second list will contain all the items from the first list,
the third all the items from the second list etc. Make sure
your script specified above takes that into account. Relevant
if there is more than one selection set.
|
|
enableRootSelection(ers)
|
boolean
|
|
|
If set, the items to be selected are at their root transform
level. Default is false.
|
|
exists(ex)
|
boolean
|
|
|
Returns true or false depending upon whether the
specified object exists. Other flags are ignored.
|
|
exitUponCompletion(euc)
|
boolean
|
|
|
If set, completing the last selection set will exit the
tool. Default is true.
|
|
expandSelectionList(esl)
|
boolean
|
|
|
If set, the selection lists will expand to have a single
component in each item. You probably want this as a default, otherwise
two isoparms on the same surface will show up as 1 item.
To ensure that components on the same object are returned in the order in
which they are selected, use the selectPref -trackSelectionOrder on
command in your -toolStart script to enable ordered
selection, then restore it to its original value in your
-toolFinish script.
|
|
finalCommandScript(fcs)
|
script
|
|
|
Supply the script that will be run when the user presses the
enter key and the context is completed. Depending on the
number of selection sets you have, the script can make use
of variables string $Selection1[], $Selection2[], ...
|
|
forceAddSelect(fas)
|
boolean
|
|
|
If set to true, together with -setAutoToggleSelection (see
below) on the first selection set, causes the first selection after
the computation of the previous result to be "shift" selection,
unless a modifier key is pressed. Default is false.
Flags for each selection set. These flags are multi-use.
|
|
history(ch)
|
boolean
|
|
|
If this is a tool command, turn the construction history on
for the tool in question.
|
|
ignoreInvalidItems(iii)
|
boolean
|
|
|
If you have multiple selection sets, the state of the
selection set is recorded at the time you "complete it". You could
then delete some of the items in that list and end up with
invalid items in one or more of your selection sets. If this
flag is set, those items will be detected and ignored. You will
never know it happened. Its as if they were never selected in
the first place, except that your selection set now does not
have as many items as it may need. If this flag is not set,
you will get a warning and your final command callback script
will likely not execute because of an error condition.
|
|
image1(i1)
|
string
|
|
|
First of three possible icons representing the tool
associated with the context.
|
|
image2(i2)
|
string
|
|
|
Second of three possible icons representing the tool
associated with the context.
|
|
image3(i3)
|
string
|
|
|
Third of three possible icons representing the tool
associated with the context.
|
|
lastAutoComplete(lac)
|
boolean
|
|
|
True if auto complete is set for the last selection set,
false otherwise. Mostly used for query, but if present in conjuction
with -sac/setAutoComplete flag, -sac flag takes precedence.
|
|
name(n)
|
string
|
|
|
If this is a tool command, name the tool appropriately.
|
|
setAllowExcessCount(sae)
|
boolean
|
|
|
If set, the number if items is to be interpreted as the minimum.
|
|
setAutoComplete(sac)
|
boolean
|
|
|
If set to true, as soon as the specified number of items is
selected the tool will start the next selection set or run the command.
|
|
setAutoToggleSelection(sat)
|
boolean
|
|
|
If set to true, it is as if "shift" key is pressed when there
are no modifiers pressed. That means that you get the "toggle select"
behaviour by default. This only applies to the 3D view, and the
selection done in the hypergraph, outliner or elsewhere is still
a subject to the usual rules.
|
|
setDoneSelectionPrompt(dsp)
|
string
|
|
|
If setAutoComplete is not set (see below) this string will be
shown as soon as the tool has enough items for a particular selection
set. If this is not set, but is needed, the same string as set with
-setSelectionPrompt flag will be used.
|
|
setNoSelectionHeadsUp(snh)
|
string
|
|
|
Supply a string that will be shown as a heads up prompt when
there is nothing selected. This must be set separately for each
selection set.
|
|
setNoSelectionPrompt(snp)
|
string
|
|
|
Supply a string that will be shown as help when there is
nothing selected. This must be set separately for each
selection set.
|
|
setSelectionCount(ssc)
|
int
|
|
|
The number of items in this selection set. 0 means as many as
you need until completion.
|
|
setSelectionHeadsUp(ssh)
|
string
|
|
|
Supply a string that will be shown as a heads up prompt when
there is something selected. This must be set separately for each
selection set.
|
|
setSelectionPrompt(ssp)
|
string
|
|
|
Supply a string that will be shown as help when there is
something selected. This must be set separately for each
selection set.
|
|
showManipulators(sm)
|
boolean
|
|
|
If set, the manipulators will be shown for any active objects.
Basically, it is as if you are in the Show Manipulator tool.
|
|
title(t)
|
string
|
|
|
Supply a string that will be used as a precursor to all the
messages; i.e., the "name" of the tool.
|
|
toolCursorType(tct)
|
string
|
|
|
Supply the string identifier to set the tool cursor type
when inside of tool. The following are the valid ids:
"create", "dolly", "edit", "pencil", "track", "trackHorizontal",
"trackVertical", "transformation", "tumble", "zoom", "zoomIn",
"zoomOut", "flyThrough", "dot", "fleur",
"leftArrow", "question", "doubleHorizArrow", "doubleVertArrow",
"sizing", "dollyIn", "dollyOut", "brush", "camera", "noAccess",
"input", "output", "leftCycle", "rightCycle", "rightExpand",
"knife".
|
|
toolFinish(tf)
|
script
|
|
|
Supply the script that will be run when the user exits
the script.
|
|
toolStart(ts)
|
script
|
|
|
Supply the script that will be run when the user first
enters the script
|
|
totalSelectionSets(tss)
|
int
|
|
|
Total number of selection sets.
|
|
Flag can appear in Create mode of command
|
Flag can appear in Edit mode of command
|
Flag can appear in Query mode of command
|
Flag can have multiple arguments, passed either as a tuple or a list.
|
import maya.cmds as cmds
# Simple example of "attach curve" tool created using scriptCtx. This tool
# prompts the user to select two curves to attach. As soon as two curves
# are selected, the attach is performed. It uses the selection type
# flag 'curveParameterPoint' from "selectType" command to specify the
# selection mask for this tool.
cmds.scriptCtx( title='Attach Curve', totalSelectionSets=1, fcs="select -r $Selection1; performAttachCrv 0 \"\"", cumulativeLists=True, expandSelectionList=True, setNoSelectionPrompt='Select two curves close to the attachment points', setSelectionPrompt='Select a second curve close to the attachment point', setDoneSelectionPrompt='Never used because setAutoComplete is set', setAutoToggleSelection=True, setSelectionCount=2, setAutoComplete=True, curveParameterPoint=True )
# And a more complex example of fillet blend tool (two sets of any number
# of "surface curves"). Notice how the selection lists are passed as
# arguments to the callback function, performBlendGiven.
cmds.scriptCtx( i1='birail3Gen.xpm', title='"Birail 3+ Tool', toolCursorType='edit', totalSelectionSets=2, cumulativeLists=True, expandSelectionList=True, fcs='select -r $Selection2; performBirail 0 3 \"birailThreePlusProfileContext\" ', setAutoToggleSelection=[True,True], setAutoComplete=[False, False], setSelectionCount=[0,2], nurbsCurve=[True,True], isoparm=[True,True], curveOnSurface=[True,True], surfaceEdge=[True,True], polymeshEdge=[True,True], setNoSelectionPrompt=['Select any number of profiles','Select two rails'], setSelectionPrompt=['Select additional profiles or hit ENTER', 'Select the second rail'], setDoneSelectionPrompt=['Profiles selected. Hit ENTER to start rail selection.', 'Rails selected. Hit ENTER to compute birail. '] )
# Here's Birail 3+ where you select any number of curves, then 2 rails:
cmds.scriptCtx( i1='birail3Gen.xpm', title='"Birail 3+ Tool', toolCursorType='edit', totalSelectionSets=2, cumulativeLists=True, expandSelectionList=True, fcs='select -r $Selection2; performBirail 0 3 \"birailThreePlusProfileContext\" ', setAutoToggleSelection=[True,True], setAutoComplete=[False, False], setSelectionCount=[0,2], nurbsCurve=[True,True], isoparm=[True,True], curveOnSurface=[True,True], surfaceEdge=[True,True], polymeshEdge=[True,True], setNoSelectionPrompt=['Select any number of profiles','Select two rails'], setSelectionPrompt=['Select additional profiles or hit ENTER', 'Select the second rail'], setDoneSelectionPrompt=['Profiles selected. Hit ENTER to start rail selection.', 'Rails selected. Hit ENTER to compute birail. '] )
# userBirailContextCallback has "true" as the first argument, which suggests
# that $Selection2 contains all of $Selection1 items (as -cumulativeLists
# true is specified in the tool creation.)