Need to query if auto key is turned on or off using maxscript? Use the animButtonState command. It returns true or false, so using this info you can check it's current state and then setup a toggle for it, or use it make sure Max is in the correct mode before running a script.
Simple, yet extremely useful!
Wednesday, July 21, 2010
Wednesday, July 14, 2010
MEL To Maxscript To MEL
For whatever reason, I am a huge fan of using MEL to export a Maxscript file and vice versa. There is a strange feeling of satisfaction, something along the lines of getting away with a crime or not letting the man bring you down. Grab your code by the balls. That is all. :)
Tuesday, July 13, 2010
MEL/PyMEL: Get Top Most Parent Of An Object
Here is a function I use often that will give you the top-most parent of any object. I use it when I want to perform a function on an entire heirarchy but don't want to worry about needing to select the top most object. I can just grab any of them, hit a button and it grabs the top (using the function here) and then selects or grabs the entire hierarchy. I'm kind of OCD about saving every possible second.
Mel Version:
PyMel Version:
Update: Thanks to Scott Englert for pointing out in the comments that MEL and PyMel both have built in functions for this already.
MEL command that comes with Maya:
rootOf($obj);
PyMEL method of dag nodes:
obj.root()
Cheers Scott!
Mel Version:
// **********************************************************
// Return Top Parent Of Any Node
global proc string jgReturnTopParent (string $obj) {
string $a[] = {} ;
string $b ;
$a = `listRelatives -p $obj` ;
while(size($a) > 0) {
$b = $a[0] ;
$a = `listRelatives -p $a[0]` ;
}
return $b ;
}
PyMel Version:
##################################################
## Return Top Parent Of Any Node
def jgReturnTopParent(obj):
# Imports
import pymel.core as pm
# Get First Parent
varA = pm.listRelatives(obj,p=True)
# Loop All Parents
while(len(varA) > 0):
varB = varA[0]
varA = pm.listRelatives(varA[0],p=True)
return varB
Update: Thanks to Scott Englert for pointing out in the comments that MEL and PyMel both have built in functions for this already.
MEL command that comes with Maya:
rootOf($obj);
PyMEL method of dag nodes:
obj.root()
Cheers Scott!
Labels:
Free Mel Scripts,
Functions,
Get Parent,
listRelatives,
Maya,
MEL,
Parent,
Scripting,
Scripts
Monday, July 12, 2010
Get Maya Version With MEL
Today I had to figure out how to get the current Maya version with MEL. I assumed it would be in some sort of environment variable but it turns out it had it's own command. I spent a good fifteen minutes trying to track this down so I hope this blog post can save somebody out there at least some of that time.
The command is getApplicationVersionAsFloat.
The command is getApplicationVersionAsFloat.
float $mayaVersion = `getApplicationVersionAsFloat` ;
Labels:
Get Maya Version MEL,
Maya,
Maya Version,
MEL,
Scripting,
Scripts
Friday, July 9, 2010
Using White Space To Your Advantage
A really helpful hint when scripting is to know how to leverage white-space in your code. What this means is that certain languages will allow a lot of flexibility in the way your code is laid out that can make it much easier to read and edit. Take this example:
The code above shows a string array containing twenty Maya Ascii files. It's straight forward, but a little difficult to read due to it all being condensed. If you need to make edits to one of the file names or add some into the list somewhere specific it can be a bit annoying finding the right spot. Let's use white space to help us with this.
Cool huh? MEL and most languages will allow you to do this and many other things with white space in your code to really space it out evenly and neatly so it's easy for you and anyone else interacting with your scripts to use and read. Practice ways of using this trick to make your code more awesome!
string $fileArray[] = {"C:/_Maya/temp/file_0001.ma","C:/_Maya/temp/file_0002.ma","C:/_Maya/temp/file_0003.ma","C:/_Maya/temp/file_0004.ma","C:/_Maya/temp/file_0005.ma","C:/_Maya/temp/file_0006.ma","C:/_Maya/temp/file_0007.ma","C:/_Maya/temp/file_0008.ma","C:/_Maya/temp/file_0009.ma","C:/_Maya/temp/file_0010.ma","C:/_Maya/temp/file_0011.ma","C:/_Maya/temp/file_0012.ma","C:/_Maya/temp/file_0013.ma","C:/_Maya/temp/file_0014.ma","C:/_Maya/temp/file_0015.ma","C:/_Maya/temp/file_0016.ma","C:/_Maya/temp/file_0017.ma","C:/_Maya/temp/file_0018.ma","C:/_Maya/temp/file_0019.ma","C:/_Maya/temp/file_0020.ma"} ;
The code above shows a string array containing twenty Maya Ascii files. It's straight forward, but a little difficult to read due to it all being condensed. If you need to make edits to one of the file names or add some into the list somewhere specific it can be a bit annoying finding the right spot. Let's use white space to help us with this.
string $fileArray[] = {
"C:/_Maya/temp/file_0001.ma",
"C:/_Maya/temp/file_0002.ma",
"C:/_Maya/temp/file_0003.ma",
"C:/_Maya/temp/file_0004.ma",
"C:/_Maya/temp/file_0005.ma",
"C:/_Maya/temp/file_0006.ma",
"C:/_Maya/temp/file_0007.ma",
"C:/_Maya/temp/file_0008.ma",
"C:/_Maya/temp/file_0009.ma",
"C:/_Maya/temp/file_0010.ma",
"C:/_Maya/temp/file_0011.ma",
"C:/_Maya/temp/file_0012.ma",
"C:/_Maya/temp/file_0013.ma",
"C:/_Maya/temp/file_0014.ma",
"C:/_Maya/temp/file_0015.ma",
"C:/_Maya/temp/file_0016.ma",
"C:/_Maya/temp/file_0017.ma",
"C:/_Maya/temp/file_0018.ma",
"C:/_Maya/temp/file_0019.ma",
"C:/_Maya/temp/file_0020.ma"
} ;
Cool huh? MEL and most languages will allow you to do this and many other things with white space in your code to really space it out evenly and neatly so it's easy for you and anyone else interacting with your scripts to use and read. Practice ways of using this trick to make your code more awesome!
Labels:
Code,
MEL,
programming,
Scripting,
White Space
Wednesday, July 7, 2010
Maya Scripting: "Should I Learn MEL Or Python?"
The question I get asked most often by people just getting into scripting in Maya is, "Should I learn MEL first or go right to Python?". It's a legitimate question and at this stage in the lives of both languages, it has merit. The reality is you need to learn both...but which one first? And why learn MEL when Python is there? Maya's embedded language has been around for ages and is notoriously weak and difficult to use in certain areas. As Python slithers it's way deeper and deeper into our pipelines, many believe MEL will be phased out completely in coming years. Seeings how it will inevitably become more and more prevalent in 3D applications and is not Maya-specific, isn't it only logical to not bother with Maya's aging language and go right to Python? All signs seem to point that way, but I don't agree with this philosophy and I'll explain why.
My answer is almost always the same when people ask me this question: First, learn enough MEL for it to be useful and help you work, then start to learn Python along side it.
If you are new to programming and scripting, you are unlikely to learn enough Python quickly enough for it to be of any use to you. Python is definitely more powerful, gives you more control, and is really more fun to use in the end...BUT...it's more difficult. There are more rules, more things involved with getting it working properly and generally just more things you need to know in order to use and learn it. You'll need to learn the basics of installing libraries, having paths set up correctly, using environment variables, linking modules, and all sorts of steps just to get it doing what you want. Of course you can just go in there and start giving it Maya commands, but at that point you're not taking advantage of it's abilities and may as well use MEL. That brings me to my point.
With MEL, you can start doing things almost instantly even with little to no knowledge of how it works. Compared to some languages it's relatively easy to pick up and get going with and it exists in Maya already with great documentation. To get started, you can watch your Script Editor to see what certain commands are doing and how they work. Run a tool or do something in Maya and watch what kind of code it spits out in the Script Editor. Copy and paste that code and start changing things around to make your own little scripts and buttons. Learning the basics of variables, functions and syntax are all easy using the tutorials in the Maya documentation. All in all, within a couple of hours you can be writing small snippets of code that will actually be speeding up your work-flow. It's not to say you can't do the same with Python if you're a fast learner, but generally speaking you'll be up and running with MEL a lot quicker.
Once you're cruising with MEL and you're putting it good use...that is when I'd recommend diving into some Python and beginning to learn how it works. At the end of the day you can (and will) use both in various situations, but I'd never suggest to anyone to NOT learn how to script in MEL. Whether it be needing to clean up a co-workers code, make changes to a script, write a Maya GUI, or write a script in an older version of Maya that doesn't have Python...there are plenty of reasons you should not skip MEL.
All that being said, PyMEL combines the best of both and is my drug of choice at the moment. Learn them all so that you can make your own call on what's best. :)
My answer is almost always the same when people ask me this question: First, learn enough MEL for it to be useful and help you work, then start to learn Python along side it.
If you are new to programming and scripting, you are unlikely to learn enough Python quickly enough for it to be of any use to you. Python is definitely more powerful, gives you more control, and is really more fun to use in the end...BUT...it's more difficult. There are more rules, more things involved with getting it working properly and generally just more things you need to know in order to use and learn it. You'll need to learn the basics of installing libraries, having paths set up correctly, using environment variables, linking modules, and all sorts of steps just to get it doing what you want. Of course you can just go in there and start giving it Maya commands, but at that point you're not taking advantage of it's abilities and may as well use MEL. That brings me to my point.
With MEL, you can start doing things almost instantly even with little to no knowledge of how it works. Compared to some languages it's relatively easy to pick up and get going with and it exists in Maya already with great documentation. To get started, you can watch your Script Editor to see what certain commands are doing and how they work. Run a tool or do something in Maya and watch what kind of code it spits out in the Script Editor. Copy and paste that code and start changing things around to make your own little scripts and buttons. Learning the basics of variables, functions and syntax are all easy using the tutorials in the Maya documentation. All in all, within a couple of hours you can be writing small snippets of code that will actually be speeding up your work-flow. It's not to say you can't do the same with Python if you're a fast learner, but generally speaking you'll be up and running with MEL a lot quicker.
Once you're cruising with MEL and you're putting it good use...that is when I'd recommend diving into some Python and beginning to learn how it works. At the end of the day you can (and will) use both in various situations, but I'd never suggest to anyone to NOT learn how to script in MEL. Whether it be needing to clean up a co-workers code, make changes to a script, write a Maya GUI, or write a script in an older version of Maya that doesn't have Python...there are plenty of reasons you should not skip MEL.
All that being said, PyMEL combines the best of both and is my drug of choice at the moment. Learn them all so that you can make your own call on what's best. :)
Subscribe to:
Posts (Atom)
Scripting Topics
MEL
(41)
Maya
(39)
Scripting
(32)
Scripts
(21)
programming
(14)
Free Mel Scripts
(8)
MaxScript
(7)
Coding
(6)
Rigging
(5)
tutorial
(5)
3ds Max
(4)
Python
(4)
Tricks
(4)
faceware
(4)
image metrics
(4)
Learn
(3)
Namespace
(3)
Namespacing
(3)
animation
(3)
facial
(3)
webinar
(3)
Code
(2)
GDC
(2)
Game Developers Conference
(2)
Multiple Namespaces
(2)
Print Selected Objects
(2)
Recursive
(2)
Removing Namespace
(2)
Return
(2)
Set Driven Keys
(2)
TOkenize
(2)
Tips
(2)
Toggle Background Color with MEL
(2)
animation tools
(2)
animators resource
(2)
deformers
(2)
learning
(2)
maya tools
(2)
mesh
(2)
modeling
(2)
nodes
(2)
procedure
(2)
script swell
(2)
transforms
(2)
Animschool
(1)
Attribute
(1)
Background Color
(1)
Beer
(1)
Blur
(1)
Character Setup
(1)
Check if an object exists
(1)
Class
(1)
Command Line
(1)
Constraints
(1)
Create SDK
(1)
Create a directory with mel
(1)
Data
(1)
Export
(1)
FilterString
(1)
Fix
(1)
Floating Slider Time
(1)
Functions
(1)
Get Maya Version MEL
(1)
Get Parent
(1)
Google
(1)
Holiday
(1)
How To Write To A Text File
(1)
Import
(1)
Incremental Save
(1)
Index
(1)
Joint Chain
(1)
Make Set Driven Keys
(1)
Maya Version
(1)
Modules
(1)
Objects
(1)
Orient Constraint
(1)
PYMEL
(1)
Parent
(1)
Parent Constraint
(1)
Point Constraint
(1)
Position
(1)
Print
(1)
Print Current Selection
(1)
Print Random Quotes
(1)
Print Selection
(1)
Print Vertices
(1)
Progress Bar
(1)
Progress Window
(1)
PyQT
(1)
Removing Spaces From Names
(1)
Scene File Name
(1)
Select Connections
(1)
Select Outgoing Nodes
(1)
Split Bones
(1)
Split Joints
(1)
St. Patrick's Day
(1)
String Array
(1)
System
(1)
Transfer UVs
(1)
Viewport
(1)
White Space
(1)
Windows Username
(1)
Zero Out Attributes
(1)
animButtonState
(1)
arrays
(1)
articles
(1)
auto key
(1)
better
(1)
blendshapes
(1)
break
(1)
confirm dialog
(1)
continue
(1)
convention
(1)
e3
(1)
efficiency
(1)
error
(1)
eval
(1)
executable
(1)
fclose
(1)
fopen
(1)
fprint
(1)
games
(1)
improving
(1)
infinite loop
(1)
joints
(1)
listHistory
(1)
listRelatives
(1)
logic
(1)
loops
(1)
milestone
(1)
nodeType
(1)
objExists
(1)
recursion
(1)
rotates
(1)
rotations
(1)
schools
(1)
sculpting
(1)
setAttr
(1)
shout outs
(1)
source
(1)
source a script with a variable
(1)
speed
(1)
tech-artists.org
(1)
translates
(1)
video
(1)
warning
(1)
world matrix
(1)
worldMatrix
(1)


