<!--{{{-->
<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/downloads]]
[[ml_arcTracer]]
[[ml_breakdownDragger]]
[[ml_cameraDepthDragger]]
[[ml_convertRotationOrder]]
[[ml_copyAnim]]
[[ml_deleteKey]]
[[ml_goToKeyframe]]
[[ml_hold]]
[[ml_keyValueDragger]]
[[ml_lockAndHideAttributes]]
[[ml_parentShape]]
[[ml_puppet]]
[[ml_resetBind]]
[[ml_resetChannels]]
[[ml_selectKeyed]]
[[ml_setKey]]
[[ml_stopwatch]]
[[ml_toggleVisibility]]
[[ml_transferKeytimes]]
[[ml_utilities]]
[[ml_worldBake]]
|bgcolor(lightgrey): ''ml_worldBake.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_worldBake.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  11  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!Description
Temporarily bake animation to locators in world (or custom) space. Use  this tool to preserve the worldspace position of animation when you need to make positional changes to an object's parent.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the 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()");
}}}
!!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
|<html></html> Bake on Ones| |
|<html></html> Bake To Space| |
|<html></html> Maintain Constraints| |
|<html></html>|Bake selected object to locators specified space.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Bake from selected locators back to their source objects.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html> Maintain Offset| |
|<html></html>|Bake from the first selected object directly to the second.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!Revision History
|Revision 1|bgcolor(lightgrey):|First publish|
|Revision 6|bgcolor(lightgrey):|Updated to use ml_utilities. Changed from direct constraint to constrained duplicate node.|
|Revision 7|bgcolor(lightgrey):2011-05-13|fixed a bug with transferring certain types of tangents.|
|Revision 8|bgcolor(lightgrey):2011-05-14|fixed error baking things with transforms locked or hidden|
|Revision 9|bgcolor(lightgrey):2012-06-13|fixing duplicate name bug, adding more error checking.|
|Revision 10|bgcolor(lightgrey):2012-11-15|Converting UI to tabs, adding camera and explicit options.|
|Revision 11|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_worldBake Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_worldBake
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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 10, 2012-11-15
#      _______________________________
# - -/__ 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 (or custom) 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 Selection To Locators] : Bake selected object to locators specified space.
# [Bake Selected Locators Back To Objects] : Bake from selected locators back to their source objects.
# [Bake Selected] : Bake from the first selected object directly to the second.
# [Bake Selected With Offset] : Bake from the first selected object directly to the second, maintaining offset.
#      __________________
# - -/__ 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, maintainOffset=False)
matchBakeLocators(parent=None, bakeOnOnes=False, constrainSource=False)
toLocators(bakeOnOnes=False, space='world', spaceInt=None, constrainSource=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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 11

 
Author
        Morgan Loomis
</html>
http://morganloomis.com/wiki/tools.html
|bgcolor(lightgrey): ''ml_utilities.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_utilities.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  10  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!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.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Commands
To run the script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_utilities
ml_utilities.main()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_utilities;ml_utilities.main()");
}}}
!!Usage
ml_utilities isn't a stand alone tool, and so it isn't meant to be used directly. However, you can certainly call these functions if they seem useful in your own scripts.
!!Revision History
|Revision 1|bgcolor(lightgrey):|First publish|
|Revision 2|bgcolor(lightgrey):2011-05-04|Fixed error in frameRange.|
|Revision 3|bgcolor(lightgrey):2012-05-31|Adding Menu and Icon update to UI, adding KeyframeSelection object, and a few random utility functions.|
|Revision 4|bgcolor(lightgrey):2012-06-01|Fixing bug with UI icons|
|Revision 5|bgcolor(lightgrey):2012-07-23|Expanding and bug fixing Keyselection, added SkipUndo, minor bug fixes.|
|Revision 6|bgcolor(lightgrey):2012-07-23|KeySelection bug fix|
|Revision 7|bgcolor(lightgrey):2012-08-07|Minor bug with Keyselection, adding functions.|
|Revision 8|bgcolor(lightgrey):2012-11-06|Backwards incompatable update to KeySelection, and several new functions.|
|Revision 9|bgcolor(lightgrey):2013-10-29|Update to support more options for goToKeyframe, update to preserve isolateSelect.|
|Revision 10|bgcolor(lightgrey):2014-03-01|adding category, updating contact.|
!!More Info
*[[ml_utilities Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_utilities
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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 9, 2013-10-29
#      _______________________________
# - -/__ 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._showHelpCommand()
# From MEL, this looks like:
#     python("import ml_utilities;ml_utilities._showHelpCommand()");
#      _________________
# - -/__ 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.
# However, you can certainly call these functions if they seem useful in your own scripts.
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

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

 
Classes
       
__builtin__.object
Dragger
KeySelection
IsolateViews
MlUi
SkipUndo
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)
This is what is actually run during the drag, updating the coordinates and calling the 
placeholder drag functions depending on which button is pressed.
dragControlLeft(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragControlMiddle(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragLeft(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragMiddle(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftLeft(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftMiddle(self, *args)
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 KeySelection(__builtin__.object)
     Methods defined here:
__init__(self, *args)
copyKey(self, **kwargs)
currentFrame(self)
Sets the keySelection time to the current frame.
cutKey(self, includeSubFrames=False, **kwargs)
Wrapper for the cutKey command. Curve and time arguments will be provided based on 
how this object was intitialized, otherwise usage is the same as maya's cutKey command.
Option to delete sub-frames.
findKeyframe(self, which='next', loop=False, roundFrame=False, **kwargs)
This is similar to maya's findKeyframe, but operates on the keySelection and has options
for rounding and looping.
frameRange(self)
Sets the keySelection time to the selected frame range, or the current frame range.
fromBeginning(self, includeCurrent=False)
Sets the keySelection time to the range from the first frame to the current frame.
Option to include the current frame.
getSortedKeyTimes(self)
Returns a list of the key times in order without duplicates.
keyRange(self)
Sets the keySelection time range to the range of keys in the keySelection.
keyTangent(self, **kwargs)
Wrapper for maya's keyTangent command.
keyedChannels(self, includeShapes=False)
Initializes the keySelection object with keyed channels.
Returns True if successful.
keyedInHierarchy(self, includeRoot=True)
Initializes the keySelection object with all the animation curves in the hierarchy.
Returns True if successful.
keyframe(self, **kwargs)
Wrapper for the keyframe command. Curve and time arguments will be provided based on 
how this object was intitialized, otherwise usage is the same as maya's keyframe command.
moveKey(self, frames)
A wrapper for keyframe -edit -timeChange
nextKey(self)
Sets the keySelection time to the next key from the current frame.
pasteKey(self, option='replaceCompletely', **kwargs)
previousKey(self)
Sets the keySelection time to the previous key from the current frame.
scaleKey(self, timePivot=0, **kwargs)
Wrapper for maya's scaleKey command.
scene(self)
Initializes the keySelection object with all animation curves in the scene.
Returns True if successful.
selectKey(self, **kwargs)
Wrapper for maya's selectKey command.
selectedChannels(self)
Initializes the keySelection object with selected channels.
Returns True if successful.
selectedFrameRange(self)
Sets the keySelection time to the selected frame range, returns false if frame range not selected.
selectedKeys(self)
Initializes the keySelection object with selected keyframes.
Returns True if successful.
selectedLayers(self, includeLayerWeight=True)
This affects keys on all layers that the node belongs to.
If includeLayerWeight, the keys on the layer's weight attribute will be affected also.
selectedObjects(self)
Initializes the keySelection object with selected objects.
Returns True if successful.
setKeyframe(self, deleteSubFrames=False, **kwargs)
Wrapper for the setKeyframe command. Curve and time arguments will be provided based on 
how this object was intitialized, otherwise usage is the same as maya's setKeyframe command.
Option to delete sub-frames after keying.
tangentType(self, **kwargs)
Wrapper for maya's tangentType command.
toEnd(self, includeCurrent=False)
Sets the keySelection time to the range from the current frame to the last frame.
Option to include the current frame.
visibleInGraphEditor(self)
Initializes the keySelection object with curves visibile in graph editor.
Returns True if successful.

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)
args
This will return channels, curves or nodes in instances where we don't care which.
It wont waste time converting from one to the other.
channels
The keySelection's channels list.
curves
The keySelections's animation curve list.
initialized
Basically just tells if the object has been sucessfully initialized.
nodes
The keySelection's node list.
time
The keySelection's time, formatted for maya's various keyframe command arguments.
times
This returns an expanded list of times, which is synced with the curve list.

 
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='', menu=True, module=None)
about(self, *args)
This pops up a window which shows the revision number of the current script.
buttonWithPopup(self, label=None, command=None, annotation='', shelfLabel='', shelfIcon='render_useBackground', readUI_toArgs={})
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.
createMenu(self, *args)
Create the main menu for the UI
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='', 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

Data and other attributes defined here:
ButtonWithPopup = <class ml_utilities.ButtonWithPopup>

 
class SkipUndo
    Skips adding the encapsulated commands to the undo queue, so that you 
cannot undo them.
 
  Methods defined here:
__enter__(self)
Turn off undo
__exit__(self, *args)
Turn on undo

 
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
__init__(self, force=False)

 
Functions
       
constrain(source, destination, translate=True, rotate=True, scale=False)
Constrain two objects, even if they have some locked attributes.
createAnimLayer(nodes=None, name=None, namePrefix='', override=True)
Create an animation layer, add nodes, and select it.
createHotkey(command, name, description='', python=True)
Open up the hotkey editor to create a hotkey from the specified command
createShelfButton(command, label='', name=None, description='', image=None, 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, plugs=True)
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.
If the current highlighted panel isn't a modelPanel,
getFrameRate()
Return an int of the current frame rate
getHoldTangentType()
Returns the best in and out tangent type for creating a hold with the current tangent settings.
getIcon(name)
Check if an icon name exists, and return with proper extension.
Otherwise return standard warning icon.
getIconPath()
Find the icon path
getNamespace(node)
Returns the namespace of a node with simple string parsing. Now supports nested namespaces.
getSelectedAnimLayers()
Return the names of the layers which are selected
getSelectedChannels()
Return channels that are selected in the channelbox
listAnimCurves(objOrAttrs)
This lists connections to all types of animNodes
longestCommonSubstring(data)
Returns the longest string that is present in the list of strings.
main()
This just launches the online help and serves as a placeholder for the default function for this script.
minimizeRotationCurves(obj)
Sets rotation animation to the value closest to zero.
renderShelfIcon(name='tmp', width=32, height=32)
This renders a shelf-sized icon and hopefully places it in your icon directory
selectAnimLayer(animLayer=None)
Select only the specified animation layer
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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 10
websiteURL = 'http://morganloomis.com'
wikiURL = 'http://morganloomis.com/wiki/tools.html'

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_transferKeytimes.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_transferKeytimes.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  1  |
|bgcolor(lightgrey): Last Update|  2014-03-02  |
!!!!Description
Copy keytimes from one node to another. Animation isn't fundamentally changed, but keys will be added or deleted.
!!Installation
!!!!Download
To use this tool, download [[ml_transferKeytimes.py|http://morganloomis.com/download/ml_transferKeytimes.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_transferKeytimes.py}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_transferKeytimes
ml_transferKeytimes.main()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_transferKeytimes;ml_transferKeytimes.main()");
}}}
!!Usage
Select the source and destination nodes, keytimes will be transferred from first to second selection. Run the command.
!!Revision History
|Revision 1|bgcolor(lightgrey):2014-03-02|First publish.|
!!More Info
*[[ml_transferKeytimes Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_transferKeytimes]]
*<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/]]//
<html>
 
 
ml_transferKeytimes
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_transferKeytimes.py

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

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

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

# Copy keytimes from one node to another. Animation isn't fundamentally changed, but keys
# will be added or deleted.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Select the source and destination nodes, keytimes will be transferred 
# from first to second selection. Run the command.
#      __________________
# - -/__ 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
       
main()
transferKeytimes(source, destinations)

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

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_toggleVisibility.mel'' |  [[Download Tool|http://morganloomis.com/download/ml_toggleVisibility.mel]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  None  |
|bgcolor(lightgrey): Last Update|  2011-01-02  |
!!!!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
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_toggleVisibility]]
*<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/]]//
|bgcolor(lightgrey): ''ml_stopwatch.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_stopwatch.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  2  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!Description
This is a tool for helping to plan out the timing of a shot. It's a simple timer that records the timing of button clicks, and then reports them in a UI that allows you to record notes for individual beats and navigate through them in the timeslider.
!!Installation
!!!!Download
To use this tool, download [[ml_stopwatch.py|http://morganloomis.com/download/ml_stopwatch.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_stopwatch.py}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_stopwatch
ml_stopwatch.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_stopwatch;ml_stopwatch.ui()");
}}}
!!Usage
Run the UI, and then click the big button to start recording time. Once recording has begun, continue clicking the big button to record the timing of beats. When you're done recording, click the stop button to stop recording and open up the results UI. From there you can change the start frame if you want a different reference point for your timing. Click the individual frame buttons or the previous and next buttons to navigate between the beats. Use the text fields to write notes about specific beats.
!!!!UI Options
|<html></html> Round to nearest frame|Only whole number frames|
|<html></html>| |
|<html></html>|Stop the recording.|
|<html></html>|Go to the previous frame in the list.|
|<html></html>|Go to the next frame in the list.|
!!Revision History
|Revision 1|bgcolor(lightgrey):2012-06-04|First publish.|
|Revision 2|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_stopwatch Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_stopwatch]]
*<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/]]//
<html>
 
 
ml_stopwatch
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_stopwatch.py

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

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

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

