Monday, September 13, 2010

MEL Script: Remove All Namespaces

There are already a few posts on ScriptSwell dealing with namespaces in general, but here is a quick and dirty way to just remove all of them from your scene, no questions asked.


// Get All Nodes In Scene
string $allNodes[] = `ls` ;

// Loop Through Them
for($node in $allNodes) {

// Tokenize And Rename
string $buffer[] ;
tokenize $node ":" $buffer ;
string $newName = $buffer[size($buffer)-1] ;
catch(`rename $node $newName`) ;

}
This uses the tokenize command. For more info, check out this mel tutorial on how to use the tokenize command. Essentially it's looping through every node in your scene, checking if there are colons in the name of it, and renaming the object to what it would be with no namespaces.

The reason I call this dirty is because it has potential to cause naming conflicts in your scene file. In a lot of cases namespaces are there for a reason, so you should make sure it's safe to remove them before doing so. Maya does not support having more than one object with the same name, so if you run this script it may end up changing the names of some of your nodes. Usually this is in the form of adding a number to the end of it. (i.e. hand_CTRL becomes hand_CTRL1). Be sure to save your scene before running this (as you should with any MEL script) and do some testing before you continue forward to make sure everything is working like it should.

Also:
  • Every Maya scene file has a list of namespaces that have at one time or another been used in that scene. This script will not remove any from that list.
  • If something is referenced in your scene, this will not be able to remove the namespace properly.
  • You'll see a slew of error messages pass by, this is Maya trying to rename nodes that aren't allowed to be renamed. You can ignore these.

For more reading about namespaces in Maya, check out the following:

7 comments:

  1. this script is pretty amazing, thanks!

    ReplyDelete
  2. very nice, thanks to you for the help! :)

    ReplyDelete
  3. Script is good, you can still make it better(as said by Bruce Lee ;)) by removing the namespaces(which are empty now, ideally) from your scene as renaming will not remove the namespaces from the scene file.

    // for loop is needed as your node may have multiple(nested) namespaces
    for($ns in $buffer) {
    // catch is needed, as for some reason it may not able to remove namespace,
    // eg. if any node still having the namespace, which you are trying to remove
    catch(`namespace -rm $ns`);
    }

    Note:- you can go clean in above loop, by removing the last element from the $buffer list as that is the node name.


    Regards
    Day Dreamer
    www.daydreamer3d.weebly.com

    ReplyDelete
  4. thanks lot for all of the tutorials love you man :D

    ReplyDelete

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