This is slightly off-topic than the usual scripting posts, but I found this really useful and wanted to share.
It's a technique on how to transfer UVs from one mesh to another while maintaining deformer history on your object. It worked for what I was doing and I imagine I'll be using it again in the future.
http://animbiz.blogspot.com/2010/02/transferring-uvs-after-rigging.html
I'm currently working on a bullet proof transfer script, I'll let the world know when it works. :)
Tuesday, July 27, 2010
Wednesday, July 21, 2010
Maxscript: Check If Auto Key Is Turned On
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!
Simple, yet extremely useful!
Labels:
3ds Max,
animButtonState,
auto key,
MaxScript
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
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)