# This is a tool for helping to plan out the timing of a shot. It's a simple
# timer that records the timing of button clicks, and then reports them in a
# UI that allows you to record notes for individual beats and navigate through
# them in the timeslider.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the UI, and then click the big button to start recording time. Once recording
# has begun, continue clicking the big button to record the timing of beats. When you're
# done recording, click the stop button to stop recording and open up the results
# UI. From there you can change the start frame if you want a different reference point
# for your timing. Click the individual frame buttons or the previous and next 
# buttons to navigate between the beats. Use the text fields to write notes
# about specific beats.
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [] Round to nearest frame : Only whole number frames
# [Stop] : Stop the recording.
# [<< Previous] : Go to the previous frame in the list.
# [Next >>] : Go to the next frame in the list.
#      __________________
# - -/__ 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
time
ml_utilities

 
Classes
       
__builtin__.object
Stopwatch

 
class Stopwatch(__builtin__.object)
     Methods defined here:
__init__(self, startFrame=0, endFrame=None, addMarkers=True, roundTo=2)
Initializes the stopwatch.
mark(self)
Save the current time.
nextFrame(self, *args)
Go to the next frame based on the current time and frame list.
previousFrame(self, *args)
Go to the previous frame based on the current time and frame list.
start(self)
Starts the stopwatch.
stop(self)
Stop the stopwatch and convert the time to frames.
ui(self)
Launch a UI to display the marks that were recorded.
uiUpdateStartFrame(self, *args)
Update the UI text with the new frames when the slider is updated.

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

 
Functions
       
