// Copyright (C) 1997-2001 Alias|Wavefront, // a division of Silicon Graphics Limited. // // The information in this file is provided for the exclusive use of the // licensees of Alias|Wavefront. Such users have the right to use, modify, // and incorporate this code into other products for purposes authorized // by the Alias|Wavefront license agreement, without fee. // // ALIAS|WAVEFRONT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, // INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO // EVENT SHALL ALIAS|WAVEFRONT BE LIABLE FOR ANY SPECIAL, INDIRECT OR // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, // DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER // TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR // PERFORMANCE OF THIS SOFTWARE. // // // Alias|Wavefront Script File // MODIFY THIS AT YOUR OWN RISK // // Creation Date: Dec 3, 1996 // // // Description: // This script describes the contents of the context sensitive menus. // // Input Arguments: // None. // // Return Value: // None. // proc optionalDagMenuProc( string $parent, string $item ) { // Look at the shape child of this object // string $object[] = `listRelatives -path -s $item`; string $shape = ""; int $gotVisible = 0; if( size($object) < 1 ) return; for( $i=0; $i 0) { string $currObj; $currSelString = "select -r "; for ($currObj in $currSel) { $currSelString += ($currObj+" "); } } menuItem -l "Paint Weights" -echoCommand true -c ($currSelString+"; setSmoothSkinInfluence " + $item) -rp "N" paintWeightItem; break; } } } } else if ($isIkHandleObject) { menuItem -l "Set Preferred Angle" -annotation "Set Preferred: Select ikHandles or joints" -echoCommand true -c (`performSetPrefAngle 2` + " " + $item) -rp "W" setPrefAngleItem; menuItem -l "Assume Preferred Angle" -annotation "Assume Preferred: Select ikHandles or joints" -echoCommand true -c (`performAssumePrefAngle 2` + " " + $item) -rp "E" assumePrefAngleItem; menuItem -l "Enable ikHandle" -annotation "Enable IK Handles: Select ikHandles" -echoCommand true -c ("ikHandle -e -eh " + $item) -rp "N" enableIKHandlesItem; menuItem -l "Disable ikHandle" -annotation "Disable IK Handles: Select ikHandles" -echoCommand true -c ("ikHandle -e -dh " + $item) -rp "S" disableIKHandlesItem; menuItem -l "Enable Snap" -annotation "Enable IK Handle Snapping: Select ikHandles" -echoCommand true -c ("ikHandle -e -see " + $item + ";" + "ikHandle -e -shf on " + $item) -rp "NE" enableIKHandlesSnapItem; menuItem -l "Disable Snap" -annotation "Disable IK Handle Snapping: Select ikHandles" -echoCommand true -c ("ikHandle -e -shf off " + $item) -rp "SW" disableIKHandlesSnapItem; } else if ($isParticleObject) { for ($i = 0; $i < size($maskList); $i++) { switch ($maskList[$i]) { case "particle": $uiName = "Particle"; break; default: $uiName = `interToUI $maskList[$i]`; } menuItem -l $uiName -ecr false -c ( "doMenuParticleComponentSelection(\"" + $item + "\", \"" + $maskList[$i] + "\")") -rp $radialPosition[$i]; } } else if ($isSpringObject) { for ($i = 0; $i < size($maskList); $i++) { switch ($maskList[$i]) { case "springComponent": $uiName = "Spring"; break; default: $uiName = `interToUI $maskList[$i]`; } menuItem -l $uiName -ecr false -c ( "doMenuSpringComponentSelection(\"" + $item + "\", \"" + $maskList[$i] + "\")") -rp $radialPosition[$i]; } } else if ($isSubdivObject) { subdDagMenuProc( 0, $item, $maskList ); } else { for ($i = 0; $i < size($maskList); $i++) { $uiName = `interToUI $maskList[$i]`; menuItem -l $uiName -ecr false -c ( "doMenuComponentSelection(\"" + $item + "\", \"" + $maskList[$i] + "\")") -rp $radialPosition[$i]; } } // for ($i = 0; $i < size($maskList); $i++) { // $itemName = "SELM" + string($i); // setParent -menu $parent; // menuItem // -c ("doMenuComponentSelection(\"" + // $item + "\", \"" + $maskList[$i] + "\")") // -l $maskList[$i] // -rp $radialPosition[$i] // $itemName; // } setParent -menu $parent; } global proc doMenuNURBComponentSelection(string $item, string $mask) // // Change the selection/display state to allow selection of NURB components // { string $selectCmd; if (`selectMode -q -object`) { hilite $item; selectType -ocm -alc false; $selectCmd = "selectType -ocm -" + $mask + " true;"; } else { selectType -ocm -alc false; $selectCmd = "selectType -" + $mask + " true;"; if (`selectMode -q -preset`) { $selectCmd = $selectCmd +"selectPriority -allComponents 1;"; $selectCmd = $selectCmd +"selectPriority -isoparm 2;"; $selectCmd = $selectCmd +"selectPriority -" + $mask + " 3;"; switch ($mask) { case "editPoint": $selectCmd = $selectCmd + "toggle -state true -" + $mask + " " + $item +";"; $selectCmd = $selectCmd + "toggle -state false -hull " + $item + ";"; $selectCmd = $selectCmd + "toggle -state false -controlVertex " + $item + ";"; break; case "controlVertex": $selectCmd = $selectCmd + "toggle -state true -" + $mask + " " + $item +";"; $selectCmd = $selectCmd + "toggle -state false -hull " + $item + ";"; $selectCmd = $selectCmd + "toggle -state false -editPoint " + $item + ";"; break; case "hull": $selectCmd = $selectCmd + "toggle -state true -" + $mask + " " + $item + ";"; $selectCmd = $selectCmd + "toggle -state false -controlVertex " + $item + ";"; $selectCmd = $selectCmd + "toggle -state false -editPoint " + $item + ";"; break; default: $selectCmd = $selectCmd + "toggle -state false -hull " + $item + ";"; $selectCmd = $selectCmd + "toggle -state false -controlVertex " + $item + ";"; $selectCmd = $selectCmd + "toggle -state false -editPoint " + $item + ";"; break; } } else { $selectCmd = $selectCmd + "hilite " + $item + ";"; } } eval $selectCmd; } global proc doMenuLatticeComponentSelection(string $item, string $mask) // // Changes the selection/display state on this object to allow // selection of the Lattice control points { string $selectCmd; if (`selectMode -q -object`) { hilite $item; selectType -ocm -alc false; $selectCmd = "selectType -ocm -" + $mask + " true;"; } else { selectType -ocm -alc false; $selectCmd = "selectType -" + $mask + " true;"; if (!`selectMode -q -preset`) { $selectCmd = $selectCmd + "hilite " + $item + ";"; } else { $selectCmd = $selectCmd + "toggle -" + $mask + ";"; } } eval $selectCmd; } global proc doMenuParticleComponentSelection(string $item, string $mask) // // Change the selection/display state to allow selection of particle // components // { string $selectCmd; if (`selectMode -q -object`) { hilite $item; selectType -ocm -alc false; $selectCmd = "selectType -ocm -" + $mask + " true;"; } else { selectType -ocm -alc false; $selectCmd = "selectType -" + $mask + " true;"; if (`selectMode -q -preset`) { $selectCmd = $selectCmd +"selectPriority -allComponents 1;"; $selectCmd = $selectCmd +"selectPriority -particle 2;"; $selectCmd = $selectCmd +"selectPriority -" + $mask + " 3;"; switch ($mask) { case "particle": $selectCmd = $selectCmd + "toggle -state true -" + $mask + " " + $item +";"; break; default: $selectCmd = $selectCmd + "toggle -state false -particle " + $item + ";"; break; } } else { $selectCmd = $selectCmd + "hilite " + $item + ";"; } } eval $selectCmd; } global proc doMenuSpringComponentSelection(string $item, string $mask) // // Change the selection/display state to allow selection of spring // components // { string $selectCmd; if (`selectMode -q -object`) { hilite $item; selectType -ocm -alc false; $selectCmd = "selectType -ocm -" + $mask + " true;"; } else { selectType -ocm -alc false; $selectCmd = "selectType -" + $mask + " true;"; if (`selectMode -q -preset`) { $selectCmd = $selectCmd +"selectPriority -allComponents 1;"; $selectCmd = $selectCmd +"selectPriority -springComponent 2;"; $selectCmd = $selectCmd +"selectPriority -" + $mask + " 3;"; switch ($mask) { case "springComponent": $selectCmd = $selectCmd + "toggle -state true -" + $mask + " " + $item +";"; break; default: $selectCmd = $selectCmd + "toggle -state false -springComponent " + $item + ";"; break; } } else { $selectCmd = $selectCmd + "hilite " + $item + ";"; } } eval $selectCmd; } global proc doMenuComponentSelection(string $item, string $mask) // // Changes the selection/display state on this object to allow // selection of the specified selection mask type. { string $selectCmd; if (`selectMode -q -object`) { hilite $item; selectType -ocm -alc false; $selectCmd = "selectType -ocm -" + $mask + " true;"; } else { selectType -ocm -alc false; $selectCmd = "selectType -" + $mask + " true;"; if (!`selectMode -q -preset`) { $selectCmd = $selectCmd + "hilite " + $item + ";"; } } eval $selectCmd; } global proc undoMenuComponentSelection(string $item, string $mask) { string $selectCmd; if (`selectMode -q -object`) { $selectCmd = "selectType -ocm -" + $mask + " false;"; } else { $selectCmd = "selectType -" + $mask + " false;"; } eval $selectCmd; } global proc toggleBoundingBoxDisplay ( string $parent ) // // For each shape under the selected parent object, toggle the // state of bounding box display mode. // { string $shapes[] = `listRelatives -shapes $parent`; string $shape; for ( $shape in $shapes ) { int $overrideOn = `getAttr ( $shape + ".overrideEnabled")`; int $lodMode = `getAttr ( $shape + ".overrideLevelOfDetail")`; int $enabled = $overrideOn && $lodMode == 1; if ( $enabled ) { // Don't reset the overrideEnabled attribute. It // is used for more than just bounding box display // and turning if off will mess things up of you // have temporarily enabled bounding box display // of an object in a layer. setAttr ( $shape + ".overrideLevelOfDetail" ) 0; } else { setAttr ( $shape + ".overrideEnabled") 1; setAttr ( $shape + ".overrideLevelOfDetail") 1; } } } global proc createActionsMenuItems(string $parent, string $item) // // Creates a menu with common operations to perform on an object // { popupMenu -e -dai $parent; setParent -menu $parent; menuItem -l "Template" -c ("toggle -template -state on " + $item); menuItem -l "Untemplate" -c ("toggle -template -state off " + $item); menuItem -l "Unparent" -c ("parent -w " + $item); menuItem -l "Bounding Box" -c ("toggleBoundingBoxDisplay " + $item); } global proc showSG(string $item) // // Display the Attribute Editor and show the tab for the // shading group that is on the object $item. // // If would have been nicer to be able to use the // showShadingGroupAttributeEditor command, but it only // acts on the selected object. // { string $allNodes[] = (`listHistory -f true $item` ); string $node = ""; for ($node in $allNodes) { if(`nodeType $node` == "shadingEngine") { showEditor $node; break; } } } global proc createShaderMenuItems(string $parent, string $item) // // Create the Shader menus for the RMB popup menu. // { popupMenu -e -deleteAllItems $parent; setParent -menu $parent; menuItem -l "Material Attributes..." -c ("showSG " + $item); menuItem -d true; buildShaderMenus($item); } global proc createHistoryMenuItems(string $parent, string $item) // // Creates a menu on the toolbar that shows a list of // all operations that took place to create/modify // the currently selected object. Note that the list // is not being filtered yet to get rid of things that // users won't really care about, nor are the operations // being listed as operations - their DG node names are // simply being stuck into the menu. This should // change. // // Also note that the chain of operations limit is being // hardcoded to 20 here, for the sake of speed. // { // // Delete all menu entries currently in the popup // popupMenu -e -dai $parent; setParent -menu $parent; historyPopupFill( $item, false, 1 ); } global proc createFutureMenuItems(string $parent, string $item) // // Creates a menu on the toolbar that shows a list of // all operations that took place to create/modify // the currently selected object. Note that the list // is not being filtered yet to get rid of things that // users won't really care about, nor are the operations // being listed as operations - their DG node names are // simply being stuck into the menu. This should // change. // // Also note that the chain of operations limit is being // hardcoded to 20 here, for the sake of speed. // { // // Delete all menu entries currently in the popup // popupMenu -e -dai $parent; setParent -menu $parent; historyPopupFill( $item, true, 1 ); } global proc string objectHandlesUvSets(string $item) { string $maskList[]; string $shape = $item; int $i; // Look at the shape child of this object // string $object[] = `listRelatives -path -s $item`; int $gotVisible = 0; for ($i = 0; $i < size($object); ++$i) { if( (0 == getAttr($object[$i] + ".io")) && getAttr($object[$i] + ".v") ) { $shape = $object[$i]; $gotVisible = 1; break; } } if( !$gotVisible ) { for ($i = 0; $i < size($object); ++$i) { if (getAttr($object[$i] + ".io") == 0) { $shape = $object[$i]; break; } } } string $nt = `nodeType $shape`; if ($nt == "mesh") return $shape; return ""; } global proc createUVsetMenuItems(string $parent, string $item, string $shape) { popupMenu -e -dai $parent; setParent -menu $parent; string $cmd = "polyUVSet -currentUVSet -uvSet "; string $curSet[] = `polyUVSet -q -currentUVSet $shape`; string $names[] = `polyUVSet -q -auv $shape`; string $allProjects[] = `polyUVSet -pr -q $shape`; string $setClearCmd = ""; if (size($allProjects)) { $setClearCmd = "select -d "; for ($p=0; $p 0) menuItem -divider true; if ($uvname == $curSet[0]) { menuItem -l ($uvname) -c $setClearCmd -checkBox true; for ($j=0; $j= 5) break; } } else { menuItem -l ($uvname) -c ($setClearCmd + $setCurCmd) -checkBox false; for ($j=0; $j= 5) break; } } } } // This has been called because a menu press happened on a DAG object // So find the Object submenu and add the DAG specific items to it. // global proc dagMenuProc(string $parent, string $object) { string $mode = "All"; if (`optionVar -exists currentMenuBarTab`) { $mode = `optionVar -q currentMenuBarTab`; } else { optionVar -sv currentMenuBarTab $mode; } if (`popupMenu -e -exists $parent`) { setParent -m $parent; // label the object string $shortName = `substitute ".*|" $object ""`; menuItem -l ($shortName + "...") -c ("showEditor "+$object); menuItem -divider true; menuItem -divider true; // Create the list of selection masks createSelectMenuItems($parent, $object); menuItem -d true; menuItem -l "Select" -c ("select -r " + $object); menuItem -d true; optionalDagMenuProc( $parent, $object ); // create the history menu // string $menu = `menuItem -subMenu true -aob true -l "Inputs"`; menu -e -pmc ( "createHistoryMenuItems \""+$menu+"\" "+$object ) $menu; setParent -m $parent; $menu = `menuItem -subMenu true -aob true -l "Outputs"`; menu -e -pmc ( "createFutureMenuItems \""+$menu+"\" "+$object ) $menu; setParent -m $parent; string $paintAttr = `artBuildPaintMenu $object`; if ($paintAttr != "") { string $parent = `menuItem -subMenu true -aob true -l "Paint"`; // Create the menu. artAttrCreateMenuItems( $parent, $paintAttr ); } setParent -m $parent; $menu = `menuItem -subMenu true -l "Actions"`; menu -e -pmc ( "createActionsMenuItems \""+$menu+"\" "+$object ) $menu; setParent -m $parent; // If the object can handle uv sets then add the uvset menu // string $shape = objectHandlesUvSets( $object ); if ($shape != "") { $menu = `menuItem -subMenu true -l "UV Sets"`; menu -e -pmc ( "createUVsetMenuItems \""+$menu+"\" " +$object + " "+ $shape ) $menu; setParent -m $parent; } // Shader menu to be able to quickly assign existing shaders // to the object under the pointer. // menuItem -d true; $menu = `menuItem -subMenu true -l "Materials"`; menu -e -pmc ( "createShaderMenuItems \""+$menu+"\" "+$object ) $menu; setParent -m $parent; { // $menu = `menuItem -subMenu true -l "Paint"`; // menu -e // -pmc ( "createPaintingMenuItems \""+$menu+"\" "+$object ) // $menu; // setParent -m $parent; } if ($mode == "Dynamics") { menuItem -d true; menuItem -l "Connect Field" -c ("connectDynamic -f " + $object); menuItem -l "Connect Emitter" -c ("connectDynamic -em " + $object); menuItem -l "Connect Collision" -c ("connectDynamic -c " + $object); } setParent -m $parent; } else { warning("Menu " + $parent + " doesn't exist."); } }