// =========================================================================== // Copyright 2018 Autodesk, Inc. All rights reserved. // // Use of this software is subject to the terms of the Autodesk license // agreement provided at the time of installation or download, or which // otherwise accompanies this software in either electronic or hard copy form. // =========================================================================== // // // Creation Date: 11 June 2014 // // Description: // This implements the "Key" menu on the Animation Menu Set. // // Procedure Name: // AniKeyMenu // // Description: // Create the ANIMATION->Key menu // // Input Arguments: // The parent control for the menu. // // Return Value: // None. // global proc AniKeyMenu ( string $parent ) { setParent -menu $parent; if( `menu -q -ni $parent` != 0 ) { // // Menu is built already - just return // return; } // Set menuItem -divider true -dividerLabel (uiRes("m_AniKeyMenu.kKeySet")); string $cmd; $cmd = "SetKey"; menuItem -rtc $cmd -dragMenuCommand "performSetKeyframeArgList 1 {\"2\", \"animationList\"}" setKeyItem; $cmd = "SetKeyOptions"; menuItem -optionBox true -command $cmd -annotation (getRunTimeCommandAnnotation($cmd)) -image "setKeyframe.png"; $cmd = "SetKeyAnimated"; menuItem -rtc $cmd setKeyAnimatedItem ; $cmd = "SetKeyTranslate"; menuItem -rtc $cmd setTranslationKeyItem; $cmd = "SetKeyRotate"; menuItem -rtc $cmd setRotationKeyItem; $cmd = "SetKeyScale"; menuItem -rtc $cmd setScaleKeyItem; $cmd = "SetBreakdownKey"; menuItem -rtc $cmd -dragMenuCommand "performSetBreakdown 2 animationList" setBreakdownItem; $cmd = "SetBreakdownKeyOptions"; menuItem -optionBox true -command $cmd -annotation (getRunTimeCommandAnnotation($cmd)) setBreakdownOptionItem; // Set Driven Keyframe // menuItem -ltVersion "2016" -label (uiRes("m_AniKeyMenu.kSetDrivenKeyParent")) -subMenu true -aob true -to true; $cmd = "SetDrivenKey"; menuItem -ltVersion "2016" -rtc $cmd setDrivenKeyDialog; $cmd = "SetDrivenKeyOptions"; menuItem -ltVersion "2016" -optionBox true -rtc $cmd -image "setDrivenKeyframe.png"; $cmd = "GoToPreviousDrivenKey"; menuItem -ltVersion "2016" -rtc $cmd previousDrivenKeyItem; $cmd = "GoToNextDrivenKey"; menuItem -ltVersion "2016" -rtc $cmd nextDrivenKeyItem; setParent -menu ..; // menu item for keyframing blendshape target weights $cmd = "KeyBlendShapeTargetsWeight"; menuItem -rtc $cmd; // Edit menuItem -divider true -dividerLabel (uiRes("m_AniKeyMenu.kKeyEdit")); menuItem -rtc ("CutKeys") -dragMenuCommand "performCutKeyArgList 1 {\"2\", \"animationList\", \"0\"}" cutKeyItem; $cmd = "CutKeysOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -command ($cmd) cutKeyDialogItem; menuItem -rtc ("CopyKeys") -dragMenuCommand "performCopyKeyArgList 1 {\"2\", \"animationList\", \"0\"}" copyKeyItem; $cmd = "CopyKeysOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -command ($cmd) copyKeyDialogItem; menuItem -rtc ("PasteKeys") -dragMenuCommand "performPasteKeyArgList 1 {\"2\", \"animationList\", \"0\"}" pasteKeyItem; $cmd = "PasteKeysOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -command ($cmd) pasteKeyDialogItem; menuItem -rtc ("DeleteKeys") -dragMenuCommand "performClearKeyArgList 1 {\"2\", \"animationList\", \"0\", \"0\"}" clearKeyItem; $cmd = "DeleteKeysOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -command ($cmd) clearKeyDialogItem; $cmd = "ScaleKeys"; menuItem -rtc ($cmd) -dragMenuCommand "performScaleKeyArgList 1 {\"2\", \"animationList\", \"0\"}" scaleKeyItem; $cmd = "ScaleKeysOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -command ($cmd) scaleKeyDialogItem; $cmd = "SnapKeys"; menuItem -rtc ($cmd) -dragMenuCommand "performSnapKeyArgList 1 { \"2\", \"animationList\", \"0\" }" snapKeyItem; $cmd = "SnapKeysOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -command ($cmd) snapKeyDialogItem; $cmd = "BakeSimulation"; menuItem -rtc ($cmd) -dragMenuCommand "performBakeSimulationArgList 1 {\"2\", \"animationList\"}" bakeSimulationItem; $cmd = "BakeSimulationOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -command ($cmd) bakeSimulationDialogItem; menuItem -divider true -longDivider false; $cmd = "HoldCurrentKeys"; menuItem -echoCommand true -rtc $cmd holdKeyItem; // IK/FK Switching // menuItem -ltVersion "2015" -label (uiRes("m_AniKeyMenu.kIKFKKeys")) -subMenu true -aob true -to true; $cmd = "SetIKFKKeyframe"; menuItem -ltVersion "2015" -rtc $cmd ikFKSetKeyItem; int $ikState = `optionVar -q ikFKSwitchState`; $cmd = "ToggleFkIk"; string $mi = `menuItem -ltVersion "2015" -checkBox $ikState -rtc $cmd ikFKStateItem`; $cmd = "ConnectNodeToIKFK"; menuItem -ltVersion "2015" -rtc $cmd ikFKConnectToItem; $cmd = "MoveIKtoFK"; menuItem -ltVersion "2015" -rtc $cmd moveIKtoFKitem; setUpIKSelectionScriptJob($mi); setParent -menu ..; // ----- Character Set ----- // Important: // These character set menu items are replicated in the rigging menuset inside ChaControlsMenu.mel // If you are making changes to these items, please confirm update the corresponding // item in ChaControlsMenu.mel. // // Also, if you update createSelectCharNodesMenu() and createSelectCharMenu() proc, // please also remember to update the corresponding duplicate in ChaControlsMenu.mel. menuItem -divider true -dividerLabel (uiRes("m_AniKeyMenu.kKeyCharacterSet")); $cmd = "CreateCharacter"; menuItem -rtc $cmd -dragMenuCommand "performCreateCharacter 2" createAniCharacterItem; $cmd = "CreateCharacterOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -c $cmd createAniCharacterDialogItem; $cmd = "CreateSubCharacter"; menuItem -rtc $cmd -dragMenuCommand "performCreateSubcharacter 2" createAniSubCharacterItem; $cmd = "CreateSubCharacterOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -c $cmd createAniSubCharacterDialogItem; $cmd = "CharacterMapper"; menuItem -rtc $cmd; $cmd = "EditCharacterAttributes"; menuItem -rtc $cmd editAniCharacterAttributesItem; menuItem -divider true -longDivider false; $cmd = "AddToCharacterSet"; menuItem -rtc $cmd addAniCharacterItem; $cmd = "RemoveFromCharacterSet"; menuItem -rtc $cmd removeAniCharacterItem; $cmd = "MergeCharacterSet"; menuItem -rtc $cmd mergeAniCharacterItem; menuItem -divider true -longDivider false; menuItem -label (uiRes("m_AniKeyMenu.kSelectCharacterNode")) -sm true -aob true selectAniCharSMItem; menu -e -pmc "createSelectCharMenu selectAniCharSMItem" selectAniCharSMItem; setParent -menu ..; menuItem -label (uiRes("m_AniKeyMenu.kSelectCharacterMembers")) -sm true -aob true selectAniCharNodesSMItem; menu -e -pmc "createSelectCharNodesMenu selectAniCharNodesSMItem" selectAniCharNodesSMItem; setParent -menu ..; menuItem -label (uiRes("m_AniKeyMenu.kSetCurrentChar")) -sm true setAniCharSMItem; menu -e -pmc "buildSetCharacterMenu setAniCharSMItem" setAniCharSMItem; setParent -menu ..; $cmd = "AddAnimationOffset"; menuItem -rtc $cmd -dragMenuCommand "addAnimationOffset" addAnimationOffset; $cmd = "AddAnimationOffsetOptions"; menuItem -optionBox true -annotation (getRunTimeCommandAnnotation($cmd)) -c $cmd addAnimationOffsetDialogItem; // ----- Character Set ----- // Time menuItem -divider true -dividerLabel (uiRes("m_AniKeyMenu.kKeyTime")); string $timeWarpSubMenu = `menuItem -subMenu true -label (uiRes("m_AniKeyMenu.kTimeWarp")) -tearOff true -allowOptionBoxes true timeWarpSubMenu`; // Add Time Warp // $cmd = "AddTimeWarp" ; menuItem -rtc $cmd addTimeWarpItem; // Select Time Warp // $cmd = "SelectTimeWarp" ; menuItem -rtc $cmd selectTimeWarpItem; // Delete Time Warp // $cmd = "DeleteTimeWarp" ; menuItem -rtc $cmd deleteTimeWarpItem; // Enable Time Warp // string $enableTimeWarpItem = `menuItem -rtc "EnableTimeWarp" -cb 1 enableTimeWarpItem`; setParent -m ..; menuItem -e -pmc ( "menuItem -e -cb `getAttr time1.enableTimewarp` " + $enableTimeWarpItem ) $timeWarpSubMenu; // MAYA-77939: Set Timecode disabled until bugs worked out // menuItem -label _L10N( kSetTimecode, "Set Timecode..." ) // -annotation (getRunTimeCommandAnnotation("SetTimecode")) // -command "SetTimecode" // animSetTimecodeItem; } // // Procedure Name: // createSelectCharNodesMenu // // Description: // Create the menu for selecting all of the nodes in // a particular character. // // Input Arguments: // $parent - parent menu // // Return Value: // None // global proc createSelectCharNodesMenu( string $parent ) { string $cmd; string $annotation; string $format; setParent -menu $parent; menu -e -dai $parent; // Get characters in system // string $characters[] = `ls -type character`; if( `size $characters` == 0 ) { menuItem -label (uiRes("m_AniKeyMenu.kNoCharacterSets")) -enable false; } else { for( $character in $characters ) { $cmd = ( "select -cl;selectNodesInCharacter( \"" + $character + "\" )" ); $format = (uiRes("m_AniKeyMenu.kSelectNodesInCharacter")); $annotation = `format -stringArg $character $format`; menuItem -label $character -c $cmd -annotation $annotation; } } } // // Procedure Name: // createSelectCharMenu // // Description: // Create the menu for selecting characters quickly // // Input Arguments: // $parent - parent menu // // Return Value: // None // global proc createSelectCharMenu( string $parent ) { string $cmd; string $annotation; string $format; setParent -menu $parent; menu -e -dai $parent; //Get characters in system // string $characters[] = `ls -type character`; if( `size $characters` == 0 ) { menuItem -label (uiRes("m_AniKeyMenu.kNoCharacterSets2")) -enable false; } else { for( $character in $characters ) { $cmd = ( "select -r \"" + $character + "\"" ); $format = (uiRes("m_AniKeyMenu.kSelect")); $annotation = `format -stringArg $character $format`; menuItem -label $character -c $cmd -annotation $annotation; } } }