addMarksToScene(marks)
This is temp and will possibly be rolled into future releases.
ui()
User interface for stopwatch

 
Data
        STOPWATCH = None
__author__ = 'Morgan Loomis'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 2

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_setKey.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_setKey.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  9  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!Description
This is a more robust tool for setting keyframes in Maya, including setting keys on selected channels, keyed channels, and several other options.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the 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()");
}}}
!!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></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>|Set a keyframe.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!Revision History
|Revision 4|bgcolor(lightgrey):2012-03-11|Added revision notes, updated to use ml_utilities, fixed a bug where tangents weren't being preserved, and fixed middle-mouse dragging.|
|Revision 5|bgcolor(lightgrey):2012-03-26|Updated delete sub-frame option to work with other frame rates|
|Revision 6|bgcolor(lightgrey):2012-07-23|Bug fixes.|
|Revision 7|bgcolor(lightgrey):2012-08-07|Updating in parallel with ml_utilities to fix bug with keying keyed shapes.|
|Revision 8|bgcolor(lightgrey):2012-11-19|updating to new KeySelection|
|Revision 9|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_setKey Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_setKey
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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 8, 2012-11-19
#      _______________________________
# - -/__ 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
# [Set Key] : Set a keyframe.
#      __________________
# - -/__ 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
       
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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 9
hotkey = {'S': 'setKey(deleteSubFrames=True, insert=True, select...nGraphEditor=True, keyKeyed=True, keyShapes=True)'}

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_selectKeyed.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_selectKeyed.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  5  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!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.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_selectKeyed
ml_selectKeyed.main()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_selectKeyed;ml_selectKeyed.main()");
}}}
!!Usage
Select a node in an animated hierarchy, and run the command directly, as a hotkey or shelf button.
!!Revision History
|Revision 3|bgcolor(lightgrey):2012-05-27|Added revision notes, changed primary function to main() for consistency|
|Revision 4|bgcolor(lightgrey):2012-06-10|Fixing small bug when selecting objects that aren't in a hierarchy.|
|Revision 5|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_selectKeyed Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_selectKeyed]]
*<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/]]//
<html>
 
 
ml_selectKeyed
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_selectKeyed.py

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

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

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_selectKeyed
#     ml_selectKeyed.main()
# From MEL, this looks like:
#     python("import ml_selectKeyed;ml_selectKeyed.main()");
#      _________________
# - -/__ 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.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

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

 
Modules
       
