pymel.core.context.scriptCtx

scriptCtx(*args, **kwargs)

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.

Flags:
Long name (short name) Argument Types Properties
allComponents (alc) bool  
   
allObjects (alo) bool  
   
animBreakdown (abd) bool  
   
animCurve (ac) bool  
   
animInTangent (ait) bool  
   
animKeyframe (ak) bool  
   
animOutTangent (aot) bool  
   
baseClassName (bcn) unicode ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 

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”.

byName (bn) unicode, int  
   
camera (ca) bool  
   
cluster (cl) bool  
   
collisionModel (clm) bool  
   
controlVertex (cv) bool  
   
cumulativeLists (cls) bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 

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.

curve (c) bool  
   
curveKnot (ck) bool  
   
curveOnSurface (cos) bool  
   
curveParameterPoint (cpp) bool  
   
dimension (dim) bool  
   
dynamicConstraint (dc) bool  
   
edge (eg) bool  
   
editPoint (ep) bool  
   
emitter (em) bool  
   
enableRootSelection (ers) bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 
If set, the items to be selected are at their root transform level. Default is false.
exists (ex) bool  
   
exitUponCompletion (euc) bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 
If set, completing the last selection set will exit the tool. Default is true.
expandSelectionList (esl) bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 

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 oncommand in your -toolStartscript to enable ordered selection, then restore it to its original value in your -toolFinishscript.

facet (fc) bool  
   
field (fi) bool  
   
finalCommandScript (fcs) script ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 

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[], ...

fluid (fl) bool  
   
follicle (fo) bool  
   
forceAddSelect (fas) bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 

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.

hairSystem (hs) bool  
   
handle (ha) bool  
   
history (ch) bool  
   
hull (hl) bool  
   
ignoreInvalidItems (iii) bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 

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.

ikEndEffector (iee) bool  
   
ikHandle (ikh) bool  
   
image1 (i1) unicode  
   
image2 (i2) unicode  
   
image3 (i3) unicode  
   
imagePlane (ip) bool  
   
implicitGeometry (ig) bool  
   
isoparm (iso) bool  
   
joint (j) bool  
   
jointPivot (jp) bool  
   
lastAutoComplete (lac) bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 

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.

lattice (la) bool  
   
latticePoint (lp) bool  
   
light (lt) bool  
   
localRotationAxis (ra) bool  
   
locator (lc) bool  
   
locatorUV (luv) bool  
   
locatorXYZ (xyz) bool  
   
meshComponents (mc) bool  
   
motionTrailPoint (mtp) bool  
   
motionTrailTangent (mtt) bool  
   
nCloth (ncl) bool  
   
nParticle (npr) bool  
   
nParticleShape (nps) bool  
   
nRigid (nr) bool  
   
name (n) unicode  
   
nonlinear (nl) bool  
   
nurbsCurve (nc) bool  
   
nurbsSurface (ns) bool  
   
objectComponent (ocm) bool  
   
orientationLocator (ol) bool  
   
particle (pr) bool  
   
particleShape (ps) bool  
   
plane (pl) bool  
   
polymesh (p) bool  
   
polymeshEdge (pe) bool  
   
polymeshFace (pf) bool  
   
polymeshFreeEdge (pfe) bool  
   
polymeshUV (puv) bool  
   
polymeshVertex (pv) bool  
   
polymeshVtxFace (pvf) bool  
   
queryByName (qbn) unicode  
   
rigidBody (rb) bool  
   
rigidConstraint (rc) bool  
   
rotatePivot (rp) bool  
   
scalePivot (sp) bool  
   
sculpt (sc) bool  
   
selectHandle (sh) bool  
   
setAllowExcessCount (sae) bool ../../../_images/create.gif ../../../_images/edit.gif
 
If set, the number if items is to be interpreted as the minimum.
setAutoComplete (sac) bool ../../../_images/create.gif ../../../_images/edit.gif
 
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) bool ../../../_images/create.gif ../../../_images/edit.gif
 

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.Flag can appear in Create mode of commandFlag can have multiple arguments, passed either as a tuple or a list.

setDoneSelectionPrompt (dsp) unicode ../../../_images/create.gif ../../../_images/edit.gif
 

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) unicode ../../../_images/create.gif ../../../_images/edit.gif
 
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) unicode ../../../_images/create.gif ../../../_images/edit.gif
 
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 ../../../_images/create.gif ../../../_images/edit.gif
 
The number of items in this selection set. 0 means as many as you need until completion.
setSelectionHeadsUp (ssh) unicode ../../../_images/create.gif ../../../_images/edit.gif
 
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) unicode ../../../_images/create.gif ../../../_images/edit.gif
 
Supply a string that will be shown as help when there is something selected. This must be set separately for each selection set.
sets (set) bool  
   
showManipulators (sm) bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 
If set, the manipulators will be shown for any active objects. Basically, it is as if you are in the Show Manipulator tool.
slugObject (slo) bool  
   
slugVertex (sv) bool  
   
spotlightComponent (slc) bool  
   
spring (spr) bool  
   
springComponent (spc) bool  
   
stroke (str) bool  
   
subdiv (sd) bool  
   
subdivMeshEdge (sme) bool  
   
subdivMeshFace (smf) bool  
   
subdivMeshPoint (smp) bool  
   
subdivMeshUV (smu) bool  
   
subdivisionPolymesh (spl) bool  
   
subdivisionPolymeshEdge (spe) bool  
   
subdivisionPolymeshFace (spf) bool  
   
subdivisionPolymeshVertex (spv) bool  
   
surfaceEdge (se) bool  
   
surfaceFace (sf) bool  
   
surfaceKnot (sk) bool  
   
surfaceParameterPoint (spp) bool  
   
surfaceRange (sr) bool  
   
surfaceUV (suv) bool  
   
texture (tx) bool  
   
title (t) unicode ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 
Supply a string that will be used as a precursor to all the messages; i.e., the “name” of the tool.
toolCursorType (tct) unicode ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 

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 ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 
Supply the script that will be run when the user exits the script.
toolStart (ts) script ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 
Supply the script that will be run when the user first enters the script
totalSelectionSets (tss) int ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
 
Total number of selection sets.
vertex (v) bool  
   

Derived from mel command maya.cmds.scriptCtx

Example:

import pymel.core as pm

# 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.

pm.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 )
# Result: u'scriptCtx1' #

# 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.

pm.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. '] )
# Result: u'scriptCtx2' #

# Here's Birail 3+ where you select any number of curves, then 2 rails:

pm.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. '] )
# Result: u'scriptCtx3' #

# 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.)

Previous topic

pymel.core.context.scaleKeyCtx

Next topic

pymel.core.context.selectContext

Core

Core Modules

Other Modules

This Page