<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
This is the support and documentation page for Maya Tools. Browse tools from the menu on the left.
[[ToolsWiki]]
Documentation and Support
ml_ Tools Wiki
[[Tools Home|http://morganloomis.com/download/]]
[[ml_arcTracer]]
[[ml_breakdownDragger]]
[[ml_cameraDepthDragger]]
[[ml_convertRotationOrder]]
[[ml_copyAnim]]
[[ml_deleteKey]]
[[ml_hold]]
[[ml_keyValueDragger]]
[[ml_lockAndHideAttributes]]
[[ml_resetChannels]]
[[ml_selectKeyed]]
[[ml_setKey]]
[[ml_toggleVisibility]]
[[ml_utilities]]
[[ml_worldBake]]
http://morganloomis.com/wiki/tools.html
|bgcolor(lightgrey):Download|  [[ml_deleteKey.py|http://morganloomis.com/download/ml_deleteKey.py]]  |
|bgcolor(lightgrey):Revision|  2  |
|bgcolor(lightgrey):Last Update|  2012-03-29  |
|>|[[Installation Instructions|Installing ml_deleteKey.py]]|
!!!Description
This is a more robust tool for deleting keyframes in Maya, including deleting keys on selected channels, current frame, or visible in graph editor. 
!!!Usage
Run the tool, select the options, and press the Delete Key button. Alternately, set the options and right click the button to create a hotkey or shelf button. The options all work together, they are evaluated in the order listed in the UI. For example, if all options are checked, it  will first look for selected keys to delete. If no keys are selected, it  will check if the channel box is highlighted. And so on. 
!!!Requirements
This script requires the following modules to run. Make sure you have the latest versions downloaded to your script directory.
[[ml_utilities]]
!!!UI Options
|<html></html> Selected Keys|Delete the keys selected in the graph editor.|
|<html></html> Selected Channels|Delete all the keys on selected channels. (Unless overridden above)|
|<html></html> Visible in Graph Editor|Only delete keys that are visible in the graph editor. (Unless overridden above)|
|<html></html> Current Frame|Delete the keys on the current frame. (Unless overridden above)|
|<html></html> Delete Sub-Frames|Delete sub-frame keys surrounding the current frame.|
|<html></html>|Run the command.|
||Right-click for more options|
!!!More Info
*[[ml_deleteKey Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_deleteKey]]
*<html>Creative Commons License</html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
!!!Revision History
|Revision 2|bgcolor(lightgrey):2012-03-29|Fixing bugs, published first version too quickly!|
|Revision 1|bgcolor(lightgrey):2012-03-29|First publish.|
!!!Installing the File
To use [[ml_deleteKey]], download [[ml_deleteKey.py|http://morganloomis.com/download/ml_deleteKey.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_deleteKey.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_deleteKey
ml_deleteKey.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_deleteKey;ml_deleteKey.ui()");
}}}
<html>
 
 
ml_deleteKey
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/ml/mlOnline/ml_deleteKey.py

#   -= ml_deleteKey.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 1, 2012-03-29
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_deleteKey.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_deleteKey
#     ml_deleteKey.ui()
# From MEL, this looks like:
#     python("import ml_deleteKey;ml_deleteKey.ui()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# This is a more robust tool for deleting keyframes in Maya, including
# deleting keys on selected channels, current frame, or visible in graph editor.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the tool, select the options, and press the Delete Key button.
# Alternately, set the options and right click the button to create
# a hotkey or shelf button. The options all work together, they are evaluated
# in the order listed in the UI. For example, if all options are checked, it 
# will first look for selected keys to delete. If no keys are selected, it 
# will check if the channel box is highlighted. And so on.
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [] Selected Keys : Delete the keys selected in the graph editor.
# [] Selected Channels : Delete all the keys on selected channels. (Unless overridden above)
# [] Visible in Graph Editor : Only delete keys that are visible in the graph editor. (Unless overridden above)
# [] Current Frame : Delete the keys on the current frame. (Unless overridden above)
# [] Delete Sub-Frames : Delete sub-frame keys surrounding the current frame.
# [Delete Key] : Run the command.
#  : Right-click for more options
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
maya.mel
ml_utilities

 
Functions
       
deleteKey(deleteSubFrames=False, selectedKeys=False, selectedChannels=False, visibleInGraphEditor=False, currentFrame=False)
The main function arguments:
 
    selectedKeys:           Delete the keys selected in the graph editor
    selectedChannels:       Delete all the keys on selected channels
    visibleInGraphEditor:   Only delete keys that are visible in the graph editor
    currentFrame:           Delete the keys on the current frame
    deleteSubFrames:        Delete sub-frame keys surrounding the current frame
ui()
User interface for ml_deleteKey

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 2
hotkey = {'d': 'deleteKey(deleteSubFrames=True, selectedChannels=True, visibleInGraphEditor=True)'}

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[ml_setKey.py|http://morganloomis.com/download/ml_setKey.py]]  |
|bgcolor(lightgrey):Revision|  5  |
|bgcolor(lightgrey):Last Update|  2012-03-26  |
|>|[[Installation Instructions|Installing ml_setKey.py]]|
!!!Description
This is a more robust tool for setting keyframes in Maya, including setting keys on selected channels, keyed channels, and several other options. 
!!!Usage
Run the tool, select the options, and press the Set Key button. Alternately, set the options and press the "Create Hotkey" button to turn the current functionality into a hotkey. 
!!!Requirements
This script requires the following modules to run. Make sure you have the latest versions downloaded to your script directory.
[[ml_utilities]]
!!!UI Options
|<html></html> Selected Channels|Only key channels that are selected in the Channel Box|
|<html></html> Visible in Graph Editor|Only key curves visible in Graph Editor|
|<html></html> Key Only Keyed Channels|Only set keys on channels that are already keyed|
|<html></html> Delete Sub-Frames|Delete sub-frame keys surrounding the current frame|
|<html></html> Insert Key|Insert key (preserve tangents)|
|<html></html> Key Shapes|Set keyframes on shapes|
|<html></html> Key Shapes|Set keyframes on shapes|
|<html></html>|Run the command.|
||Right-click for more options|
!!!More Info
*[[ml_setKey Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_setKey]]
*<html>Creative Commons License</html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
!!!Revision History
|Revision 5|bgcolor(lightgrey):2012-03-26|Updated delete sub-frame option to work with other frame rates|
!!!Installing the File
To use [[ml_setKey]], download [[ml_setKey.py|http://morganloomis.com/download/ml_setKey.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_setKey.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_setKey
ml_setKey.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_setKey;ml_setKey.ui()");
}}}
<html>
 
 
ml_setKey
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/ml/mlOnline/ml_setKey.py

#   -= ml_setKey.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 5, 2012-03-26
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_setKey.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_setKey
#     ml_setKey.ui()
# From MEL, this looks like:
#     python("import ml_setKey;ml_setKey.ui()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# This is a more robust tool for setting keyframes in Maya, including
# setting keys on selected channels, keyed channels, and several other options.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the tool, select the options, and press the Set Key button.
# Alternately, set the options and press the "Create Hotkey" button to
# turn the current functionality into a hotkey.
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [] Selected Channels : Only key channels that are selected in the Channel Box
# [] Visible in Graph Editor : Only key curves visible in Graph Editor
# [] Key Only Keyed Channels : Only set keys on channels that are already keyed
# [] Delete Sub-Frames : Delete sub-frame keys surrounding the current frame
# [] Insert Key : Insert key (preserve tangents)
# [] Key Shapes : Set keyframes on shapes
# [] Key Shapes : Set keyframes on shapes
# [Set Key] : Run the command.
#  : Right-click for more options
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
maya.mel
ml_utilities

 
Functions
       
getFrameRate()
Return an int of the current frame rate
setKey(deleteSubFrames=False, insert=False, selectedChannels=False, visibleInGraphEditor=False, keyKeyed=False, keyShapes=False)
The main function arguments:
 
    deleteSubFrames:        Delete sub-frame keys surrounding the current frame
    insert:                 Insert key (preserve tangents)
    selectedChannels:       Only key channels that are selected in the Channel Box
    visibleInGraphEditor:   Only key curves visible in Graph Editor
    keyKeyed:               Only set keys on channels that are already keyed
    keyShapes:              Set keyframes on shapes as well as transforms
ui()
User interface for ml_setKey

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 5
hotkey = {'S': 'setKey(deleteSubFrames=True, insert=True, select...nGraphEditor=True, keyKeyed=True, keyShapes=True)'}

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[ml_copyAnim.py|http://morganloomis.com/download/ml_copyAnim.py]]  |
|bgcolor(lightgrey):Revision|  1  |
|bgcolor(lightgrey):Last Update|  2012-03-14  |
|>|[[Installation Instructions|Installing ml_copyAnim.py]]|
!!!Description
Copy animation curves either completely or in part from one node or hierarchy to another. 
!!!Usage
Select the source and destination node (or top node) and press the button to either copy the selected node only, or the whole hierarchy underneath. Highlight the timeline if you want to copy just that part of the animation. 
!!!Requirements
This script requires the following modules to run. Make sure you have the latest versions downloaded to your script directory.
[[ml_utilities]]
!!!UI Options
|<html></html>|Copy animation from one object to another.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Uses name matching to copy animation across.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!!More Info
*[[ml_copyAnim Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_copyAnim]]
*<html>Creative Commons License</html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
!!!Revision History
|Revision 1|bgcolor(lightgrey):2012-03-14|First publish.|
!!!Installing the File
To use [[ml_copyAnim]], download [[ml_copyAnim.py|http://morganloomis.com/download/ml_copyAnim.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_copyAnim.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_copyAnim
ml_copyAnim.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_copyAnim;ml_copyAnim.ui()");
}}}
<html>
 
 
ml_copyAnim
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/ml/mlOnline/ml_copyAnim.py

#   -= ml_copyAnim.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 0, 2012-03-14
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_copyAnim.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_copyAnim
#     ml_copyAnim.ui()
# From MEL, this looks like:
#     python("import ml_copyAnim;ml_copyAnim.ui()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Copy animation curves either completely or in part from one node or hierarchy to another.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Select the source and destination node (or top node) and press the button to either copy
# the selected node only, or the whole hierarchy underneath.
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [Copy Single] : Copy animation from one object to another.
# [Copy Hierarchy] : Uses name matching to copy animation across.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
maya.mel
ml_utilities

 
Functions
       
copyAnimation(source=None, destination=None, pasteMethod='replace', offset=0, start=None, end=None, layer=None)
Actually do the copy and paste from one node to another. If start and end frame is specified,
set a temporary key before copying, and delete it afterward.
copyHierarchy(sourceTop=None, destinationTop=None, pasteMethod='replace', offset=0, addToLayer=False)
Copy animation from a source hierarchy and paste it to a destination hierarchy.
copySingle(source=None, destination=None, pasteMethod='replace', offset=0)
Copy animation from a source node and paste it to a destination node
ui()
user interface for ml_copyAnim

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 1

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[ml_convertRotationOrder.py|http://morganloomis.com/download/ml_convertRotationOrder.py]]  |
|bgcolor(lightgrey):Revision|  2  |
|bgcolor(lightgrey):Last Update|  2012-03-12  |
|>|[[Installation Instructions|Installing ml_convertRotationOrder.py]]|
!!!Description
This is a tool for changing the rotation order of an object while preserving keyed poses, for when you want to change the rotation order after you've already done animation, or don't  want to alter the pose of an object. 
!!!Usage
Run the UI. Select the objects with rotation orders you want to change, and press the button for the desired rotation order. 
!!!Requirements
This script requires the following modules to run. Make sure you have the latest versions downloaded to your script directory.
[[ml_utilities]]
!!!More Info
*[[ml_convertRotationOrder Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_convertRotationOrder]]
*<html>Creative Commons License</html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
!!!Revision History
|Revision 2|bgcolor(lightgrey):2012-03-12|Updated to work with non-keyed objects, added the tips button.|
!!!Installing the File
To use [[ml_convertRotationOrder]], download [[ml_convertRotationOrder.py|http://morganloomis.com/download/ml_convertRotationOrder.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_convertRotationOrder.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_convertRotationOrder
ml_convertRotationOrder.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_convertRotationOrder;ml_convertRotationOrder.ui()");
}}}
<html>
 
 
ml_convertRotationOrder
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/ml/mlOnline/ml_convertRotationOrder.py

#   -= ml_convertRotationOrder.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 2, 2012-03-12
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_convertRotationOrder.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_convertRotationOrder
#     ml_convertRotationOrder.ui()
# From MEL, this looks like:
#     python("import ml_convertRotationOrder;ml_convertRotationOrder.ui()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# This is a tool for changing the rotation order of an object while preserving keyed poses, for
# when you want to change the rotation order after you've already done animation, or don't 
# want to alter the pose of an object.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the UI. Select the objects with rotation orders you want to change, and press the button
# for the desired rotation order.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
ml_utilities

 
Functions
       
convertTo(roo='zxy')
gimbalTolerence(obj)
isWorldSpaceControl(obj)
loadTips(*args)
readUI(*args)
resetTips()
testAllRotateOrdersForGimbal(obj)
ui()
User interface for convert rotation order
xyz(*args)
xzy(*args)
yxz(*args)
yzx(*args)
zxy(*args)
zyx(*args)

 
Data
        ROTATE_ORDERS = ['xyz', 'yzx', 'zxy', 'xzy', 'yxz', 'zyx']
__author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 2

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[ml_cameraDepthDragger.py|http://morganloomis.com/download/ml_cameraDepthDragger.py]]  |
|bgcolor(lightgrey):Revision|  1  |
|bgcolor(lightgrey):Last Update|  2012-03-12  |
|>|[[Installation Instructions|Installing ml_cameraDepthDragger.py]]|
!!!Description
Move objects closer to or further from camera, such that they don't change location in screen space, just get larger or smaller in frame. 
!!!Usage
Run the tool, and then click and drag the mouse in the viewport to move selected objects closer or further from camera. When you release click, the tool will exit. 
!!!Requirements
[[euclid.py|http://partiallydisassembled.net/euclid.html]]
[[ml_utilities]]
!!!More Info
*[[ml_cameraDepthDragger Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_cameraDepthDragger]]
*<html>Creative Commons License</html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
!!!Revision History
|Revision 1|bgcolor(lightgrey):2012-03-12|First publish.|
!!!Installing the File
To use [[ml_cameraDepthDragger]], download [[ml_cameraDepthDragger.py|http://morganloomis.com/download/ml_cameraDepthDragger.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_cameraDepthDragger.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_cameraDepthDragger
ml_cameraDepthDragger.drag()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_cameraDepthDragger;ml_cameraDepthDragger.drag()");
}}}
<html>
 
 
ml_cameraDepthDragger
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/ml/mlOnline/ml_cameraDepthDragger.py

#   -= ml_cameraDepthDragger.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 1, 2012-03-12
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_cameraDepthDragger.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_cameraDepthDragger
#     ml_cameraDepthDragger.drag()
# From MEL, this looks like:
#     python("import ml_cameraDepthDragger;ml_cameraDepthDragger.drag()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Move objects closer to or further from camera, such that they don't change location
# in screen space, just get larger or smaller in frame.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the tool, and then click and drag the mouse in the viewport to move selected
# objects closer or further from camera. When you release click, the tool will exit.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the euclid module, which can be downloaded here:
#       http://partiallydisassembled.net/euclid.html
# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
euclid
maya.cmds
maya.mel
ml_utilities

 
Classes
       
ml_utilities.Dragger(__builtin__.object)
CameraDepthDragger

 
class CameraDepthDragger(ml_utilities.Dragger)
    
Method resolution order:
CameraDepthDragger
ml_utilities.Dragger
__builtin__.object

Methods defined here:
__init__(self, name='mlCameraDepthDraggerContext', minValue=None, maxValue=None, defaultValue=0, title='CameraDepth')
dragLeft(self)
drag normal speed
dragMult(self, mult)

Methods inherited from ml_utilities.Dragger:
drag(self, *args)
dragControlLeft(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragControlMiddle(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragMiddle(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftLeft(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftMiddle(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
drawString(self, message)
Creates a string message at the position of the pointer.
press(self, *args)
Be careful overwriting the press method in child classes, because of the undoInfo openChunk
release(self, *args)
Be careful overwriting the release method in child classes. Not closing the undo chunk leaves maya in a sorry state.
setTool(self)

Data descriptors inherited from ml_utilities.Dragger:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
Functions
       
drag()
The primary command to run the tool

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 1

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[ml_lockAndHideAttributes.py|http://morganloomis.com/download/ml_lockAndHideAttributes.py]]  |
|bgcolor(lightgrey):Revision|  1  |
|bgcolor(lightgrey):Last Update|  2011-10-08  |
|>|[[Installation Instructions|Installing ml_lockAndHideAttributes.py]]|
!!!Description
Quickly set the locked and keyable state of attributes in the channel box. This tool is designed to be used as hotkeys for quickly locking and hiding attributes. It will operate on all visible attributes, unless specific channels are selected. When using to unhide attributes, it will unhide all standard transform attributes, and all user defined attributes. 
!!!Usage
Run the UI, select channels in the channel box, and hit the appropriate button to lock, hide, unlock or unhide channels. Right click the buttons to create hotkeys or shelf buttons. 
!!!Requirements
This script requires the following modules to run. Make sure you have the latest versions downloaded to your script directory.
[[ml_utilities]]
!!!UI Options
|<html></html>|Lock selected attributes.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Hide selected attributes.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Lock and hide selected attributes.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Unlock selected attributes.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Unhide all core attributes.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Unlock and unhide selected attributes.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!!More Info
*[[ml_lockAndHideAttributes Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_lockAndHideAttributes]]
*<html>Creative Commons License</html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
!!!Revision History
|Revision 1|bgcolor(lightgrey):2011-10-08|First publish.|
!!!Installing the File
To use [[ml_lockAndHideAttributes]], download [[ml_lockAndHideAttributes.py|http://morganloomis.com/download/ml_lockAndHideAttributes.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_lockAndHideAttributes.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_lockAndHideAttributes
ml_lockAndHideAttributes.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_lockAndHideAttributes;ml_lockAndHideAttributes.ui()");
}}}
<html>
 
 
ml_lockAndHideAttributes
index
http://morganloomis.com/download/ml_lockAndHideAttributes.py

#   -= ml_lockAndHideAttributes.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 1, 2011-10-08
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_lockAndHideAttributes.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_lockAndHideAttributes
#     ml_lockAndHideAttributes.ui()
# From MEL, this looks like:
#     python("import ml_lockAndHideAttributes;ml_lockAndHideAttributes.ui()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Quickly set the locked and keyable state of attributes in the channel box. This tool
# is designed to be used as hotkeys for quickly locking and hiding attributes. It will operate
# on all visible attributes, unless specific channels are selected. When using to unhide attributes,
# it will unhide all standard transform attributes, and all user defined attributes.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the UI, select channels in the channel box, and hit the appropriate button to
# lock, hide, unlock or unhide channels. Right click the buttons to create hotkeys
# or shelf buttons.
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [Lock] : Lock selected attributes.
# [Hide] : Hide selected attributes.
# [Lock and Hide] : Lock and hide selected attributes.
# [Unlock] : Unlock selected attributes.
# [Unhide] : Unhide all core attributes.
# [Unlock and Unhide] : Unlock and unhide selected attributes.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
maya.mel
ml_utilities

 
Functions
       
hide(*args)
lock(*args)
lockAndHide(*args)
setAttributeState(lock=None, hide=None)
ui()
User interface for ml_lockAndHideAttributes
unhide(*args)
unlock(*args)
unlockAndUnhide(*args)

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 1

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[ml_worldBake.py|http://morganloomis.com/download/ml_worldBake.py]]  |
|bgcolor(lightgrey):Revision|  8  |
|bgcolor(lightgrey):Last Update|  2011-05-14  |
|>|[[Installation Instructions|Installing ml_worldBake.py]]|
!!!Description
Temporarily bake animation to locators in world space. Use  this tool to preserve the worldspace position of animation when you need to make positional changes to an object's parent. 
!!!Usage
Run the tool, select the objects, then press the "To Locators" button. When you're ready to bake back, select the locators and press the  "From Locators" button. Checking "Bake on Ones" will bake every frame, otherwise the keytimes will be derived from the original animation. 
!!!Requirements
This script requires the following modules to run. Make sure you have the latest versions downloaded to your script directory.
[[ml_utilities]]
!!!UI Options
|<html></html> Bake on Ones|Bake every frame. If deselected, the tool will preserve keytimes.|
|<html></html>|Bake selected object to locators in world space.|
|<html></html>|Bake from selected locators back to their source objects.|
|<html></html>|Bake from the first selected object directly to the second.|
!!!More Info
*[[ml_worldBake Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_worldBake]]
*<html>Creative Commons License</html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
!!!Revision History
|Revision 8|bgcolor(lightgrey):2011-05-14|fixed error baking things with transforms locked or hidden|
|Revision 7|bgcolor(lightgrey):2011-05-13|fixed a bug with transferring certain types of tangents.|
|Revision 6|bgcolor(lightgrey):|Updated to use ml_utilities. Changed from direct constraint to constrained duplicate node.|
|Revision 1|bgcolor(lightgrey):|First publish|
!!!Installing the File
To use [[ml_worldBake]], download [[ml_worldBake.py|http://morganloomis.com/download/ml_worldBake.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_worldBake.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_worldBake
ml_worldBake.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_worldBake;ml_worldBake.ui()");
}}}
<html>
 
 
ml_worldBake
index
http://morganloomis.com/download/ml_worldBake.py

#   -= ml_worldBake.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 8, 2011-05-14
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_worldBake.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_worldBake
#     ml_worldBake.ui()
# From MEL, this looks like:
#     python("import ml_worldBake;ml_worldBake.ui()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 
#  
# Temporarily bake animation to locators in world space.
# Use  this tool to preserve the worldspace position of animation when you need to make
# positional changes to an object's parent.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
#  
# Run the tool, select the objects, then press the "To Locators" button.
# When you're ready to bake back, select the locators and press the 
# "From Locators" button. Checking "Bake on Ones" will bake every frame,
# otherwise the keytimes will be derived from the original animation.
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [] Bake on Ones : Bake every frame. If deselected, the tool will preserve keytimes.
# [To Locators] : Bake selected object to locators in world space.
# [From Locators] : Bake from selected locators back to their source objects.
# [Bake Selected] : Bake from the first selected object directly to the second.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
ml_utilities

 
Functions
       
fromLocators(bakeOnOnes=False)
Traces connections from selected locators to their source nodes, and 
bakes their position back.
Arguments:
    bakeOnOnes :: Bool :: Preserve the original keytimes from the locator.
matchBake(source=None, destination=None, bakeOnOnes=False)
toLocators(bakeOnOnes=False)
Creates locators, and bakes their position to selection.
Creates connections to the source objects, so they can 
be found later to bake back.
ui()
User interface for world bake

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 8

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[ml_arcTracer.py|http://morganloomis.com/download/ml_arcTracer.py]]  |
|bgcolor(lightgrey):Revision|  3  |
|bgcolor(lightgrey):Last Update|  2011-05-14  |
|>|[[Installation Instructions|Installing ml_arcTracer.py]]|
!!!Description
This tool is a substitute for tracing arcs on your screen by hand with a marker. It creates a thick line to represent the path of an object, either as an overlay on your camera view, or in world space. It's a bake process; like a marker it doesn't update interactively. Lines are colored randomly, to distinguish between multiple traces. Frames are marked along the arc as black dots, with keyframes colored red, and the current frame is highlighted. 
!!!Usage
Run the UI, and press the buttons to choose the action. 
!!!Requirements
[[euclid.py|http://partiallydisassembled.net/euclid.html]]
[[ml_utilities]]
!!!UI Options
|<html></html>|Trace an arc as an overlay over the current camera.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Trace an arc in world space.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Retrace the previously traced arc.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Clear all arcs.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!!Video Tutorial

<html>
</html> !!!More Info *[[ml_arcTracer Python Documentation]] *Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_arcTracer]] *<html>Creative Commons License</html> *//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]// !!!Revision History |Revision 3|bgcolor(lightgrey):2011-05-14|Revision notes update.| |Revision 2|bgcolor(lightgrey):2011-05-14|minor bug fix involving error with duplicate names| |Revision 1|bgcolor(lightgrey):2011-05-01|First publish|
!!!Installing the File
To use [[ml_arcTracer]], download [[ml_arcTracer.py|http://morganloomis.com/download/ml_arcTracer.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_arcTracer.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_arcTracer
ml_arcTracer.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_arcTracer;ml_arcTracer.ui()");
}}}
<html>
 
 
ml_arcTracer
index
http://morganloomis.com/download/ml_arcTracer.py

#   -= ml_arcTracer.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 3, 2011-05-14
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_arcTracer.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_arcTracer
#     ml_arcTracer.ui()
# From MEL, this looks like:
#     python("import ml_arcTracer;ml_arcTracer.ui()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# This tool is a substitute for tracing arcs on your screen by hand with a marker.
# It creates a thick line to represent the path of an object, either as an overlay on your camera view,
# or in world space. It's a bake process; like a marker it doesn't update interactively.
# Lines are colored randomly, to distinguish between multiple traces.
# Frames are marked along the arc as black dots, with keyframes colored red, and
# the current frame is highlighted.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the UI, and press the buttons to choose the action.
#      ____________________
# - -/__ Video Tutorial __/- - - - - - - - - - - - - - - - - - - - - - - - - 

http://www.youtube.com/watch?v=xLA1aglvPYM
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [Trace Camera] : Trace an arc as an overlay over the current camera.
# [Trace World] : Trace an arc in world space.
# [Retrace Previous] : Retrace the previously traced arc.
# [Clear Arcs] : Clear all arcs.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the euclid module, which can be downloaded here:
#       http://partiallydisassembled.net/euclid.html
# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
euclid
maya.cmds
maya.mel
random
ml_utilities

 
Functions
       
applyBrush(curve, parent)
Simply applies the paint effects brush to the curve with the settings we want.
clearArcs(*args)
Simply deletes the arc group by name.
retraceArc(*args)
Reads the global variables to trace the previous selection and settings.
traceArc(space='camera')
The main function for creating the arc.
traceCamera(*args)
Wrapper for tracing in camera space
traceWorld(*args)
Wrapper for tracing in world space
ui()
User interface for world bake

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 3

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[test.py|http://morganloomis.com/download/test.py]]  |
|bgcolor(lightgrey):Revision|  12  |
|>|[[Installation Instructions|Installing test.py]]|
!!!Description
This is a tool for creating animation holds, either for individual poses or over a range of keys. Select a range of keys in the graph editor or the time slider, or match your current pose to the next or previous one. 
!!!Usage
Run the UI.  Press Next and Previous to match keys to the value of next or previous keyframes. Press Current or Average to turn a frame range into a hold. Current sets the  hold to be the current value, and average sets the value to the average of  all keys across the range. The range is determined by one of 3 things,  in the following order: 1. Selected range in the time slider. 2. The highest and lowest selected keys in the graph editor. 3. If nothing is selected, the previous and next keys from the current time determine the range. If you have no keys selectd, all commands will operate only on curves that are visibile in the graph editor. 
!!!Requirements

[[ml_utilities]]
!!!UI Options
|<html></html>|Creates a hold for the selected range, or the surrounding keys, based on current frame.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Creates a hold for the selected range, or the surrounding keys, based on average of keys.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Matches selected key or current frame to the previous keyframe value.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Matches selected key or current frame to the next keyframe value.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!!Video Tutorial

<html>
</html> !!!More Info *[[test Python Documentation]] *Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With test]] *<html>Creative Commons License</html> *//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]// !!!Revision History |Revision 12|bgcolor(lightgrey):2011-05-05|Added revision notes.|
!!!Installing the File
To use [[test]], download [[test.py|http://morganloomis.com/download/test.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/test.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import test
test.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import test;test.ui()");
}}}
<html>
 
 
test
index
http://morganloomis.com/download/test.py

#   -= test.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 7, 2011-05-05
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/test.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import test
#     test.ui()
# From MEL, this looks like:
#     python("import test;test.ui()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# This is a tool for creating animation holds, either for individual
# poses or over a range of keys. Select a range of keys in the graph editor
# or the time slider, or match your current pose to the next or previous one.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the UI. 
# Press Next and Previous to match keys to the value of next or previous keyframes.
# Press Current or Average to turn a frame range into a hold. Current sets the 
# hold to be the current value, and average sets the value to the average of 
# all keys across the range. The range is determined by one of 3 things, 
# in the following order: 1. Selected range in the time slider. 2. The highest
# and lowest selected keys in the graph editor. 3. If nothing is selected,
# the previous and next keys from the current time determine the range.
# If you have no keys selectd, all commands will operate only on curves
# that are visibile in the graph editor.
#      ____________________
# - -/__ Video Tutorial __/- - - - - - - - - - - - - - - - - - - - - - - - - 

http://www.youtube.com/watch?v=fOeDwGbuHFE
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [Hold Current] : Creates a hold for the selected range, or the surrounding keys, based on current frame.
# [Hold Average] : Creates a hold for the selected range, or the surrounding keys, based on average of keys.
# [<< Previous] : Matches selected key or current frame to the previous keyframe value.
# [Next >>] : Matches selected key or current frame to the next keyframe value.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
maya.mel
ml_utilities

 
Functions
       
average(*args)
Creates a hold for the selected range, or the surrounding keys, based on average of keys.
current(*args)
Creates a hold for the selected range, or the surrounding keys, based on current frame.
holdFrame(next=False, previous=False)
Creates a hold between the specified key or frame and the next or previous key
Arguments:
    next: Match the value of the specified frame to the next key in time.
    previous: Match the value of the specified frame to the previous key in time.
holdRange(current=False, average=False)
Create a hold over a range of frames. 
Arguments:
    current: hold value comes from current frame
    average: hold value comes from the average of all keys over the range.
next(*args)
Matches selected key or current frame to the next keyframe value.
previous(*args)
Matches selected key or current frame to the previous keyframe value.
ui()
user interface for ml_hold

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 12

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]  |
|bgcolor(lightgrey):Revision|  2  |
|>|[[Installation Instructions|Installing ml_utilities.py]]|
!!!Description
ml_utilities isn't a stand alone tool, but rather it's a collection of support functions that are required by several of the tools in this library. The individual tools will tell you if this script is required. 
!!!Usage
ml_utilities isn't a stand alone tool, and so it isn't meant to be used directly. 
!!!More Info
*[[ml_utilities Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_utilities]]
*<html>Creative Commons License</html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
!!!Installing the File
To use [[ml_utilities]], download [[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_utilities.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_utilities
ml_utilities.help()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_utilities;ml_utilities.help()");
}}}
<html>
 
 
ml_utilities
index
http://morganloomis.com/download/ml_utilities.py

#   -= ml_utilities.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 2, 2011-05-04
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_utilities.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_utilities
#     ml_utilities.help()
# From MEL, this looks like:
#     python("import ml_utilities;ml_utilities.help()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# ml_utilities isn't a stand alone tool, but rather it's a collection of support functions
# that are required by several of the tools in this library. The individual tools will tell
# you if this script is required.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# ml_utilities isn't a stand alone tool, and so it isn't meant to be used directly.
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
maya.mel
os
re
shutil

 
Classes
       
__builtin__.object
Dragger
IsolateViews
MlUi
UndoChunk

 
class Dragger(__builtin__.object)
     Methods defined here:
__init__(self, name='mlDraggerContext', title='Dragger', defaultValue=0, minValue=None, maxValue=None, multiplier=0.01, cursor='hand')
drag(self, *args)
dragControlLeft(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragControlMiddle(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragLeft(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragMiddle(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftLeft(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftMiddle(self)
Placeholder for potential commands. This is meant to be overridden by a child class.
drawString(self, message)
Creates a string message at the position of the pointer.
press(self, *args)
Be careful overwriting the press method in child classes, because of the undoInfo openChunk
release(self, *args)
Be careful overwriting the release method in child classes. Not closing the undo chunk leaves maya in a sorry state.
setTool(self)

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class IsolateViews
    Isolates selection with nothing selected for all viewports
This speeds up any process that causes the viewport to refresh,
such as baking or changing time.
 
  Methods defined here:
__enter__(self)
__exit__(self, *args)
isolate(self, state)

 
class MlUi
    Window template for consistency
 
  Methods defined here:
__enter__(self)
Initialize the UI
__exit__(self, *args)
Finalize the UI
__init__(self, name, title, width=400, height=200, info='')
buttonWithPopup(self, label=None, command=None, annotation='', shelfLabel='ml', shelfIcon='render_useBackground')
Create a button and attach a popup menu to a control with options to create a shelf button or a hotkey.
The argCommand should return a kwargs dictionary that can be used as args for the main command.
hotkeyMenuItem(self, command=None, annotation='', menuLabel='Create Hotkey')
This creates a menuItem that can be attached to a control to create a hotkey with the given command
shelfMenuItem(self, command=None, annotation='', shelfLabel='ml', shelfIcon='menuIconConstraints', menuLabel='Create Shelf Button')
This creates a menuItem that can be attached to a control to create a shelf menu with the given command

 
class UndoChunk
    In versions of maya before 2011, python doesn't always undo properly, so in 
some cases we have to manage the undo queue ourselves.
 
  Methods defined here:
__enter__(self)
open the undo chunk
__exit__(self, *args)
close the undo chunk

 
Functions
       
createHotkey(command, name, description='')
Open up the hotkey editor to create a hotkey from the specified command
createShelfButton(command, label, name=None, description='', image='render_useBackground', labelColor=(1, 0.5, 0), labelBackgroundColor=(0, 0, 0, 0.5), backgroundColor=None)
Create a shelf button for the command on the current shelf
deselectChannels()
Deselect selected channels in the channelBox
by clearing selection and then re-selecting
formLayoutGrid(form, controls, offset=1)
Controls should be a list of lists, and this will arrange them in a grid
frameRange(start=None, end=None)
Returns the frame range based on the highlighted timeslider,
or otherwise the playback range.
getChannelFromAnimCurve(curve)
Finding the channel associated with a curve has gotten really complicated since animation layers.
This is a recursive function which walks connections from a curve until an animated channel is found.
getCurrentCamera()
Returns the camera that you're currently looking through
getNamespace(node)
Returns the namespace of a node with simple string parsing
getSelectedChannels()
Return channels that are selected in the channelbox
help()
This just launches the online help and serves as a placeholder for the default function for this script.
renderShelfIcon(name='tmp', width=32, height=32)
This renders a shelf-sized icon and hopefully places it in your icon directory
upToDateCheck(revision, prompt=True)
This is a check that can be run by scripts that import ml_utilities to make sure they
have the correct version.

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 2

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey):Download|  [[ml_hold.py|http://morganloomis.com/download/ml_hold.py]]  |
|bgcolor(lightgrey):Revision|  4  |
|>|[[Installation Instructions|Installing ml_hold.py]]|
!!!Description
This is a tool for creating animation holds, either for individual poses or over a range of keys. Select a range of keys in the graph editor or the time slider, or match your current pose to the next or previous one. 
!!!Usage
Run the UI.  Press Next and Previous to match keys to the value of next or previous keyframes. Press Current or Average to turn a frame range into a hold. Current sets the  hold to be the current value, and average sets the value to the average of  all keys across the range. The range is determined by one of 3 things,  in the following order: 1. Selected range in the time slider. 2. The highest and lowest selected keys in the graph editor. 3. If nothing is selected, the previous and next keys from the current time determine the range. If you have no keys selectd, all commands will operate only on curves that are visibile in the graph editor. 
!!!Requirements

[[ml_utilities]]
!!!UI Options
|<html></html>|Creates a hold for the selected range, or the surrounding keys, based on current frame.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Creates a hold for the selected range, or the surrounding keys, based on average of keys.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Matches selected key or current frame to the previous keyframe value.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Matches selected key or current frame to the next keyframe value.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!!Video Tutorial

<html>
</html> !!!More Info *[[ml_hold Python Documentation]] *Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_hold]] *<html>Creative Commons License</html> *//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
!!!Installing the File
To use [[ml_hold]], download [[ml_hold.py|http://morganloomis.com/download/ml_hold.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_hold.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_hold
ml_hold.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_hold;ml_hold.ui()");
}}}
<html>
 
 
ml_hold
index
http://morganloomis.com/download/ml_hold.py

#   -= ml_hold.py =-
#                __   by Morgan Loomis
#     ____ ___  / /  http://morganloomis.com
#    / __ `__ \/ /  Licensed under Creative Commons BY-SA
#   / / / / / / /  http://creativecommons.org/licenses/by-sa/3.0/
#  /_/ /_/ /_/_/  _________                                   
#               /_________/  Revision 4, 2011-05-01
#      _______________________________
# - -/__ Installing Python Scripts __/- - - - - - - - - - - - - - - - - - - - 

# Copy this file into your maya scripts directory, for example:
#     C:/Documents and Settings/user/My Documents/maya/scripts/ml_hold.py

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_hold
#     ml_hold.ui()
# From MEL, this looks like:
#     python("import ml_hold;ml_hold.ui()");
#      _________________
# - -/__ Description __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# This is a tool for creating animation holds, either for individual
# poses or over a range of keys. Select a range of keys in the graph editor
# or the time slider, or match your current pose to the next or previous one.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the UI. 
# Press Next and Previous to match keys to the value of next or previous keyframes.
# Press Current or Average to turn a frame range into a hold. Current sets the 
# hold to be the current value, and average sets the value to the average of 
# all keys across the range. The range is determined by one of 3 things, 
# in the following order: 1. Selected range in the time slider. 2. The highest
# and lowest selected keys in the graph editor. 3. If nothing is selected,
# the previous and next keys from the current time determine the range.
# If you have no keys selectd, all commands will operate only on curves
# that are visibile in the graph editor.
#      ____________________
# - -/__ Video Tutorial __/- - - - - - - - - - - - - - - - - - - - - - - - - 

http://www.youtube.com/watch?v=fOeDwGbuHFE
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [Hold Current] : Creates a hold for the selected range, or the surrounding keys, based on current frame.
# [Hold Average] : Creates a hold for the selected range, or the surrounding keys, based on average of keys.
# [<< Previous] : Matches selected key or current frame to the previous keyframe value.
# [Next >>] : Matches selected key or current frame to the next keyframe value.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

# This script requires the ml_utilities module, which can be downloaded here:
#       http://morganloomis.com/wiki/tools.html#ml_utilities
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
maya.mel
ml_utilities

 
Functions
       
average(*args)
Creates a hold for the selected range, or the surrounding keys, based on average of keys.
current(*args)
Creates a hold for the selected range, or the surrounding keys, based on current frame.
holdFrame(next=False, previous=False)
Creates a hold between the specified key or frame and the next or previous key
Arguments:
    next: Match the value of the specified frame to the next key in time.
    previous: Match the value of the specified frame to the previous key in time.
holdRange(current=False, average=False)
Create a hold over a range of frames. 
Arguments:
    current: hold value comes from current frame
    average: hold value comes from the average of all keys over the range.
next(*args)
Matches selected key or current frame to the next keyframe value.
previous(*args)
Matches selected key or current frame to the previous keyframe value.
ui()
user interface for ml_hold

 
Data
        __author__ = 'Morgan Loomis'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 4

 
Author
        Morgan Loomis
</html>
!!!Installing the File
To use [[ml_breakdownDragger]], download [[ml_breakdownDragger.py|http://morganloomis.com/download/ml_breakdownDragger.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_breakdownDragger.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_breakdownDragger
ml_breakdownDragger.drag()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_breakdownDragger;ml_breakdownDragger.drag()");
}}}
!!!Installing the File
To use [[ml_keyValueDragger]], download [[ml_keyValueDragger.py|http://morganloomis.com/download/ml_keyValueDragger.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_keyValueDragger.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_keyValueDragger
ml_keyValueDragger.drag()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_keyValueDragger;ml_keyValueDragger.drag()");
}}}
!!!Installing the File
To use [[ml_resetChannels]], download [[ml_resetChannels.py|http://morganloomis.com/download/ml_resetChannels.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_resetChannels.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_resetChannels
ml_resetChannels.resetChannels()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_resetChannels;ml_resetChannels.resetChannels()");
}}}
!!!Installing the File
To use [[ml_selectKeyed]], download [[ml_selectKeyed.py|http://morganloomis.com/download/ml_selectKeyed.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_selectKeyed.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_selectKeyed
ml_selectKeyed.selectKeyed()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_selectKeyed;ml_selectKeyed.selectKeyed()");
}}}
!!!Installing the File
To use [[ml_smartKey]], download [[ml_smartKey.py|http://morganloomis.com/download/ml_smartKey.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_smartKey.py}}}
!!!Running the Command
To run this script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_smartKey
ml_smartKey.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_smartKey;ml_smartKey.ui()");
}}}
!!!Installing the File
To use [[ml_toggleVisibility]], download [[ml_toggleVisibility.mel|http://morganloomis.com/download/ml_toggleVisibility.mel]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_toggleVisibility.mel}}}
!!!Running the Command
If maya is running, restart, or simply type:
{{{
rehash;
}}}
The MEL command is just the same as the script name, minus the .mel extention:
{{{
ml_toggleVisibility;
}}}
Type the text for 'New Tiddler'
|bgcolor(lightgrey):Download|  [[ml_breakdownDragger.py|http://morganloomis.com/download/ml_breakdownDragger.py]]  |
|bgcolor(lightgrey):Revision|  3  |
|>|[[Installation Instructions|Installing ml_breakdownDragger.py]]|
!!!Description
Blend a keyframe or pose with the next or previous keys, essentially creating a breakdown pose that is weighted one way or the other. The weight of the blend is controlled by dragging the mouse in the viewport. 
!!!Usage
Run the tool, and the cursor will turn into a hand. Left-click and hold in the viewport, and then drag either left or right to weight the key to the next or previous key. Alternately, press and hold the middle mouse button to weight the key toward or away from the average of the surrounding keys. If you have no keys selectd, the tool will act only on curves that are visibile in the graph editor. If there are no keys at the  current frame, keys will be set. 
!!!Video Tutorial

<html><center><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/D8yD4zbHTP8?fs=1&hl=en_US&color1=0xe1600f&color2=0xfebd01"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/D8yD4zbHTP8?fs=1&hl=en_US&color1=0xe1600f&color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></object></center></html>
!!!More Info
*[[ml_breakdownDragger Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_breakdownDragger]]
*<html><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png"></a></html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
<html>
<table width="100%" cellspacing="0" cellpadding="2" border="0" summary="heading">
<tbody><tr bgcolor="#7799ee">
<td valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>ml_breakdownDragger</strong></big></big></font></td><td align="right" valign="bottom"><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="http://morganloomis.com/download/ml_breakdownDragger.py">http://morganloomis.com/download/ml_breakdownDragger.py</a></font></td></tr></tbody></table>
    <p><tt>#&nbsp;&nbsp;&nbsp;-=&nbsp;ml_breakdownDragger.py&nbsp;=-<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;by&nbsp;Morgan&nbsp;Loomis<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;____&nbsp;___&nbsp;&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://morganloomis.com">http://morganloomis.com</a><br>
#&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;__&nbsp;`__&nbsp;\/&nbsp;/&nbsp;&nbsp;Licensed&nbsp;under&nbsp;Creative&nbsp;Commons&nbsp;BY-SA<br>
#&nbsp;&nbsp;&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://creativecommons.org/licenses/by-sa/3.0/">http://creativecommons.org/licenses/by-sa/3.0/</a><br>
#&nbsp;&nbsp;/_/&nbsp;/_/&nbsp;/_/_/&nbsp;&nbsp;_________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/_________/&nbsp;&nbsp;Revision&nbsp;3,&nbsp;2011-01-02<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_______________________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Installing&nbsp;Python&nbsp;Scripts&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Copy&nbsp;this&nbsp;file&nbsp;into&nbsp;your&nbsp;maya&nbsp;scripts&nbsp;directory,&nbsp;for&nbsp;example:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:/Documents&nbsp;and&nbsp;Settings/user/My&nbsp;Documents/maya/scripts/ml_breakdownDragger.py<br>
#&nbsp;<br>
#&nbsp;Run&nbsp;the&nbsp;tool&nbsp;by&nbsp;importing&nbsp;the&nbsp;module,&nbsp;and&nbsp;then&nbsp;calling&nbsp;the&nbsp;primary&nbsp;function.<br>
#&nbsp;From&nbsp;python,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;ml_breakdownDragger<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ml_breakdownDragger.<a href="#-drag">drag</a>()<br>
#&nbsp;From&nbsp;MEL,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python("import&nbsp;ml_breakdownDragger;ml_breakdownDragger.<a href="#-drag">drag</a>()");<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Description&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Blend&nbsp;a&nbsp;keyframe&nbsp;or&nbsp;pose&nbsp;with&nbsp;the&nbsp;next&nbsp;or&nbsp;previous&nbsp;keys,&nbsp;essentially<br>
#&nbsp;creating&nbsp;a&nbsp;breakdown&nbsp;pose&nbsp;that&nbsp;is&nbsp;weighted&nbsp;one&nbsp;way&nbsp;or&nbsp;the&nbsp;other.<br>
#&nbsp;The&nbsp;weight&nbsp;of&nbsp;the&nbsp;blend&nbsp;is&nbsp;controlled&nbsp;by&nbsp;dragging&nbsp;the&nbsp;mouse&nbsp;in&nbsp;the&nbsp;viewport.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___________<br>
#&nbsp;-&nbsp;-/__&nbsp;Usage&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Run&nbsp;the&nbsp;tool,&nbsp;and&nbsp;the&nbsp;cursor&nbsp;will&nbsp;turn&nbsp;into&nbsp;a&nbsp;hand.&nbsp;Left-click&nbsp;and&nbsp;hold&nbsp;in<br>
#&nbsp;the&nbsp;viewport,&nbsp;and&nbsp;then&nbsp;drag&nbsp;either&nbsp;left&nbsp;or&nbsp;right&nbsp;to&nbsp;weight&nbsp;the&nbsp;key&nbsp;to&nbsp;the<br>
#&nbsp;next&nbsp;or&nbsp;previous&nbsp;key.<br>
#&nbsp;Alternately,&nbsp;press&nbsp;and&nbsp;hold&nbsp;the&nbsp;middle&nbsp;mouse&nbsp;button&nbsp;to&nbsp;weight&nbsp;the&nbsp;key&nbsp;toward<br>
#&nbsp;or&nbsp;away&nbsp;from&nbsp;the&nbsp;average&nbsp;of&nbsp;the&nbsp;surrounding&nbsp;keys.<br>
#&nbsp;If&nbsp;you&nbsp;have&nbsp;no&nbsp;keys&nbsp;selectd,&nbsp;the&nbsp;tool&nbsp;will&nbsp;act&nbsp;only&nbsp;on&nbsp;curves<br>
#&nbsp;that&nbsp;are&nbsp;visibile&nbsp;in&nbsp;the&nbsp;graph&nbsp;editor.&nbsp;If&nbsp;there&nbsp;are&nbsp;no&nbsp;keys&nbsp;at&nbsp;the&nbsp;<br>
#&nbsp;current&nbsp;frame,&nbsp;keys&nbsp;will&nbsp;be&nbsp;set.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;____________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Video&nbsp;Tutorial&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;<a href="http://www.youtube.com/watch?v=D8yD4zbHTP8">http://www.youtube.com/watch?v=D8yD4zbHTP8</a><br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__________<br>
#&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;/_&nbsp;Enjoy!&nbsp;_/-&nbsp;-&nbsp;-</tt></p>
<p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#aa55cc">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
    
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tbody><tr><td width="25%" valign="top"><a href="maya.cmds.html">maya.cmds</a><br>
</td><td width="25%" valign="top"><a href="maya.mel.html">maya.mel</a><br>
</td><td width="25%" valign="top"></td><td width="25%" valign="top"></td></tr></tbody></table></td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#ee77aa">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
    
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="__builtin__.html#object">__builtin__.object</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="ml_breakdownDragger.html#Dragger">Dragger</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="ml_breakdownDragger.html#BreakdownDragger">BreakdownDragger</a>
</font></dt></dl>
</dd>
</dl>
</dd>
</dl>
 <p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#ffc8d8">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="BreakdownDragger">class <strong>BreakdownDragger</strong></a>(<a href="ml_breakdownDragger.html#Dragger">Dragger</a>)</font></td></tr>
    
<tr bgcolor="#ffc8d8"><td rowspan="2"><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan="2"><tt>Creates&nbsp;the&nbsp;tool&nbsp;and&nbsp;manages&nbsp;the&nbsp;data<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%"><dl><dt>Method resolution order:</dt>
<dd><a href="ml_breakdownDragger.html#BreakdownDragger">BreakdownDragger</a></dd>
<dd><a href="ml_breakdownDragger.html#Dragger">Dragger</a></dd>
<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
</dl>
<hr>
Methods defined here:<br>
<dl><dt><a name="BreakdownDragger-__init__"><strong>__init__</strong></a>(self, name<font color="#909090">='mlBreakdownDraggerContext'</font>, minValue<font color="#909090">=None</font>, maxValue<font color="#909090">=None</font>, defaultValue<font color="#909090">=0</font>, title<font color="#909090">='Breakdown'</font>)</dt></dl>

<dl><dt><a name="BreakdownDragger-dragLeft"><strong>dragLeft</strong></a>(self)</dt><dd><tt>This&nbsp;is&nbsp;activated&nbsp;by&nbsp;the&nbsp;left&nbsp;mouse&nbsp;button,&nbsp;and&nbsp;weights&nbsp;to&nbsp;the&nbsp;next&nbsp;or&nbsp;previous&nbsp;keys.</tt></dd></dl>

<dl><dt><a name="BreakdownDragger-dragMiddle"><strong>dragMiddle</strong></a>(self)</dt><dd><tt>This&nbsp;is&nbsp;activated&nbsp;by&nbsp;the&nbsp;middle&nbsp;mouse&nbsp;button,&nbsp;and&nbsp;weights&nbsp;to&nbsp;the&nbsp;average&nbsp;of&nbsp;the&nbsp;surrounding&nbsp;keys.</tt></dd></dl>

<dl><dt><a name="BreakdownDragger-dragShiftLeft"><strong>dragShiftLeft</strong></a>(self)</dt><dd><tt>This&nbsp;is&nbsp;activated&nbsp;by&nbsp;Shift&nbsp;and&nbsp;the&nbsp;left&nbsp;mouse&nbsp;button,&nbsp;and&nbsp;weights&nbsp;to&nbsp;the&nbsp;next&nbsp;or&nbsp;previous&nbsp;keys,&nbsp;without&nbsp;clamping.</tt></dd></dl>

<hr>
Methods inherited from <a href="ml_breakdownDragger.html#Dragger">Dragger</a>:<br>
<dl><dt><a name="BreakdownDragger-drag"><strong>drag</strong></a>(self, *args)</dt><dd><tt>Called&nbsp;continuously&nbsp;when&nbsp;holding&nbsp;the&nbsp;mouse&nbsp;button&nbsp;down,&nbsp;updates&nbsp;self.<strong>x</strong>&nbsp;and&nbsp;self.<strong>y</strong>&nbsp;with&nbsp;the&nbsp;mouse&nbsp;position,<br>
and&nbsp;runs&nbsp;the&nbsp;corresponding&nbsp;method&nbsp;for&nbsp;whichever&nbsp;button&nbsp;is&nbsp;being&nbsp;pressed.</tt></dd></dl>

<dl><dt><a name="BreakdownDragger-dragControlLeft"><strong>dragControlLeft</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="BreakdownDragger-dragControlMiddle"><strong>dragControlMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="BreakdownDragger-dragShiftMiddle"><strong>dragShiftMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="BreakdownDragger-drawString"><strong>drawString</strong></a>(self, message)</dt><dd><tt>Simply&nbsp;writes&nbsp;a&nbsp;message&nbsp;next&nbsp;to&nbsp;the&nbsp;cursor</tt></dd></dl>

<dl><dt><a name="BreakdownDragger-press"><strong>press</strong></a>(self, *args)</dt><dd><tt>This&nbsp;method&nbsp;is&nbsp;called&nbsp;when&nbsp;the&nbsp;mouse&nbsp;is&nbsp;pressed,&nbsp;and&nbsp;initializes&nbsp;the&nbsp;mouse&nbsp;position.<br>
Be&nbsp;careful&nbsp;overwriting&nbsp;the&nbsp;press&nbsp;method&nbsp;in&nbsp;child&nbsp;classes,&nbsp;because&nbsp;of&nbsp;the&nbsp;undoInfo&nbsp;openChunk.</tt></dd></dl>

<dl><dt><a name="BreakdownDragger-release"><strong>release</strong></a>(self, *args)</dt><dd><tt>Called&nbsp;when&nbsp;the&nbsp;mouse&nbsp;button&nbsp;is&nbsp;released,&nbsp;and&nbsp;cleans&nbsp;up&nbsp;after&nbsp;the&nbsp;tool.<br>
Be&nbsp;careful&nbsp;overwriting&nbsp;the&nbsp;release&nbsp;method&nbsp;in&nbsp;child&nbsp;classes.&nbsp;Not&nbsp;closing&nbsp;the&nbsp;undo&nbsp;chunk&nbsp;leaves&nbsp;maya&nbsp;in&nbsp;a&nbsp;sorry&nbsp;state.</tt></dd></dl>

<dl><dt><a name="BreakdownDragger-setTool"><strong>setTool</strong></a>(self)</dt></dl>

<hr>
Data descriptors inherited from <a href="ml_breakdownDragger.html#Dragger">Dragger</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
</td></tr></tbody></table> <p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#ffc8d8">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="Dragger">class <strong>Dragger</strong></a>(<a href="__builtin__.html#object">__builtin__.object</a>)</font></td></tr>
    
<tr bgcolor="#ffc8d8"><td rowspan="2"><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan="2"><tt>A&nbsp;base&nbsp;class&nbsp;for&nbsp;creating&nbsp;a&nbsp;draggerContext&nbsp;tool&nbsp;in&nbsp;Maya<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="Dragger-__init__"><strong>__init__</strong></a>(self, name<font color="#909090">='mlDraggerContext'</font>, title<font color="#909090">='Dragger'</font>, defaultValue<font color="#909090">=0</font>, minValue<font color="#909090">=None</font>, maxValue<font color="#909090">=None</font>, multiplier<font color="#909090">=0.01</font>, cursor<font color="#909090">='hand'</font>)</dt><dd><tt>Args:<br>
&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;name&nbsp;of&nbsp;the&nbsp;context&nbsp;tool&nbsp;in&nbsp;Maya<br>
&nbsp;&nbsp;&nbsp;&nbsp;title:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;nice&nbsp;name&nbsp;of&nbsp;the&nbsp;tool<br>
&nbsp;&nbsp;&nbsp;&nbsp;defaultValue:&nbsp;&nbsp;&nbsp;The&nbsp;starting&nbsp;value&nbsp;of&nbsp;the&nbsp;dragger&nbsp;when&nbsp;the&nbsp;mouse&nbsp;button&nbsp;is&nbsp;pushed.<br>
&nbsp;&nbsp;&nbsp;&nbsp;minValue:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;specified,&nbsp;clamp&nbsp;the&nbsp;minimum&nbsp;output&nbsp;at&nbsp;this&nbsp;value<br>
&nbsp;&nbsp;&nbsp;&nbsp;maxValue:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;specified,&nbsp;clamp&nbsp;the&nbsp;maximum&nbsp;output&nbsp;at&nbsp;this&nbsp;value<br>
&nbsp;&nbsp;&nbsp;&nbsp;multiplier:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scale&nbsp;the&nbsp;output&nbsp;of&nbsp;the&nbsp;dragger&nbsp;by&nbsp;this&nbsp;value.<br>
&nbsp;&nbsp;&nbsp;&nbsp;cursor:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;What&nbsp;type&nbsp;of&nbsp;cursor&nbsp;to&nbsp;display,&nbsp;see&nbsp;Maya's&nbsp;draggerContext&nbsp;for&nbsp;options</tt></dd></dl>

<dl><dt><a name="Dragger-drag"><strong>drag</strong></a>(self, *args)</dt><dd><tt>Called&nbsp;continuously&nbsp;when&nbsp;holding&nbsp;the&nbsp;mouse&nbsp;button&nbsp;down,&nbsp;updates&nbsp;self.<strong>x</strong>&nbsp;and&nbsp;self.<strong>y</strong>&nbsp;with&nbsp;the&nbsp;mouse&nbsp;position,<br>
and&nbsp;runs&nbsp;the&nbsp;corresponding&nbsp;method&nbsp;for&nbsp;whichever&nbsp;button&nbsp;is&nbsp;being&nbsp;pressed.</tt></dd></dl>

<dl><dt><a name="Dragger-dragControlLeft"><strong>dragControlLeft</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragControlMiddle"><strong>dragControlMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragLeft"><strong>dragLeft</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragMiddle"><strong>dragMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragShiftLeft"><strong>dragShiftLeft</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragShiftMiddle"><strong>dragShiftMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-drawString"><strong>drawString</strong></a>(self, message)</dt><dd><tt>Simply&nbsp;writes&nbsp;a&nbsp;message&nbsp;next&nbsp;to&nbsp;the&nbsp;cursor</tt></dd></dl>

<dl><dt><a name="Dragger-press"><strong>press</strong></a>(self, *args)</dt><dd><tt>This&nbsp;method&nbsp;is&nbsp;called&nbsp;when&nbsp;the&nbsp;mouse&nbsp;is&nbsp;pressed,&nbsp;and&nbsp;initializes&nbsp;the&nbsp;mouse&nbsp;position.<br>
Be&nbsp;careful&nbsp;overwriting&nbsp;the&nbsp;press&nbsp;method&nbsp;in&nbsp;child&nbsp;classes,&nbsp;because&nbsp;of&nbsp;the&nbsp;undoInfo&nbsp;openChunk.</tt></dd></dl>

<dl><dt><a name="Dragger-release"><strong>release</strong></a>(self, *args)</dt><dd><tt>Called&nbsp;when&nbsp;the&nbsp;mouse&nbsp;button&nbsp;is&nbsp;released,&nbsp;and&nbsp;cleans&nbsp;up&nbsp;after&nbsp;the&nbsp;tool.<br>
Be&nbsp;careful&nbsp;overwriting&nbsp;the&nbsp;release&nbsp;method&nbsp;in&nbsp;child&nbsp;classes.&nbsp;Not&nbsp;closing&nbsp;the&nbsp;undo&nbsp;chunk&nbsp;leaves&nbsp;maya&nbsp;in&nbsp;a&nbsp;sorry&nbsp;state.</tt></dd></dl>

<dl><dt><a name="Dragger-setTool"><strong>setTool</strong></a>(self)</dt></dl>

<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
</td></tr></tbody></table></td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#eeaa77">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt><a name="-drag"><strong>drag</strong></a>()</dt><dd><tt>The&nbsp;primary&nbsp;command&nbsp;to&nbsp;run&nbsp;the&nbsp;tool</tt></dd></dl>
</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#55aa55">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
    
<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><strong>__author__</strong> = 'Morgan Loomis'<br>
<strong>__license__</strong> = 'Creative Commons Attribution-ShareAlike'<br>
<strong>__revision__</strong> = 3</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#7799ee">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Author</strong></big></font></td></tr>
    
<tr><td bgcolor="#7799ee"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%">Morgan&nbsp;Loomis</td></tr></tbody></table></html>
|bgcolor(lightgrey):Download|  [[ml_keyValueDragger.py|http://morganloomis.com/download/ml_keyValueDragger.py]]  |
|bgcolor(lightgrey):Revision|  1  |
|>|[[Installation Instructions|Installing ml_keyValueDragger.py]]|
!!!Description
Scale keyframes to their default value by dragging in the viewport. 
!!!Usage
Run the tool, and the cursor will turn into a hand. Left-click and hold in the viewport, and then drag either left or right to scale the key value up or down. If you have no keys selectd, the tool will act only on curves that are visibile in the graph editor. If there are no keys at the  current frame, keys will be set. 
!!!More Info
*[[ml_keyValueDragger Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_keyValueDragger]]
*<html><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png"></a></html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
<html>
<table width="100%" cellspacing="0" cellpadding="2" border="0" summary="heading">
<tbody><tr bgcolor="#7799ee">
<td valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>ml_keyValueDragger</strong></big></big></font></td><td align="right" valign="bottom"><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="http://morganloomis.com/download/ml_keyValueDragger.py">http://morganloomis.com/download/ml_keyValueDragger.py</a></font></td></tr></tbody></table>
    <p><tt>#&nbsp;&nbsp;&nbsp;-=&nbsp;ml_keyValueDragger.py&nbsp;=-<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;by&nbsp;Morgan&nbsp;Loomis<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;____&nbsp;___&nbsp;&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://morganloomis.com">http://morganloomis.com</a><br>
#&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;__&nbsp;`__&nbsp;\/&nbsp;/&nbsp;&nbsp;Licensed&nbsp;under&nbsp;Creative&nbsp;Commons&nbsp;BY-SA<br>
#&nbsp;&nbsp;&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://creativecommons.org/licenses/by-sa/3.0/">http://creativecommons.org/licenses/by-sa/3.0/</a><br>
#&nbsp;&nbsp;/_/&nbsp;/_/&nbsp;/_/_/&nbsp;&nbsp;_________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/_________/&nbsp;&nbsp;Revision&nbsp;1,&nbsp;2011-01-10<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_______________________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Installing&nbsp;Python&nbsp;Scripts&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Copy&nbsp;this&nbsp;file&nbsp;into&nbsp;your&nbsp;maya&nbsp;scripts&nbsp;directory,&nbsp;for&nbsp;example:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:/Documents&nbsp;and&nbsp;Settings/user/My&nbsp;Documents/maya/scripts/ml_keyValueDragger.py<br>
#&nbsp;<br>
#&nbsp;Run&nbsp;the&nbsp;tool&nbsp;by&nbsp;importing&nbsp;the&nbsp;module,&nbsp;and&nbsp;then&nbsp;calling&nbsp;the&nbsp;primary&nbsp;function.<br>
#&nbsp;From&nbsp;python,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;ml_keyValueDragger<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ml_keyValueDragger.<a href="#-drag">drag</a>()<br>
#&nbsp;From&nbsp;MEL,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python("import&nbsp;ml_keyValueDragger;ml_keyValueDragger.<a href="#-drag">drag</a>()");<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Description&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Scale&nbsp;keyframes&nbsp;to&nbsp;their&nbsp;default&nbsp;value&nbsp;by&nbsp;dragging&nbsp;in&nbsp;the&nbsp;viewport.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___________<br>
#&nbsp;-&nbsp;-/__&nbsp;Usage&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Run&nbsp;the&nbsp;tool,&nbsp;and&nbsp;the&nbsp;cursor&nbsp;will&nbsp;turn&nbsp;into&nbsp;a&nbsp;hand.&nbsp;Left-click&nbsp;and&nbsp;hold&nbsp;in<br>
#&nbsp;the&nbsp;viewport,&nbsp;and&nbsp;then&nbsp;drag&nbsp;either&nbsp;left&nbsp;or&nbsp;right&nbsp;to&nbsp;scale&nbsp;the&nbsp;key&nbsp;value&nbsp;up&nbsp;or&nbsp;down.<br>
#&nbsp;If&nbsp;you&nbsp;have&nbsp;no&nbsp;keys&nbsp;selectd,&nbsp;the&nbsp;tool&nbsp;will&nbsp;act&nbsp;only&nbsp;on&nbsp;curves<br>
#&nbsp;that&nbsp;are&nbsp;visibile&nbsp;in&nbsp;the&nbsp;graph&nbsp;editor.&nbsp;If&nbsp;there&nbsp;are&nbsp;no&nbsp;keys&nbsp;at&nbsp;the&nbsp;<br>
#&nbsp;current&nbsp;frame,&nbsp;keys&nbsp;will&nbsp;be&nbsp;set.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__________<br>
#&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;/_&nbsp;Enjoy!&nbsp;_/-&nbsp;-&nbsp;-</tt></p>
<p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#aa55cc">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
    
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tbody><tr><td width="25%" valign="top"><a href="maya.cmds.html">maya.cmds</a><br>
</td><td width="25%" valign="top"><a href="maya.mel.html">maya.mel</a><br>
</td><td width="25%" valign="top"></td><td width="25%" valign="top"></td></tr></tbody></table></td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#ee77aa">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
    
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="__builtin__.html#object">__builtin__.object</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="ml_keyValueDragger.html#Dragger">Dragger</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="ml_keyValueDragger.html#KeyValueDragger">KeyValueDragger</a>
</font></dt></dl>
</dd>
</dl>
</dd>
</dl>
 <p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#ffc8d8">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="Dragger">class <strong>Dragger</strong></a>(<a href="__builtin__.html#object">__builtin__.object</a>)</font></td></tr>
    
<tr bgcolor="#ffc8d8"><td rowspan="2"><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan="2"><tt>A&nbsp;base&nbsp;class&nbsp;for&nbsp;creating&nbsp;a&nbsp;draggerContext&nbsp;tool&nbsp;in&nbsp;Maya<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="Dragger-__init__"><strong>__init__</strong></a>(self, name<font color="#909090">='mlDraggerContext'</font>, title<font color="#909090">='Dragger'</font>, defaultValue<font color="#909090">=0</font>, minValue<font color="#909090">=None</font>, maxValue<font color="#909090">=None</font>, multiplier<font color="#909090">=0.01</font>, cursor<font color="#909090">='hand'</font>)</dt><dd><tt>Args:<br>
&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;name&nbsp;of&nbsp;the&nbsp;context&nbsp;tool&nbsp;in&nbsp;Maya<br>
&nbsp;&nbsp;&nbsp;&nbsp;title:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;nice&nbsp;name&nbsp;of&nbsp;the&nbsp;tool<br>
&nbsp;&nbsp;&nbsp;&nbsp;defaultValue:&nbsp;&nbsp;&nbsp;The&nbsp;starting&nbsp;value&nbsp;of&nbsp;the&nbsp;dragger&nbsp;when&nbsp;the&nbsp;mouse&nbsp;button&nbsp;is&nbsp;pushed.<br>
&nbsp;&nbsp;&nbsp;&nbsp;minValue:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;specified,&nbsp;clamp&nbsp;the&nbsp;minimum&nbsp;output&nbsp;at&nbsp;this&nbsp;value<br>
&nbsp;&nbsp;&nbsp;&nbsp;maxValue:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;specified,&nbsp;clamp&nbsp;the&nbsp;maximum&nbsp;output&nbsp;at&nbsp;this&nbsp;value<br>
&nbsp;&nbsp;&nbsp;&nbsp;multiplier:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scale&nbsp;the&nbsp;output&nbsp;of&nbsp;the&nbsp;dragger&nbsp;by&nbsp;this&nbsp;value.<br>
&nbsp;&nbsp;&nbsp;&nbsp;cursor:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;What&nbsp;type&nbsp;of&nbsp;cursor&nbsp;to&nbsp;display,&nbsp;see&nbsp;Maya's&nbsp;draggerContext&nbsp;for&nbsp;options</tt></dd></dl>

<dl><dt><a name="Dragger-drag"><strong>drag</strong></a>(self, *args)</dt><dd><tt>Called&nbsp;continuously&nbsp;when&nbsp;holding&nbsp;the&nbsp;mouse&nbsp;button&nbsp;down,&nbsp;updates&nbsp;self.<strong>x</strong>&nbsp;and&nbsp;self.<strong>y</strong>&nbsp;with&nbsp;the&nbsp;mouse&nbsp;position,<br>
and&nbsp;runs&nbsp;the&nbsp;corresponding&nbsp;method&nbsp;for&nbsp;whichever&nbsp;button&nbsp;is&nbsp;being&nbsp;pressed.</tt></dd></dl>

<dl><dt><a name="Dragger-dragControlLeft"><strong>dragControlLeft</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragControlMiddle"><strong>dragControlMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragLeft"><strong>dragLeft</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragMiddle"><strong>dragMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragShiftLeft"><strong>dragShiftLeft</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-dragShiftMiddle"><strong>dragShiftMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="Dragger-drawString"><strong>drawString</strong></a>(self, message)</dt><dd><tt>Simply&nbsp;writes&nbsp;a&nbsp;message&nbsp;next&nbsp;to&nbsp;the&nbsp;cursor</tt></dd></dl>

<dl><dt><a name="Dragger-press"><strong>press</strong></a>(self, *args)</dt><dd><tt>This&nbsp;method&nbsp;is&nbsp;called&nbsp;when&nbsp;the&nbsp;mouse&nbsp;is&nbsp;pressed,&nbsp;and&nbsp;initializes&nbsp;the&nbsp;mouse&nbsp;position.<br>
Be&nbsp;careful&nbsp;overwriting&nbsp;the&nbsp;press&nbsp;method&nbsp;in&nbsp;child&nbsp;classes,&nbsp;because&nbsp;of&nbsp;the&nbsp;undoInfo&nbsp;openChunk.</tt></dd></dl>

<dl><dt><a name="Dragger-release"><strong>release</strong></a>(self, *args)</dt><dd><tt>Called&nbsp;when&nbsp;the&nbsp;mouse&nbsp;button&nbsp;is&nbsp;released,&nbsp;and&nbsp;cleans&nbsp;up&nbsp;after&nbsp;the&nbsp;tool.<br>
Be&nbsp;careful&nbsp;overwriting&nbsp;the&nbsp;release&nbsp;method&nbsp;in&nbsp;child&nbsp;classes.&nbsp;Not&nbsp;closing&nbsp;the&nbsp;undo&nbsp;chunk&nbsp;leaves&nbsp;maya&nbsp;in&nbsp;a&nbsp;sorry&nbsp;state.</tt></dd></dl>

<dl><dt><a name="Dragger-setTool"><strong>setTool</strong></a>(self)</dt></dl>

<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
</td></tr></tbody></table> <p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#ffc8d8">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="KeyValueDragger">class <strong>KeyValueDragger</strong></a>(<a href="ml_keyValueDragger.html#Dragger">Dragger</a>)</font></td></tr>
    
<tr bgcolor="#ffc8d8"><td rowspan="2"><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan="2"><tt>Creates&nbsp;the&nbsp;tool&nbsp;and&nbsp;manages&nbsp;the&nbsp;data<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%"><dl><dt>Method resolution order:</dt>
<dd><a href="ml_keyValueDragger.html#KeyValueDragger">KeyValueDragger</a></dd>
<dd><a href="ml_keyValueDragger.html#Dragger">Dragger</a></dd>
<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
</dl>
<hr>
Methods defined here:<br>
<dl><dt><a name="KeyValueDragger-__init__"><strong>__init__</strong></a>(self, name<font color="#909090">='mlKeyValueDraggerContext'</font>, minValue<font color="#909090">=0</font>, maxValue<font color="#909090">=None</font>, defaultValue<font color="#909090">=1</font>, title<font color="#909090">='Scale'</font>)</dt></dl>

<dl><dt><a name="KeyValueDragger-dragLeft"><strong>dragLeft</strong></a>(self)</dt><dd><tt>Activated&nbsp;by&nbsp;the&nbsp;left&nbsp;mouse&nbsp;button,&nbsp;this&nbsp;scales&nbsp;keys&nbsp;toward&nbsp;or&nbsp;away&nbsp;from&nbsp;their&nbsp;default&nbsp;value.</tt></dd></dl>

<hr>
Methods inherited from <a href="ml_keyValueDragger.html#Dragger">Dragger</a>:<br>
<dl><dt><a name="KeyValueDragger-drag"><strong>drag</strong></a>(self, *args)</dt><dd><tt>Called&nbsp;continuously&nbsp;when&nbsp;holding&nbsp;the&nbsp;mouse&nbsp;button&nbsp;down,&nbsp;updates&nbsp;self.<strong>x</strong>&nbsp;and&nbsp;self.<strong>y</strong>&nbsp;with&nbsp;the&nbsp;mouse&nbsp;position,<br>
and&nbsp;runs&nbsp;the&nbsp;corresponding&nbsp;method&nbsp;for&nbsp;whichever&nbsp;button&nbsp;is&nbsp;being&nbsp;pressed.</tt></dd></dl>

<dl><dt><a name="KeyValueDragger-dragControlLeft"><strong>dragControlLeft</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="KeyValueDragger-dragControlMiddle"><strong>dragControlMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="KeyValueDragger-dragMiddle"><strong>dragMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="KeyValueDragger-dragShiftLeft"><strong>dragShiftLeft</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="KeyValueDragger-dragShiftMiddle"><strong>dragShiftMiddle</strong></a>(self)</dt><dd><tt>Placeholder&nbsp;meant&nbsp;to&nbsp;be&nbsp;overridden&nbsp;in&nbsp;child&nbsp;classes</tt></dd></dl>

<dl><dt><a name="KeyValueDragger-drawString"><strong>drawString</strong></a>(self, message)</dt><dd><tt>Simply&nbsp;writes&nbsp;a&nbsp;message&nbsp;next&nbsp;to&nbsp;the&nbsp;cursor</tt></dd></dl>

<dl><dt><a name="KeyValueDragger-press"><strong>press</strong></a>(self, *args)</dt><dd><tt>This&nbsp;method&nbsp;is&nbsp;called&nbsp;when&nbsp;the&nbsp;mouse&nbsp;is&nbsp;pressed,&nbsp;and&nbsp;initializes&nbsp;the&nbsp;mouse&nbsp;position.<br>
Be&nbsp;careful&nbsp;overwriting&nbsp;the&nbsp;press&nbsp;method&nbsp;in&nbsp;child&nbsp;classes,&nbsp;because&nbsp;of&nbsp;the&nbsp;undoInfo&nbsp;openChunk.</tt></dd></dl>

<dl><dt><a name="KeyValueDragger-release"><strong>release</strong></a>(self, *args)</dt><dd><tt>Called&nbsp;when&nbsp;the&nbsp;mouse&nbsp;button&nbsp;is&nbsp;released,&nbsp;and&nbsp;cleans&nbsp;up&nbsp;after&nbsp;the&nbsp;tool.<br>
Be&nbsp;careful&nbsp;overwriting&nbsp;the&nbsp;release&nbsp;method&nbsp;in&nbsp;child&nbsp;classes.&nbsp;Not&nbsp;closing&nbsp;the&nbsp;undo&nbsp;chunk&nbsp;leaves&nbsp;maya&nbsp;in&nbsp;a&nbsp;sorry&nbsp;state.</tt></dd></dl>

<dl><dt><a name="KeyValueDragger-setTool"><strong>setTool</strong></a>(self)</dt></dl>

<hr>
Data descriptors inherited from <a href="ml_keyValueDragger.html#Dragger">Dragger</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
</td></tr></tbody></table></td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#eeaa77">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt><a name="-drag"><strong>drag</strong></a>()</dt><dd><tt>The&nbsp;primary&nbsp;command&nbsp;to&nbsp;run&nbsp;the&nbsp;tool</tt></dd></dl>
</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#55aa55">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
    
<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><strong>__author__</strong> = 'Morgan Loomis'<br>
<strong>__license__</strong> = 'Creative Commons Attribution-ShareAlike'<br>
<strong>__revision__</strong> = 1</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#7799ee">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Author</strong></big></font></td></tr>
    
<tr><td bgcolor="#7799ee"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%">Morgan&nbsp;Loomis</td></tr></tbody></table></html>
|bgcolor(lightgrey):Download|  [[ml_resetChannels.py|http://morganloomis.com/download/ml_resetChannels.py]]  |
|bgcolor(lightgrey):Revision|  4  |
|>|[[Installation Instructions|Installing ml_resetChannels.py]]|
!!!Description
Sets the selected channels in the channel box to their default values, or if no channels are selected, resets all keyable channels. 
!!!Usage
Select channels in the channel box, and run the command directly, as a hotkey or shelf button. 
!!!More Info
*[[ml_resetChannels Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_resetChannels]]
*<html><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png"></a></html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
<html>
<table width="100%" cellspacing="0" cellpadding="2" border="0" summary="heading">
<tbody><tr bgcolor="#7799ee">
<td valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>ml_resetChannels</strong></big></big></font></td><td align="right" valign="bottom"><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="http://morganloomis.com/download/ml_resetChannels.py">http://morganloomis.com/download/ml_resetChannels.py</a></font></td></tr></tbody></table>
    <p><tt>#&nbsp;&nbsp;&nbsp;-=&nbsp;ml_resetChannels.py&nbsp;=-<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;by&nbsp;Morgan&nbsp;Loomis<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;____&nbsp;___&nbsp;&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://morganloomis.com">http://morganloomis.com</a><br>
#&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;__&nbsp;`__&nbsp;\/&nbsp;/&nbsp;&nbsp;Licensed&nbsp;under&nbsp;Creative&nbsp;Commons&nbsp;BY-SA<br>
#&nbsp;&nbsp;&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://creativecommons.org/licenses/by-sa/3.0/">http://creativecommons.org/licenses/by-sa/3.0/</a><br>
#&nbsp;&nbsp;/_/&nbsp;/_/&nbsp;/_/_/&nbsp;&nbsp;_________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/_________/&nbsp;&nbsp;Revision&nbsp;4,&nbsp;2011-01-06<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_______________________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Installing&nbsp;Python&nbsp;Scripts&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Copy&nbsp;this&nbsp;file&nbsp;into&nbsp;your&nbsp;maya&nbsp;scripts&nbsp;directory,&nbsp;for&nbsp;example:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:/Documents&nbsp;and&nbsp;Settings/user/My&nbsp;Documents/maya/scripts/ml_resetChannels.py<br>
#&nbsp;<br>
#&nbsp;Run&nbsp;the&nbsp;tool&nbsp;by&nbsp;importing&nbsp;the&nbsp;module,&nbsp;and&nbsp;then&nbsp;calling&nbsp;the&nbsp;primary&nbsp;function.<br>
#&nbsp;From&nbsp;python,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;ml_resetChannels<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ml_resetChannels.<a href="#-resetChannels">resetChannels</a>()<br>
#&nbsp;From&nbsp;MEL,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python("import&nbsp;ml_resetChannels;ml_resetChannels.<a href="#-resetChannels">resetChannels</a>()");<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Description&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Sets&nbsp;the&nbsp;selected&nbsp;channels&nbsp;in&nbsp;the&nbsp;channel&nbsp;box&nbsp;to&nbsp;their&nbsp;default&nbsp;values,<br>
#&nbsp;or&nbsp;if&nbsp;no&nbsp;channels&nbsp;are&nbsp;selected,&nbsp;resets&nbsp;all&nbsp;keyable&nbsp;channels.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___________<br>
#&nbsp;-&nbsp;-/__&nbsp;Usage&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Select&nbsp;channels&nbsp;in&nbsp;the&nbsp;channel&nbsp;box,&nbsp;and&nbsp;run&nbsp;the&nbsp;command&nbsp;directly,&nbsp;as<br>
#&nbsp;a&nbsp;hotkey&nbsp;or&nbsp;shelf&nbsp;button.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__________<br>
#&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;/_&nbsp;Enjoy!&nbsp;_/-&nbsp;-&nbsp;-</tt></p>
<p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#aa55cc">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
    
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tbody><tr><td width="25%" valign="top"><a href="maya.cmds.html">maya.cmds</a><br>
</td><td width="25%" valign="top"><a href="maya.mel.html">maya.mel</a><br>
</td><td width="25%" valign="top"></td><td width="25%" valign="top"></td></tr></tbody></table></td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#eeaa77">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt><a name="-resetChannels"><strong>resetChannels</strong></a>()</dt><dd><tt>Resets&nbsp;selected&nbsp;channels&nbsp;in&nbsp;the&nbsp;channel&nbsp;box&nbsp;to&nbsp;default,&nbsp;or&nbsp;if&nbsp;nothing's<br>
selected,&nbsp;resets&nbsp;all&nbsp;keyable&nbsp;channels&nbsp;to&nbsp;default.</tt></dd></dl>
</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#55aa55">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
    
<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><strong>__author__</strong> = 'Morgan Loomis'<br>
<strong>__license__</strong> = 'Creative Commons Attribution-ShareAlike'<br>
<strong>__revision__</strong> = 4</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#7799ee">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Author</strong></big></font></td></tr>
    
<tr><td bgcolor="#7799ee"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%">Morgan&nbsp;Loomis</td></tr></tbody></table></html>
|bgcolor(lightgrey):Download|  [[ml_selectKeyed.py|http://morganloomis.com/download/ml_selectKeyed.py]]  |
|bgcolor(lightgrey):Revision|  2  |
|>|[[Installation Instructions|Installing ml_selectKeyed.py]]|
!!!Description
Select any node in an animated hierarchy, such as a puppet, and run the command to select all the nodes in the hierarchy that are keyed. If the selected object has a namespace, it will only return nodes in  that namespace. The top node of the hierarchy is excluded. 
!!!Usage
Select a node in an animated hierarchy, and run the command directly, as a hotkey or shelf button. 
!!!More Info
*[[ml_selectKeyed Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_selectKeyed]]
*<html><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png"></a></html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
<html>
<table width="100%" cellspacing="0" cellpadding="2" border="0" summary="heading">
<tbody><tr bgcolor="#7799ee">
<td valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>ml_selectKeyed</strong></big></big></font></td><td align="right" valign="bottom"><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="http://morganloomis.com/download/ml_selectKeyed.py">http://morganloomis.com/download/ml_selectKeyed.py</a></font></td></tr></tbody></table>
    <p><tt>#&nbsp;&nbsp;&nbsp;-=&nbsp;ml_selectKeyed.py&nbsp;=-<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;by&nbsp;Morgan&nbsp;Loomis<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;____&nbsp;___&nbsp;&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://morganloomis.com">http://morganloomis.com</a><br>
#&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;__&nbsp;`__&nbsp;\/&nbsp;/&nbsp;&nbsp;Licensed&nbsp;under&nbsp;Creative&nbsp;Commons&nbsp;BY-SA<br>
#&nbsp;&nbsp;&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://creativecommons.org/licenses/by-sa/3.0/">http://creativecommons.org/licenses/by-sa/3.0/</a><br>
#&nbsp;&nbsp;/_/&nbsp;/_/&nbsp;/_/_/&nbsp;&nbsp;_________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/_________/&nbsp;&nbsp;Revision&nbsp;2,&nbsp;2011-01-02<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_______________________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Installing&nbsp;Python&nbsp;Scripts&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Copy&nbsp;this&nbsp;file&nbsp;into&nbsp;your&nbsp;maya&nbsp;scripts&nbsp;directory,&nbsp;for&nbsp;example:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:/Documents&nbsp;and&nbsp;Settings/user/My&nbsp;Documents/maya/scripts/ml_selectKeyed.py<br>
#&nbsp;<br>
#&nbsp;Run&nbsp;the&nbsp;tool&nbsp;by&nbsp;importing&nbsp;the&nbsp;module,&nbsp;and&nbsp;then&nbsp;calling&nbsp;the&nbsp;primary&nbsp;function.<br>
#&nbsp;From&nbsp;python,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;ml_selectKeyed<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ml_selectKeyed.<a href="#-selectKeyed">selectKeyed</a>()<br>
#&nbsp;From&nbsp;MEL,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python("import&nbsp;ml_selectKeyed;ml_selectKeyed.<a href="#-selectKeyed">selectKeyed</a>()");<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Description&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Select&nbsp;any&nbsp;node&nbsp;in&nbsp;an&nbsp;animated&nbsp;hierarchy,&nbsp;such&nbsp;as&nbsp;a&nbsp;puppet,&nbsp;and&nbsp;run<br>
#&nbsp;the&nbsp;command&nbsp;to&nbsp;select&nbsp;all&nbsp;the&nbsp;nodes&nbsp;in&nbsp;the&nbsp;hierarchy&nbsp;that&nbsp;are&nbsp;keyed.<br>
#&nbsp;If&nbsp;the&nbsp;selected&nbsp;object&nbsp;has&nbsp;a&nbsp;namespace,&nbsp;it&nbsp;will&nbsp;only&nbsp;return&nbsp;nodes&nbsp;in&nbsp;<br>
#&nbsp;that&nbsp;namespace.&nbsp;The&nbsp;top&nbsp;node&nbsp;of&nbsp;the&nbsp;hierarchy&nbsp;is&nbsp;excluded.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___________<br>
#&nbsp;-&nbsp;-/__&nbsp;Usage&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Select&nbsp;a&nbsp;node&nbsp;in&nbsp;an&nbsp;animated&nbsp;hierarchy,&nbsp;and&nbsp;run&nbsp;the&nbsp;command&nbsp;directly,&nbsp;as<br>
#&nbsp;a&nbsp;hotkey&nbsp;or&nbsp;shelf&nbsp;button.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__________<br>
#&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;/_&nbsp;Enjoy!&nbsp;_/-&nbsp;-&nbsp;-</tt></p>
<p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#aa55cc">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
    
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tbody><tr><td width="25%" valign="top"><a href="maya.cmds.html">maya.cmds</a><br>
</td><td width="25%" valign="top"></td><td width="25%" valign="top"></td><td width="25%" valign="top"></td></tr></tbody></table></td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#eeaa77">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt><a name="-selectKeyed"><strong>selectKeyed</strong></a>()</dt><dd><tt>Select&nbsp;any&nbsp;node&nbsp;in&nbsp;a&nbsp;hierarchy,&nbsp;and&nbsp;run&nbsp;the&nbsp;script.&nbsp;<br>
It&nbsp;will&nbsp;select&nbsp;all&nbsp;keyed&nbsp;objects&nbsp;within&nbsp;the&nbsp;hierarchy<br>
except&nbsp;the&nbsp;root&nbsp;node.&nbsp;If&nbsp;the&nbsp;selected&nbsp;object&nbsp;has&nbsp;a&nbsp;namespace,<br>
only&nbsp;nodes&nbsp;within&nbsp;that&nbsp;namespace&nbsp;will&nbsp;be&nbsp;selected.</tt></dd></dl>
</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#55aa55">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
    
<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><strong>__author__</strong> = 'Morgan Loomis'<br>
<strong>__license__</strong> = 'Creative Commons Attribution-ShareAlike'<br>
<strong>__revision__</strong> = 2</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#7799ee">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Author</strong></big></font></td></tr>
    
<tr><td bgcolor="#7799ee"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%">Morgan&nbsp;Loomis</td></tr></tbody></table></html>
|bgcolor(lightgrey):Download|  [[ml_smartKey.py|http://morganloomis.com/download/ml_smartKey.py]]  |
|bgcolor(lightgrey):Revision|  0  |
|>|[[Installation Instructions|Installing ml_smartKey.py]]|
!!!Description
This is a more robust tool for setting keyframes in Maya. 
!!!Usage
Run the tool, select the options, and press the Set Key button. Alternately, set the options and press the "Create Hotkey" button to turn the current functionality into a hotkey. 
!!!UI Options
|<html><input type="checkbox" checked="yes"></html> Selected Channels|Only key channels that are selected in the Channel Box|
|<html><input type="checkbox" checked="yes"></html> Visible in Graph Editor|Only key curves visible in Graph Editor|
|<html><input type="checkbox" checked="yes"></html> Key Only Keyed Channels|Only set keys on channels that are already keyed|
|<html><input type="checkbox" checked="yes"></html> Delete Sub-Frames|Delete sub-frame keys surrounding the current frame|
|<html><input type="checkbox" checked="yes"></html> Insert Key|Insert key (preserve tangents)|
|<html><input type="checkbox" checked="yes"></html> Key Shapes|Set keyframes on shapes|
|<html><button type="button">Set Key</button></html>|Run the command.|
|<html><button type="button">Create Hotkey</button></html>|Create a hotkey from these settings.|
!!!More Info
*[[ml_smartKey Python Documentation]]
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_smartKey]]
*<html><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png"></a></html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//
<html>
<table width="100%" cellspacing="0" cellpadding="2" border="0" summary="heading">
<tbody><tr bgcolor="#7799ee">
<td valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>ml_smartKey</strong></big></big></font></td><td align="right" valign="bottom"><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="http://morganloomis.com/download/ml_smartKey.py">http://morganloomis.com/download/ml_smartKey.py</a></font></td></tr></tbody></table>
    <p><tt>#&nbsp;&nbsp;&nbsp;-=&nbsp;ml_smartKey.py&nbsp;=-<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;by&nbsp;Morgan&nbsp;Loomis<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;____&nbsp;___&nbsp;&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://morganloomis.com">http://morganloomis.com</a><br>
#&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;__&nbsp;`__&nbsp;\/&nbsp;/&nbsp;&nbsp;Licensed&nbsp;under&nbsp;Creative&nbsp;Commons&nbsp;BY-SA<br>
#&nbsp;&nbsp;&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;/&nbsp;&nbsp;<a href="http://creativecommons.org/licenses/by-sa/3.0/">http://creativecommons.org/licenses/by-sa/3.0/</a><br>
#&nbsp;&nbsp;/_/&nbsp;/_/&nbsp;/_/_/&nbsp;&nbsp;_________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/_________/&nbsp;&nbsp;Revision&nbsp;0,&nbsp;2011-01-02<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_______________________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Installing&nbsp;Python&nbsp;Scripts&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Copy&nbsp;this&nbsp;file&nbsp;into&nbsp;your&nbsp;maya&nbsp;scripts&nbsp;directory,&nbsp;for&nbsp;example:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:/Documents&nbsp;and&nbsp;Settings/user/My&nbsp;Documents/maya/scripts/ml_smartKey.py<br>
#&nbsp;<br>
#&nbsp;Run&nbsp;the&nbsp;tool&nbsp;by&nbsp;importing&nbsp;the&nbsp;module,&nbsp;and&nbsp;then&nbsp;calling&nbsp;the&nbsp;primary&nbsp;function.<br>
#&nbsp;From&nbsp;python,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;ml_smartKey<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ml_smartKey.<a href="#-ui">ui</a>()<br>
#&nbsp;From&nbsp;MEL,&nbsp;this&nbsp;looks&nbsp;like:<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python("import&nbsp;ml_smartKey;ml_smartKey.<a href="#-ui">ui</a>()");<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_________________<br>
#&nbsp;-&nbsp;-/__&nbsp;Description&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;This&nbsp;is&nbsp;a&nbsp;more&nbsp;robust&nbsp;tool&nbsp;for&nbsp;setting&nbsp;keyframes&nbsp;in&nbsp;Maya.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___________<br>
#&nbsp;-&nbsp;-/__&nbsp;Usage&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;Run&nbsp;the&nbsp;tool,&nbsp;select&nbsp;the&nbsp;options,&nbsp;and&nbsp;press&nbsp;the&nbsp;Set&nbsp;Key&nbsp;button.<br>
#&nbsp;Alternately,&nbsp;set&nbsp;the&nbsp;options&nbsp;and&nbsp;press&nbsp;the&nbsp;"Create&nbsp;Hotkey"&nbsp;button&nbsp;to<br>
#&nbsp;turn&nbsp;the&nbsp;current&nbsp;functionality&nbsp;into&nbsp;a&nbsp;hotkey.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;________________<br>
#&nbsp;-&nbsp;-/__&nbsp;UI&nbsp;Options&nbsp;__/-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;<br>
#&nbsp;<br>
#&nbsp;[]&nbsp;Selected&nbsp;Channels&nbsp;:&nbsp;Only&nbsp;key&nbsp;channels&nbsp;that&nbsp;are&nbsp;selected&nbsp;in&nbsp;the&nbsp;Channel&nbsp;Box<br>
#&nbsp;[]&nbsp;Visible&nbsp;in&nbsp;Graph&nbsp;Editor&nbsp;:&nbsp;Only&nbsp;key&nbsp;curves&nbsp;visible&nbsp;in&nbsp;Graph&nbsp;Editor<br>
#&nbsp;[]&nbsp;Key&nbsp;Only&nbsp;Keyed&nbsp;Channels&nbsp;:&nbsp;Only&nbsp;set&nbsp;keys&nbsp;on&nbsp;channels&nbsp;that&nbsp;are&nbsp;already&nbsp;keyed<br>
#&nbsp;[]&nbsp;Delete&nbsp;Sub-Frames&nbsp;:&nbsp;Delete&nbsp;sub-frame&nbsp;keys&nbsp;surrounding&nbsp;the&nbsp;current&nbsp;frame<br>
#&nbsp;[]&nbsp;Insert&nbsp;Key&nbsp;:&nbsp;Insert&nbsp;key&nbsp;(preserve&nbsp;tangents)<br>
#&nbsp;[]&nbsp;Key&nbsp;Shapes&nbsp;:&nbsp;Set&nbsp;keyframes&nbsp;on&nbsp;shapes<br>
#&nbsp;[Set&nbsp;Key]&nbsp;:&nbsp;Run&nbsp;the&nbsp;command.<br>
#&nbsp;[Create&nbsp;Hotkey]&nbsp;:&nbsp;Create&nbsp;a&nbsp;hotkey&nbsp;from&nbsp;these&nbsp;settings.<br>
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__________<br>
#&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;-&nbsp;/_&nbsp;Enjoy!&nbsp;_/-&nbsp;-&nbsp;-</tt></p>
<p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#aa55cc">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
    
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tbody><tr><td width="25%" valign="top"><a href="maya.cmds.html">maya.cmds</a><br>
</td><td width="25%" valign="top"><a href="maya.mel.html">maya.mel</a><br>
</td><td width="25%" valign="top"></td><td width="25%" valign="top"></td></tr></tbody></table></td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#eeaa77">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt><a name="-setKey"><strong>setKey</strong></a>(deleteSubFrames<font color="#909090">=False</font>, insert<font color="#909090">=False</font>, selectedChannels<font color="#909090">=False</font>, visibleInGraphEditor<font color="#909090">=False</font>, keyKeyed<font color="#909090">=False</font>, keyShapes<font color="#909090">=False</font>)</dt><dd><tt>The&nbsp;main&nbsp;function&nbsp;arguments:<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;deleteSubFrames:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delete&nbsp;sub-frame&nbsp;keys&nbsp;surrounding&nbsp;the&nbsp;current&nbsp;frame<br>
&nbsp;&nbsp;&nbsp;&nbsp;insert:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;key&nbsp;(preserve&nbsp;tangents)<br>
&nbsp;&nbsp;&nbsp;&nbsp;selectedChannels:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Only&nbsp;key&nbsp;channels&nbsp;that&nbsp;are&nbsp;selected&nbsp;in&nbsp;the&nbsp;Channel&nbsp;Box<br>
&nbsp;&nbsp;&nbsp;&nbsp;visibleInGraphEditor:&nbsp;&nbsp;&nbsp;Only&nbsp;key&nbsp;curves&nbsp;visible&nbsp;in&nbsp;Graph&nbsp;Editor<br>
&nbsp;&nbsp;&nbsp;&nbsp;keyKeyed:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Only&nbsp;set&nbsp;keys&nbsp;on&nbsp;channels&nbsp;that&nbsp;are&nbsp;already&nbsp;keyed<br>
&nbsp;&nbsp;&nbsp;&nbsp;keyShapes:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;keyframes&nbsp;on&nbsp;shapes&nbsp;as&nbsp;well&nbsp;as&nbsp;transforms</tt></dd></dl>
 <dl><dt><a name="-ui"><strong>ui</strong></a>()</dt><dd><tt>User&nbsp;interface&nbsp;for&nbsp;smart&nbsp;key</tt></dd></dl>
</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#55aa55">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
    
<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><strong>__author__</strong> = 'Morgan Loomis'<br>
<strong>__license__</strong> = 'Creative Commons Attribution-ShareAlike'<br>
<strong>__revision__</strong> = 0</td></tr></tbody></table><p>
</p><table width="100%" cellspacing="0" cellpadding="2" border="0" summary="section">
<tbody><tr bgcolor="#7799ee">
<td colspan="3" valign="bottom">&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Author</strong></big></font></td></tr>
    
<tr><td bgcolor="#7799ee"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%">Morgan&nbsp;Loomis</td></tr></tbody></table></html>
|bgcolor(lightgrey):Download|  [[ml_toggleVisibility.mel|http://morganloomis.com/download/ml_toggleVisibility.mel]]  |
|bgcolor(lightgrey):Revision|  2  |
|>|[[Installation Instructions|Installing ml_toggleVisibility.mel]]|
!!!Description
Toggle the visibility of an object off and on, regardless of the attribute's locked or keyable state. 
!!!Usage
Select an object, and run the script. If the object is visible, it will be  hidden, and vice-versa.  
!!!More Info
*Additional help, or submit a bug: [[Email|mailto:morganloomis+puppet@gmail.com?subject=Help With ml_toggleVisibility]]
*<html><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png"></a></html>
*//This page generated with help from a script by [[Ryan Dale|http://scienceoss.com/insert-content-into-tiddlywikis-with-this-python-script/]]//