// =========================================================================== // Copyright 2018 Autodesk, Inc. All rights reserved. // // Use of this software is subject to the terms of the Autodesk license // agreement provided at the time of installation or download, or which // otherwise accompanies this software in either electronic or hard copy form. // =========================================================================== // // Procedure Name: // replaceObjects // // Description: // this command replaces selected objects with the lead object. // // Input Arguments: // int $rot: copy objects rotate values // int $scale: copy object's scale value // int $inst: make the copy a copy, instance or reference // int $keepOriginal: keep the original object // Return Value: // None // global proc replaceObjects( int $rot, int $scale, int $inst, int $keepOriginal ) { string $list[] = `ls -sl -tr`; int $size = `size $list`; if ($size<2){ error (uiRes("m_replaceObjects.kReplaceObjectsErrorInvalid")) ; } int $i = 0; while ($i < ($size-1)) { select -r ($list[$size-1]); if ($inst == 1){ duplicate -rr; }else if ($inst == 2){ instance; }else{ //confirm object is a reference int $reference = `reference -q -isNodeReferenced`; if ($reference){ duplicateReference 0 ""; } else { error (uiRes("m_replaceObjects.kReplaceObjectsErrorReference")) ; } } string $new[] = `ls -sl`; //Get and set Worldspace values - use rotate pivot in case translate has been frozen float $trans[] = `xform -q -ws -rotatePivot $list[$i]`; xform -a -ws -t $trans[0] $trans[1] $trans[2] $new[0]; if ($rot) { float $rotate[] = `getAttr ($list[$i]+".r")`; setAttr ($new[0]+".r") $rotate[0] $rotate[1] $rotate[2]; } if ($scale) { float $scale[] = `getAttr ($list[$i]+".s")`; setAttr ($new[0]+".s") $scale[0] $scale[1] $scale[2]; } string $parent[] = `listRelatives -path -parent $list[$i]`; if ($parent[0] != "") { string $selection[] = `ls -sl`; if ( 0 < size($selection)) { string $curParent[] = `listRelatives -path -parent $selection[0]`; if (size($curParent) == 0 || $curParent[0] != $parent[0]) { parent $selection[0] $parent[0]; } } } delete $list[$i]; $i++; } // if copy or instance if (($inst != 3) && ($keepOriginal == 0)) delete ($list[$size-1]); select -cl; }