maya.cmds
ml_utilities

 
Functions
       
main()
Select any node in a hierarchy, and run the script. 
It will select all keyed objects within the hierarchy
except the root node. If the selected object has a namespace,
only nodes within that namespace will be selected.

 
Data
        __author__ = 'Morgan Loomis'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 5

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_resetChannels.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_resetChannels.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  7  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!Description
Sets the selected channels in the channel box to their default values, or if no channels are selected, resets all keyable channels.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_resetChannels
ml_resetChannels.main()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_resetChannels;ml_resetChannels.main()");
}}}
!!Usage
Select channels in the channel box, and run the command directly, as a hotkey or shelf button. Run command line to use the transformsOnly flag, in order to only reset transform attributes.
!!Revision History
|Revision 5|bgcolor(lightgrey):2012-05-27|Added revision notes, updated to use ml_utilities, changed primary function to main() for consistency|
|Revision 6|bgcolor(lightgrey):2013-04-23|added transformsOnly and selected flags to support cgMonks|
|Revision 7|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_resetChannels Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_resetChannels]]
*<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/]]//
<html>
 
 
ml_resetChannels
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_resetChannels.py

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

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

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_resetChannels
#     ml_resetChannels.main()
# From MEL, this looks like:
#     python("import ml_resetChannels;ml_resetChannels.main()");
#      _________________
# - -/__ 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.
# Run command line to use the transformsOnly flag, in order to only
# reset transform 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.cmds
maya.mel
ml_utilities

 
Functions
       
main(selectedChannels=True, transformsOnly=False)
Resets selected channels in the channel box to default, or if nothing's
selected, resets all keyable channels to default.

 
Data
        __author__ = 'Morgan Loomis'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 7

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_resetBind.py'' |  [[Download Tool|http://morganloomis.com/download/riggingScripts/ml_resetBind.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  1  |
|bgcolor(lightgrey): Last Update|  2014-03-02  |
!!!!Description
Quickly remove and recreate a skinCluster while maintaining history. Essentially this allows you to "reset" the skin cluster after you've moved some joints. It also deletes the original bindPose node.
!!Installation
!!!!Download
To use this tool, download [[ml_resetBind.py|http://morganloomis.com/download/ml_resetBind.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_resetBind.py}}}

!!!!Commands
To run the script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_resetBind
ml_resetBind.main()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_resetBind;ml_resetBind.main()");
}}}
!!Usage
Select the skinned meshes you'd like to reset, and run the command.
!!Revision History
|Revision 1|bgcolor(lightgrey):2014-03-02|First publish.|
!!More Info
*[[ml_resetBind Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_resetBind]]
*<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/]]//
<html>
 
 
ml_resetBind
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_resetBind.py

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

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

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

# Quickly remove and recreate a skinCluster while maintaining history.
# Essentially this allows you to "reset" the skin cluster after you've 
# moved some joints. It also deletes the original bindPose node.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Select the skinned meshes you'd like to reset, and run the command. 
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds

 
Functions
       
