// Copyright (C) 2008 Rod Green // All rights reserved. // // Website: http://www.rodgreen.com // ---------- Utility procedures global proc string padInt(int $inputInt, int $length) { string $returnString = $inputInt; for($i = size($returnString); $i < $length; $i++) $returnString = ("0" + $returnString); return $returnString; } global proc string[] getSelection() { return (ls("-selection", "-long", "-flatten")); } global proc string renameLong(string $object, string $newName) { return longNameOf(rename($object, $newName)); } global proc int countCharInString(string $char, string $string) { int $count = 0; for($i = 1; $i <= size($string); $i++) if(substring($string, $i, $i) == $char) $count++; return $count; } global proc int intArrayFloor(int $intArray[]) { int $returnInt = $intArray[0]; for($eachInt in $intArray) if($eachInt < $returnInt) $returnInt = $eachInt; return $returnInt; } global proc string[] sortStringByInts(string $stringArray[], int $intArray[]) { string $returnArray[] = {}; int $arrayToSearch[] = $intArray; int $loopCount = size($arrayToSearch); int $floor = intArrayFloor($intArray); for($retIndex = 0; $retIndex < $loopCount; $retIndex++) { int $iMax = $floor; int $indexFound = -1; for($i = 0; $i < $loopCount; $i++) { int $eachInt = $arrayToSearch[$i]; if( $eachInt >= $iMax ) { $iMax = $eachInt; $indexFound = $i; } } $arrayToSearch[$indexFound] = ($floor - 1); $returnArray[$retIndex] = $stringArray[$indexFound]; } return $returnArray; } global proc string[] sortObjectsByHierarchy(string $objectArray[]) { int $ints[] = {}; for($eachObj in $objectArray) $ints[size($ints)] = countCharInString("|", $eachObj); return sortStringByInts($objectArray,$ints); } global proc int[] getStringArrayMapping(string $unmodified[], string $modified[]) { int $returnArray[] = {}; string $searchList[] = $unmodified; for($i = 0; $i < size($modified); $i++) { int $foundIndex = stringArrayFind($modified[$i], $searchList); $returnArray[$i] = $foundIndex; $searchList[$foundIndex] = ""; } return $returnArray; } global proc int stringArrayFind(string $item, string $array[]) { for($i = 0; $i < size($array); $i++) if($array[$i] == $item) return $i; return -1; } // ---------- Core procedures global proc string[] renameObjects(string $unsortedObjs[], string $newName, int $padding) { string $sortedObjs[] = sortObjectsByHierarchy($unsortedObjs); int $mapping[] = getStringArrayMapping($unsortedObjs, $sortedObjs); int $startIndex = 0; string $newNamesUnsorted[] = {}; for($i = 0; $i < size($unsortedObjs); $i++) { string $eachName = ($newName + "_" + padInt($startIndex + $i, $padding)); while(objExists($eachName)) { $startIndex++; $eachName = ($newName + "_" + padInt($startIndex + $i, $padding)); } $newNamesUnsorted[size($newNamesUnsorted)] = $eachName; } for($eachIndex in $mapping) { $unsortedObjs[$eachIndex] = renameLong($unsortedObjs[$eachIndex], $newNamesUnsorted[$eachIndex]); } return $unsortedObjs; } // ---------- UI procedures global proc renameObjectsUI() { global string $renameObjectsWindow; if (`window -exists $renameObjectsWindow`) deleteUI -window $renameObjectsWindow; $renameObjectsWindow = `window -widthHeight 308 100 -resizeToFitChildren 1 -sizeable 0 -title "Rename Objects Intermediate" "renameObjectsWindow" `; columnLayout; rowColumnLayout -numberOfRows 4; string $paddingCtrl = `intFieldGrp -numberOfFields 1 -label "Padding" -ann "How much to pad integer suffix" -cw 1 90 -cw 2 30 -value1 2`; string $newNameCtrl = `textFieldGrp -label "New Name" -ann "Enter new name to rename object(s) to" -cw 1 90 -cw 2 208 -text "myObject"`; setParent..; rowColumnLayout -numberOfColumns 4 -columnWidth 1 100 -columnWidth 2 100 -columnWidth 3 100; button -l "Cancel" -c "deleteUI -window $renameObjectsWindow;"; button -l "Defaults" -c "renameObjectsUI();" -ann "Reset settings to defaults"; button -l "Apply" -c ( "renameObjects(getSelection()," + "(\"\" + textFieldGrp(\"-q\", \"-text\", \"" + $newNameCtrl +"\")), " + "(\"\" + intFieldGrp(\"-q\", \"-value1\", \"" + $paddingCtrl + "\")));") -ann "Do rename!"; setParent..; showWindow $renameObjectsWindow; } // ---------- Entry renameObjectsUI();