Showing posts with label Tricks. Show all posts
Showing posts with label Tricks. Show all posts

Thursday, February 11, 2010

MEL: Snap / Move An Object To The Position and Orientation of Another Object

There's a super easy trick for snapping an object to the position and orientation of another object in your scene.

All you need to do is constrain your object with maintain offset turned off, and then delete the constraint. So, a quick and easy way to do this with point and orient constraints.


delete `pointConstraint $obj $targetObj` ;
delete `orientConstraint $obj $targetObj` ;

This deletes the return (the name of the constraint) after running the constraint itself.

Similarly you could just use a parent constraint.

delete `parentConstraint $obj $targetObj` ;

Credit to John Riggs for showing me this trick.

Monday, February 8, 2010

MEL: Trick To Pass An Array Into A String Argument

I wrote a quick proc this morning that will let me pass an array (specified index) into a string argument since Maya won't let you do it any way by default in MEL.

Example...

// Looking For This Object's Shape Node
string $object = "myObject" ;
string $shapeArr[] = `listRelatives -shape $object` ;
string $shapeNode = $shapeArr[0] ;

// The above returns an array, which is annoying. To me at least...



I'm aware you can use $shapeArr[0] as your shape node without redeclaring it into the second variable, but I've always felt it was sloppy to do it that way.

Here's a simple MEL procedure that makes it easier.

// **********************************************************
// Returns An Index From A String Array
global proc string jgArrToStr (string $array[], int $index) {

// Get Index From Array
string $obj = $array[$index] ;

// Return
return $obj ;

}

// Now you can do...

string $object = "myObject" ;
string $shape = jgArrToStr(`listRelatives -shape $object`, 0) ;

This will only work if you know the index you're looking for in the array, but a lot of times MEL returns string arrays when it doesn't need to and you know what it will be.

Friday, January 22, 2010

MEL: Progress Window

Ever wanted to build a progress window into a script you're running that is taking a long time? MEL has one built in already, and it works quite well!



int $amount = 0;

progressWindow
-title "Doing Nothing"
-progress $amount
-status "Sleeping: 0%"
-isInterruptable true;

while (true) {

// Check if the dialog has been cancelled
if ( `progressWindow -query -isCancelled` ) break;

// Check if end condition has been reached
if ( `progressWindow -query -progress` >= 100 ) break;

$amount += 5;

progressWindow -edit
-progress $amount
-status ("Sleeping: "+$amount+"%");

pause -seconds 1;
}

progressWindow -endProgress;

You can find it in the MEL help file. It's fun.

Thursday, January 21, 2010

MEL: Select Outgoing Nodes From A Specific Attribute

Sometimes you'll have a node on a rig or in your scene that has thousands of outgoing connections on lots of different attributes. You may only want to edit a specific attribute's outgoing connections but you can't find them in the Hypergraph because there are just too many to search through. Here is a small trick to speed that up.

Let's assume your node is called "myBusyNode". The attribute you're looking to check is called, "thisAttr".

// Selects all nodes that are outgoing connections of myBusyNode.thisAttr
select -r `listConnections -s false -d true myBusyNode.thisAttr` ;

Alternately you can select the incoming connections by swapping source and destination.

// Selects all nodes that are incoming connections of myBusyNode.thisAttr
select -r `listConnections -s true -d false myBusyNode.thisAttr` ;

And, of course you could set both to true and select both incoming and outgoing nodes.

The return value of listConnections will give you all of the outgoing connected nodes from that attribute. You can then focus on your selection in the Hypergraph and you'll be able to see only the network of your selected nodes, not every single connection coming out of myBusyNode. I use this trick about four hundred and eighty seven times a day.

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)
 
Script Swell - Blogged