main()

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

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_puppet.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_puppet.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  3  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!Description
Support tools for puppets created by http://morganloomis.com/puppeteer
!!Installation
!!!!Download
To use this tool, download [[ml_puppet.py|http://morganloomis.com/download/ml_puppet.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_puppet.py}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_puppet
ml_puppet.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_puppet;ml_puppet.ui()");
}}}
!!Usage
Launch the UI to see the options available. Press a button to make a selection or run a command. Right click buttons to create a hotkey for that option. All options are selection-sensitive, so for example if you have two puppets referenced into a scene, and select any part of one of them and run selectControls, it will select all the controls for that puppet only. With nothing selected it will select all controls in the scene. For Fk/Ik switching, select any part of the element you want to switch. So for an arm, you can select the ik hand control, the fk shoulder, the pole vector, and either way it will know to do the switch for that arm.
!!!!UI Options
|<html></html>| |bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>| |bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>| |bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>| |bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!Revision History
|Revision 1|bgcolor(lightgrey):2013-03-10|First publish, fkIk switching only.|
|Revision 2|bgcolor(lightgrey):2014-02-24|Added selection scripts, UI, and updated for latest version of Puppeteer.|
|Revision 3|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_puppet Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_puppet]]
*<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/]]//
<html>
 
 
ml_puppet
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_puppet.py

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

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

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

# Support tools for puppets created by http://morganloomis.com/puppeteer
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Launch the UI to see the options available. Press a button to make a
# selection or run a command. Right click buttons to create a hotkey for that option.
# All options are selection-sensitive, so for example if you have two 
# puppets referenced into a scene, and select any part of one of them and
# run selectControls, it will select all the controls for that puppet only.
# With nothing selected it will select all controls in the scene.
# For Fk/Ik switching, select any part of the element you want to switch.
# So for an arm, you can select the ik hand control, the fk shoulder, 
# the pole vector, and either way it will know to do the switch for that arm.
#      __________________
# - -/__ Requirements __/- - - - - - - - - - - - - - - - - - - - - - - - - - 

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

 
Modules
       
math
maya.cmds
ml_utilities

 
Functions
       
fkIkSwitch()
getControls()
getElementControls()
getElementsAbove(nodes)
getNodeType(node)
getNodeTypeAbove(node, nodeType)
This is a recursive function.
getNodesOfType(nodeType)
getNodesOfTypeBelow(node, nodeType)
getPuppets(nodes=None)
matchPoleVectorControl(jointChain, pv)
Position a pole vector based on a 3-joint chain
selectControls()
selectElementControls()
selectPuppets()
snap(node, snapTo)
spaceSwitch(attr, switchTo)
ui()

 
Data
        PUP_ID_PREFIX = 'pupID_'
__author__ = 'Morgan Loomis'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 3

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_parentShape.py'' |  [[Download Tool|http://morganloomis.com/download/riggingScripts/ml_parentShape.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  1  |
|bgcolor(lightgrey): Last Update|  2014-03-02  |
!!!!Description
Reparent shape nodes to a different transform, or unparent shape nodes to a new transform.
!!Installation
!!!!Download
To use this tool, download [[ml_parentShape.py|http://morganloomis.com/download/ml_parentShape.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_parentShape.py}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_parentShape
ml_parentShape.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_parentShape;ml_parentShape.ui()");
}}}
!!Usage
For parenting shapes, select the child and then the parent, just as if you were parenting nodes normally, and run the command. For unparenting shapes, select any number of nodes and run the command, just as if you were unparenting nodes from a hierarchy.
!!!!UI Options
|<html></html>|Parent shape of the first selected object to the second|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>| |bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!Revision History
|Revision 1|bgcolor(lightgrey):2014-03-02|First publish.|
!!More Info
*[[ml_parentShape Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_parentShape]]
*<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/]]//
<html>
 
 
ml_parentShape
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_parentShape.py

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

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

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

# Reparent shape nodes to a different transform, or unparent shape
# nodes to a new transform.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# For parenting shapes, select the child and then the parent, just 
# as if you were parenting nodes normally, and run the command.
# For unparenting shapes, select any number of nodes and run the command,
# just as if you were unparenting nodes from a hierarchy.
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [Parent Shape] : Parent shape of the first selected object 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
maya.mel
ml_utilities

 
Functions
       
parentShape(child=None, parent=None, maintainOffset=True)
Parent a child shape node to a parent transform. The child node can be a shape,
or a transform which has any number of shapes.
ui()
User interface for parent shape
unparentShape(objs=None)

 
Data
        __author__ = 'Morgan Loomis'
__category__ = 'riggingScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 1
hotkey = {'Ctrl+P': 'unparentShape()', 'Ctrl+p': 'parentShape()'}

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_lockAndHideAttributes.py'' |  [[Download Tool|http://morganloomis.com/download/riggingScripts/ml_lockAndHideAttributes.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  2  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!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.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the 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()");
}}}
!!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
|<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|
!!Revision History
|Revision 1|bgcolor(lightgrey):2011-10-08|First publish.|
|Revision 2|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_lockAndHideAttributes Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_lockAndHideAttributes
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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'
__category__ = 'riggingScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 2

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_keyValueDragger.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_keyValueDragger.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  2  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!Description
Scale keyframes to their default value by dragging in the viewport.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the 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()");
}}}
!!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.
!!Revision History
|Revision 2|bgcolor(lightgrey):2014-03-01|Added revision notes, adding category|
!!More Info
*[[ml_keyValueDragger Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_keyValueDragger]]
*<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/]]//
<html>
 
 
ml_keyValueDragger
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_keyValueDragger.py

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

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

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_keyValueDragger
#     ml_keyValueDragger.drag()
# From MEL, this looks like:
#     python("import ml_keyValueDragger;ml_keyValueDragger.drag()");
#      _________________
# - -/__ 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.
#                                                             __________
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /_ Enjoy! _/- - -

 
Modules
       
