Mirror Control Objects

Well this one is a time saver. After making those creative and fancy controls to control ur rig, re-doing it again on the opposite side is a little boring. This script does the trick.

Mel Window:


Script:

global proc rakesh_MirrorObjects()
{


if(`window -exists rakesh_MirrorObjectsUI`)
deleteUI rakesh_MirrorObjectsUI;


window -title " Mirror Control Objects " -sizeable 1 rakesh_MirrorObjectsUI;
menuBarLayout myMenubar;
menu -label "\nHelp";

columnLayout -adj 1 myColumn;
text -label" \n " myTex;
button -label " Mirror " -command mirror myButton;
text -label" \n " myTe;
textFieldGrp
-label "Search For"
-text "_L_" myTextFieldGrp_1;
textFieldGrp
-label "Replace With"
-text "_R_" myTextFieldGrp_2;
text -label" \n " ;
button -label " Mirror After Freeze Transformation " -command mirrorAfterFreezeTrans myButton1;
text -label" \n " ;
text -label" Rakesh K Karkera " myText;
text -label" tylerdurtan@gmail.com " myid;
separator -style "in" mySeparator;
text -label" \n " myspace;

showWindow rakesh_MirrorObjectsUI;


}

global proc mirror()
{

string $selectedObject[]= `ls -sl`;
string $searchFor= `textFieldGrp -q -text myTextFieldGrp_1`;
string $replaceWith= `textFieldGrp -q -text myTextFieldGrp_2`;
for( $eachObject in $selectedObject )
{
select -r $eachObject;


float $translateValues[]=`xform -q -ws -rp $eachObject`;

float $translateValues_IF[]=`xform -q -ws -t $eachObject`;
float $rotateValues[]=`xform -q -ws -rotation $eachObject`;

if( $translateValues_IF[0]==0 && $translateValues_IF[1]==0 && $translateValues_IF[2]==0
&& $rotateValues[0]==0 && $rotateValues[1]==0 && $rotateValues[2]==0 )
{
confirmDialog -title "Alert" -message "The values of the Control Objects have been Frozen already. Click on the \"Mirror After Freeze Transformation \" button below."
-button "Re-Do";
break;
}
else
{
duplicate -name ($eachObject+"_mirrored") $eachObject;
string $duplicatedObject[]= `ls -sl`;

float $translateValues[]=`xform -q -ws -rp $eachObject`;
float $rotateValues[]=`xform -q -ws -rotation $eachObject`;

float $scaleX = `getAttr ($eachObject+".sx")`;
float $scaleY = `getAttr ($eachObject+".sy")`;
float $scaleZ = `getAttr ($eachObject+".sz")`;

float $new_translateXVal = - $translateValues[0];

float $new_rotateYVal = 180 + $rotateValues[1];
float $new_rotateZVal = 180 - $rotateValues[2];

float $new_scaleX = - $scaleX;
float $new_scaleY = - $scaleY;
float $new_scaleZ = - $scaleZ;

setAttr ($duplicatedObject[0]+ ".tx") $new_translateXVal;

setAttr ($duplicatedObject[0]+ ".ty") $translateValues[1];

setAttr ($duplicatedObject[0]+ ".tz") $translateValues[2];

setAttr ($duplicatedObject[0]+ ".rx") $rotateValues[0];

setAttr ($duplicatedObject[0]+ ".ry") $new_rotateYVal;

setAttr ($duplicatedObject[0]+ ".rz") $new_rotateZVal;

setAttr ($duplicatedObject[0]+ ".sx") $new_scaleX;

setAttr ($duplicatedObject[0]+ ".sy") $new_scaleY;

setAttr ($duplicatedObject[0]+ ".sz") $new_scaleZ;

makeIdentity -apply true -t 0 -r 0 -s 1 -n 0 $duplicatedObject[0];


searchReplaceNames $searchFor $replaceWith "hierarchy";

searchReplaceNames "_mirrored" " " "hierarchy";

}
}

}

global proc mirrorAfterFreezeTrans()
{

string $selectedObject[]= `ls -sl`;
string $searchFor= `textFieldGrp -q -text myTextFieldGrp_1`;
string $replaceWith= `textFieldGrp -q -text myTextFieldGrp_2`;
for( $eachObject in $selectedObject )
{
select -r $eachObject;

float $translateValues_IF[]=`xform -q -ws -t $eachObject`;
float $rotateValues[]=`xform -q -ws -rotation $eachObject`;

if( $translateValues_IF[0]!=0 && $translateValues_IF[1]!=0 &&$translateValues_IF[2]!=0
&&$rotateValues[0]!=0 &&$rotateValues[1]!=0 &&$rotateValues[2]!=0 )

{
confirmDialog -title "Alert" -message "The values of the Control Objects has'nt been Frozen. Click on the \"Mirror \" button above."
-button "Re-Do";
break;
}
else

{
duplicate -name ($eachObject+"_mirrored") $eachObject;
string $duplicatedObject[]= `ls -sl`;



move 0 0 0 ($duplicatedObject[0]+".scalePivot") ;
setAttr ($duplicatedObject[0]+ ".sx") -1;

CenterPivot;
makeIdentity -apply true -t 0 -r 0 -s 1 -n 0 $duplicatedObject[0];

CenterPivot;
searchReplaceNames $searchFor $replaceWith "hierarchy";

searchReplaceNames "_mirrored" " " "hierarchy";

}
}

}

How To Use: Select the control object and hit the relevant button on the window.

Note: This Script works only in the YZ-Axis.

No comments:

Post a Comment