global proc getDPQWin()
【资料图】
{
string $window=`window -title "关键帧相对偏移工具"
-iconName "KeyframeOffsetTool"
-dockStation
-nestedDockingEnabled true
-dockCorner "topLeft" "left"`;
columnLayout -adjustableColumn false;
text "1.关闭自动k帧";
button -label "关闭自动k帧" -command("autoKey 0");
text "2.选择需要偏移的控制器:";
button -label "选择控制器" -command("selectCtrls");
textField -ed 0 -w 400 -backgroundColor 0.2 0.2 0.2 ctrlsName;
text "3.记录控制器变换";
button -label "记录控制器变换属性" -command("recordTransforms");
text "4.将控制器移动到相对位置";
text "5.开始转换:";
checkBox -label "相对旋转(不推荐)" -v 0 rotateBox;
checkBox -label "相对位移" -v 1 translateBox;
button -label "开始转换" -command("modKeys");
text "6.打开自动k帧";
button -label "打开自动k帧" -command("autoKey 1");
setParent ..;
showWindow $window;
}
global string $ctrls[];
string $tempStr[];
$ctrl=$tempStr;
global float $transDatas[];
global float $tempFloat[];
$transDatas=$tempFloat;
global string $saveCtrls[];
$saveCtrls=$tempStr;
global string $channels[];
$channels=$tempStr;
global string $cName[];
$cName=$tempStr;
$cName[0]="translateX";
$cName[1]="translateY";
$cName[2]="translateZ";
$cName[3]="rotateX";
$cName[4]="rotateY";
$cName[5]="rotateZ";
global proc autoKey(int $openOrClose)
{
autoKeyframe -state $openOrClose;
}
global proc selectCtrls()
{
global string $ctrls[];
$ctrls=`ls -sl -type transform`;
int $i=0;
string $temp;
for($i=0;$i { $temp+=$ctrls[$i]+";"; } textField -edit -text $temp ctrlsName; } global proc recordTransforms() { global string $ctrls[]; global float $transDatas[]; global string $saveCtrls[]; int $i=0; $saveCtrls=$ctrls; int $channelIndex=0; $transDatas=`GetAllChannelAndSaveName`; } global proc float[] GetAllChannelAndSaveName() { global string $ctrls[]; global string $channels[]; global string $cName[]; float $returnValue[]; int $index=0; for($i=0;$i { int $j=0; for($j=0;$j<6;$j++) { float $saveValue=0; string $cmd=""; if(objExists($ctrls[$i])==0) { $saveValue=0; } string $tempValue=""; $tempValue=$cName[$j]; $cmd="getAttr "+$ctrls[$i]+"."+$tempValue; $saveValue=eval($cmd); $returnValue[$index]=$saveValue; $channels[$index]=$ctrls[$i]+"_"+$tempValue; $index++; } } return $returnValue; } global proc modKeys() { int $shouldRotate=`checkBox -q -v rotateBox`; int $shouldTranslate=`checkBox -q -v translateBox`; if($shouldRotate==0&&$shouldTranslate==0) { warning("位移和旋转都没有勾选,未执行任何操作!"); return; } global string $ctrls[]; global string $channels[]; global string $cName[]; global float $transDatas[]; int $keyCount; $keyCount=`keyframe -an keys -q -keyframeCount`; int $i=0; float $currentTrans[]=`GetAllChannelAndSaveName`; for($i=0;$i { for($j=0;$j<6;$j++) { if($shouldRotate==0) { if($j>=3) { continue; } } if($shouldTranslate==0) { if($j<3) { continue; } } select -clear; string $cmd="selectKey -time \":\" -attribute "+$cName[$j]+" "+$ctrls[$i]; int $curveExist=eval($cmd); float $value=$currentTrans[$i*6+$j]-$transDatas[$i*6+$j]; $cmd="keyframe -animation keys -relative -valueChange "+$value; print($cmd); if($curveExist) { eval($cmd); } } } } getDPQWin;