maya.OpenMaya
maya.cmds
maya.mel
ml_utilities

 
Classes
       
__builtin__.object
Dragger
ml_utilities.Dragger(__builtin__.object)
KeyValueDragger

 
class Dragger(__builtin__.object)
    A base class for creating a draggerContext tool in Maya
 
  Methods defined here:
__init__(self, name='mlDraggerContext', title='Dragger', defaultValue=0, minValue=None, maxValue=None, multiplier=0.01, cursor='hand')
Args:
    name:           The name of the context tool in Maya
    title:          The nice name of the tool
    defaultValue:   The starting value of the dragger when the mouse button is pushed.
    minValue:       If specified, clamp the minimum output at this value
    maxValue:       If specified, clamp the maximum output at this value
    multiplier:     Scale the output of the dragger by this value.
    cursor:         What type of cursor to display, see Maya's draggerContext for options
drag(self, *args)
Called continuously when holding the mouse button down, updates self.x and self.y with the mouse position,
and runs the corresponding method for whichever button is being pressed.
dragControlLeft(self)
Placeholder meant to be overridden in child classes
dragControlMiddle(self)
Placeholder meant to be overridden in child classes
dragLeft(self)
Placeholder meant to be overridden in child classes
dragMiddle(self)
Placeholder meant to be overridden in child classes
dragShiftLeft(self)
Placeholder meant to be overridden in child classes
dragShiftMiddle(self)
Placeholder meant to be overridden in child classes
drawString(self, message)
Simply writes a message next to the cursor
press(self, *args)
This method is called when the mouse is pressed, and initializes the mouse position.
Be careful overwriting the press method in child classes, because of the undoInfo openChunk.
release(self, *args)
Called when the mouse button is released, and cleans up after the tool.
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 KeyValueDragger(ml_utilities.Dragger)
    Creates the tool and manages the data
 
 
Method resolution order:
KeyValueDragger
ml_utilities.Dragger
__builtin__.object

Methods defined here:
__init__(self, name='mlKeyValueDraggerContext', minValue=0, maxValue=None, defaultValue=1, title='Scale')
dragLeft(self)
Activated by the left mouse button, this scales keys toward or away from their default value.

Methods inherited from ml_utilities.Dragger:
drag(self, *args)
This is what is actually run during the drag, updating the coordinates and calling the 
placeholder drag functions depending on which button is pressed.
dragControlLeft(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragControlMiddle(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragMiddle(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftLeft(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftMiddle(self, *args)
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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 2

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_hold.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_hold.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  5  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!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.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the 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()");
}}}
!!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.
!!!!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> !!Revision History |Revision 1|bgcolor(lightgrey):|First publish| |Revision 4|bgcolor(lightgrey):2011-05-01|Updated to use ml_utilities| |Revision 5|bgcolor(lightgrey):2014-03-01|adding category| !!More Info *[[ml_hold Python Documentation]] *[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_hold
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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, 2012-08-26
#      _______________________________
# - -/__ 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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 5

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_goToKeyframe.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_goToKeyframe.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  3  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!Description
This is simply a more robust way to navigate to the next or previous keyframe. It recognizes only keys that are visible in the graph editor, and has options to only navigate through selected keys, and to round to the nearest whole frame, if you don't like editing on sub-frames. Finally, it can look for keys in the whole hierarchy of the selected node, to help with keeping all a character's keys on the same frames.
!!Installation
!!!!Download
To use this tool, download [[ml_goToKeyframe.py|http://morganloomis.com/download/ml_goToKeyframe.py]] into your maya scripts directory, for example:
:{{{C:/Documents and Settings/USERNAME/My Documents/maya/scripts/ml_goToKeyframe.py}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the script directly in Maya, from a ''shelf button'' or the ''script editor'', use the following Python command:
{{{
import ml_goToKeyframe
ml_goToKeyframe.ui()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_goToKeyframe;ml_goToKeyframe.ui()");
}}}
!!Usage
Run the UI, select next or previous to advance to the next or previous visible or selected key times. Right click the buttons to create hotkeys.
!!!!UI Options
|<html></html>| |bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>| |bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!Revision History
|Revision 1|bgcolor(lightgrey):2012-07-23|First publish.|
|Revision 2|bgcolor(lightgrey):2013-10-29|Added hierarchy search, select keyframes, and a couple more options.|
|Revision 3|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_goToKeyframe Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_goToKeyframe]]
*<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/]]//
<html>
 
 
ml_goToKeyframe
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_goToKeyframe.py

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

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

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

# This is simply a more robust way to navigate to the next or previous keyframe.
# It recognizes only keys that are visible in the graph editor, and has options to
# only navigate through selected keys, and to round to the nearest
# whole frame, if you don't like editing on sub-frames. 
# Finally, it can look for keys in the whole hierarchy of the selected node,
# to help with keeping all a character's keys on the same frames.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the UI, select next or previous to advance to the next or previous visible or
# selected key times. Right click the buttons to create hotkeys.
#      __________________
# - -/__ 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
       
goToKeyframe(option='next', roundFrame=False, selected=False, selectKeys=False, searchHierarchy=False)
next(roundFrame=False, selected=False, searchHierarchy=False, selectKeys=False, *args)
Wrapper for next args
previous(roundFrame=False, selected=False, searchHierarchy=False, selectKeys=False, *args)
Wrapper for previous args
ui()
user interface for ml_goToKeyframe
uiSetCheckBox(*args)

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

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_deleteKey.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_deleteKey.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  7  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!Description
This is a more robust tool for deleting keyframes in Maya, including deleting keys on the current frame and which are visible in the graph editor. Alternately, delete selected channels.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the 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()");
}}}
!!Usage
Run the tool, select the options, and press the Delete Key button. Set the options and right click the button to create a hotkey or shelf button. If selected keys is unchecked, it will delete keys on the current frame regardless of key selection. Delete sub-frames will include keys which fall within half a frame of the current time. The second button operates on entire channels, and it will delete the channels that are selected, or all the channels on an object.
!!!!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>|Delete Keyframe.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
|<html></html>|Delete selected channels, or all keys on selected nodes.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!Revision History
|Revision 1|bgcolor(lightgrey):2012-03-29|First publish.|
|Revision 2|bgcolor(lightgrey):2012-03-29|Fixing bugs, published first version too quickly!|
|Revision 3|bgcolor(lightgrey):2012-04-14|minor bug fix|
|Revision 4|bgcolor(lightgrey):2012-07-23|Split into keys and channels, updated to use latest ml_utilities scripts, bug fixes.|
|Revision 5|bgcolor(lightgrey):2012-07-23|Fixing argument for KeySelection|
|Revision 6|bgcolor(lightgrey):2012-11-19|updated to new KeySelection|
|Revision 7|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_deleteKey Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_deleteKey
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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 6, 2012-11-19
#      _______________________________
# - -/__ 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 the current frame and which are visible in the graph editor.
# Alternately, delete selected channels.
#      ___________
# - -/__ Usage __/- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

# Run the tool, select the options, and press the Delete Key button.
# Set the options and right click the button to create
# a hotkey or shelf button.
# If selected keys is unchecked, it will delete keys on the current frame
# regardless of key selection. Delete sub-frames will include keys which fall
# within half a frame of the current time.
# The second button operates on entire channels, and it will delete the channels
# that are selected, or all the channels on an object.
#      ________________
# - -/__ 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 Keys] : Delete Keyframe.
# [Delete Channels] : Delete selected channels, or all keys on selected nodes.
#      __________________
# - -/__ 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
       
deleteChannels()
Deletes selected channels, otherwise all keys on the selected objects.
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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 7
hotkey = {'d': 'deleteKey(selectedKeys=True, deleteSubFrames=True, visibleInGraphEditor=True)'}

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_copyAnim.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_copyAnim.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  4  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!Description
Copy animation curves either completely or in part from one node or hierarchy to another.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the 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()");
}}}
!!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. Use the Copy to New Layer option if you want the curves copied into a new animation layer, in order to preserve the original animation, or to blend.
!!!!UI Options
|<html></html> Copy To New Layer|Create a new animation layer to copy the curves into, preserving the original animation.|
|<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 hierarchies.|bgcolor(lightgrey):Right-click to create a shelf or hotkey|
!!Revision History
|Revision 1|bgcolor(lightgrey):2012-03-14|First publish.|
|Revision 2|bgcolor(lightgrey):2012-11-06|Adding layer option.|
|Revision 3|bgcolor(lightgrey):2012-11-28|remove debug print|
|Revision 4|bgcolor(lightgrey):2014-03-01|Adding category and fixing bad argument name.|
!!More Info
*[[ml_copyAnim Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_copyAnim
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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 4, 2014-03-01
#      _______________________________
# - -/__ 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. Highlight the timeline if you
# want to copy just that part of the animation. Use the Copy to New Layer option if you
# want the curves copied into a new animation layer, in order to preserve the original
# animation, or to blend.
#      ________________
# - -/__ UI Options __/- - - - - - - - - - - - - - - - - - - - - - - - - - - 

# [] Copy To New Layer : Create a new animation layer to copy the curves into, preserving the original animation.
# [Copy Single] : Copy animation from one object to another.
# [Copy Hierarchy] : Uses name matching to copy animation across hierarchies.
#      __________________
# - -/__ 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, layerName=None)
Copy animation from a source hierarchy and paste it to a destination hierarchy.
copySingle(source=None, destination=None, pasteMethod='replace', offset=0, addToLayer=False)
Copy animation from a source node and paste it to a destination node
ui()
user interface for ml_copyAnim

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

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_convertRotationOrder.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_convertRotationOrder.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  4  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!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.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the 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()");
}}}
!!Usage
Run the UI. Select the objects with rotation orders you want to change, and press the button for the desired rotation order.
!!!!UI Options
|<html></html>| |
!!Revision History
|Revision 1|bgcolor(lightgrey):2011-10-08|First publish.|
|Revision 2|bgcolor(lightgrey):2012-03-12|Updated to work with non-keyed objects, added the tips button.|
|Revision 3|bgcolor(lightgrey):2012-08-04|Fixing bug with potential duplicate temp name.|
|Revision 4|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_convertRotationOrder Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_convertRotationOrder
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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 3, 2012-08-04
#      _______________________________
# - -/__ 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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 4

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_cameraDepthDragger.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_cameraDepthDragger.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  2  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!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.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
:[[euclid.py|http://partiallydisassembled.net/euclid.html]]

!!!!Commands
To run the 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()");
}}}
!!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.
!!Revision History
|Revision 1|bgcolor(lightgrey):2012-03-12|First publish.|
|Revision 2|bgcolor(lightgrey):2014-03-01|adding category|
!!More Info
*[[ml_cameraDepthDragger Python Documentation]]
*[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_cameraDepthDragger
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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/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)
This is what is actually run during the drag, updating the coordinates and calling the 
placeholder drag functions depending on which button is pressed.
dragControlLeft(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragControlMiddle(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragMiddle(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftLeft(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftMiddle(self, *args)
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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 2

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_breakdownDragger.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_breakdownDragger.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  4  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!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.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
!!!!Commands
To run the 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()");
}}}
!!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>
</html> !!Revision History |Revision 1|bgcolor(lightgrey):|First publish| |Revision 4|bgcolor(lightgrey):2014-03-01|adding category| !!More Info *[[ml_breakdownDragger Python Documentation]] *[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=ml_breakdownDragger]] *<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/]]//
<html>
 
 
ml_breakdownDragger
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/ml_breakdownDragger.py

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

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

# Run the tool by importing the module, and then calling the primary function.
# From python, this looks like:
#     import ml_breakdownDragger
#     ml_breakdownDragger.drag()
# From MEL, this looks like:
#     python("import ml_breakdownDragger;ml_breakdownDragger.drag()");
#      _________________
# - -/__ 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 __/- - - - - - - - - - - - - - - - - - - - - - - - - 

http://www.youtube.com/watch?v=D8yD4zbHTP8
#      __________________
# - -/__ 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

 
Classes
       
ml_utilities.Dragger(__builtin__.object)
BreakdownDragger

 
class BreakdownDragger(ml_utilities.Dragger)
    Creates the tool and manages the data
 
 
Method resolution order:
BreakdownDragger
ml_utilities.Dragger
__builtin__.object

Methods defined here:
__init__(self, name='mlBreakdownDraggerContext', minValue=None, maxValue=None, defaultValue=0, title='Breakdown')
dragLeft(self)
This is activated by the left mouse button, and weights to the next or previous keys.
dragMiddle(self)
This is activated by the middle mouse button, and weights to the average of the surrounding keys.
dragShiftLeft(self)
This is activated by Shift and the left mouse button, and weights to the next or previous keys, without clamping.

Methods inherited from ml_utilities.Dragger:
drag(self, *args)
This is what is actually run during the drag, updating the coordinates and calling the 
placeholder drag functions depending on which button is pressed.
dragControlLeft(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragControlMiddle(self, *args)
Placeholder for potential commands. This is meant to be overridden by a child class.
dragShiftMiddle(self, *args)
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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 4

 
Author
        Morgan Loomis
</html>
|bgcolor(lightgrey): ''ml_arcTracer.py'' |  [[Download Tool|http://morganloomis.com/download/animationScripts/ml_arcTracer.py]]  |
|bgcolor(lightgrey): <html>Download Icon</html> |//Right-click>Save As...//|
|bgcolor(lightgrey): Revision|  4  |
|bgcolor(lightgrey): Last Update|  2014-03-01  |
!!!!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.
!!Installation
!!!!Download
To use this tool, 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}}}

!!!!Requirements
If you don't have them already, this tool requires the following scripts to be installed in your script directory as well:
:[[ml_utilities.py|http://morganloomis.com/download/ml_utilities.py]]
:[[euclid.py|http://partiallydisassembled.net/euclid.html]]

!!!!Commands
To run the 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()");
}}}
!!Usage
Run the UI, and press the buttons to choose the action.
!!!!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> !!Revision History |Revision 1|bgcolor(lightgrey):2011-05-01|First publish| |Revision 2|bgcolor(lightgrey):2011-05-14|minor bug fix involving error with duplicate names| |Revision 3|bgcolor(lightgrey):2011-05-14|Revision notes update.| |Revision 4|bgcolor(lightgrey):2014-03-01|adding category| !!More Info *[[ml_arcTracer Python Documentation]] *[[Make a suggestion or submit a bug.|http://morganloomis.com/downloads/feedback-and-bug-reports?1ex_field1=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/]]//
<html>
 
 
ml_arcTracer
index
/Users/morganloomis/Dropbox/maya/scripts/toolbox/menus/ml/published/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 4, 2014-03-01
#      _______________________________
# - -/__ 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/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'
__category__ = 'animationScripts'
__license__ = 'Creative Commons Attribution-ShareAlike'
__revision__ = 4

 
Author
        Morgan Loomis
</html>
!!!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._showHelpCommand()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_utilities;ml_utilities._showHelpCommand()");
}}}
!!!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.main()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_selectKeyed;ml_selectKeyed.main()");
}}}
!!!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.main()
}}}
To call Python through MEL, for example in a ''hotkey'' or ''marking menu'', use the following MEL command:
{{{
python("import ml_resetChannels;ml_resetChannels.main()");
}}}
!!!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()");
}}}
!!!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()");
}}}
!!!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()");
}}}
!!!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()");
}}}
!!!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()");
}}}
!!!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()");
}}}
!!!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()");
}}}
!!!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()");
}}}
|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>
!!!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()");
}}}
!!!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_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_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>