とりあえず作った物ばかりなのであまり実用性は無いかも
キーフレームのコピー→ペーストをひとつにまとめた
グラフエディタとドープシートの両方で使えるので意外と便利
proc CopyAndPasteKeys()
{
copyKey ;
int $t = `eval("currentTime -query")`;
pasteKey -time $t -float 11 -option merge -copies 1 -connect 0 -timeOffset 0 -floatOffset 0 -valueOffset 0;
}
CopyAndPasteKeys();
選択したファンクションカーブ(ひとつのみ)を反転
今ならKeyframerというスクリプトを使う
proc InvertKeyValues()
{
float $t[] = `keyframe -query -sl`;
float $kv[] = `keyframe -query -valueChange`;
int $nKey = `keyframe -query -keyframeCount`;
string $na[] = `keyframe -query -name`;
for( $i = 0; $i < $nKey; $i++ ){
selectKey -clear;
selectKey -add -k -t $t[$i] $na;
$kv[$i] *= -1;
keyframe -valueChange $kv[$i];
}
for( $i = 0; $i < $nKey; $i++ ){
selectKey -add -k -t $t[$i] $na;
}
}
InvertKeyValues();
0でミラーコピー
MaYAの操作に慣れるとほとんど使わないかも
//X=0, Y=1, Z=2
proc tkMirrorAxis(int $axis)
{
string $scale[] = {".scaleX", ".scaleY", ".scaleZ"};
string $src[] = `ls -sl`;
string $dist[];
string $newName[];
int $i = 0;
for($o in $src){
$dist = `duplicate -rr $o`;
setAttr ($dist[0] + $scale[$axis]) -1;
$newName = `polyUnite -ch 1 $o $dist[0]`;
rename $newName[0] $o;
$src[$i] = "|" + $o;
$i++;
}
select $src;
DeleteHistory;
}
{
string $winName = `window -title "MirrorAxis"`;
columnLayout;
button -label "--- X ---" -command ("tkMirrorAxis(0);deleteUI "+$winName);
button -label "--- Y ---" -command ("tkMirrorAxis(1);deleteUI "+$winName);
button -label "--- Z ---" -command ("tkMirrorAxis(2);deleteUI "+$winName);
showWindow;
}
tkMirrorAxisGUI();
最初に選択したオブジェクトに位置と回転をあわせる(同じ階層でフリーズしてない場合のみ)
階層が違うと使えないのでまったく役に立たなかった
proc AlignPosRot()
{
string $names[] = `ls -sl`;
float $pos[] = `getAttr ($names[0] + ".translate")`;
float $rot[] = `getAttr ($names[0] + ".rotate")`;
if( 1 == `getAttr -se ($names[1] + ".tx")` )
setAttr ($names[1] + ".tx") $pos[0];
if( 1 == `getAttr -se ($names[1] + ".ty")` )
setAttr ($names[1] + ".ty") $pos[1];
if( 1 == `getAttr -se ($names[1] + ".tz")` )
setAttr ($names[1] + ".tz") $pos[2];
if( 1 == `getAttr -se ($names[1] + ".rx")` )
setAttr ($names[1] + ".rx") $rot[0];
if( 1 == `getAttr -se ($names[1] + ".ry")` )
setAttr ($names[1] + ".ry") $rot[1];
if( 1 == `getAttr -se ($names[1] + ".rz")` )
setAttr ($names[1] + ".rz") $rot[2];
}
AlignPosRot();
キャラクターセットのポーズをファイルに保存
//export CharPose
proc getExpCharPosePath(string $filename, string $filetype)
{
if( "" == $filename ) return;
string $sel[] = `ls -sl -type "character"`;
string $fileParts [];
if (`tokenize $filename "." $fileParts` < 2) $filename += ".chp";
int $fileID = `fopen $filename "w"`;
if( 0 == $fileID ) return;
fprint $fileID "CharcterSetPoseFile\n\n";
string $charMembers[] = `character -q $sel[0]`;
//print $charMembers;
string $mem;
for( $mem in $charMembers ){
float $val = `getAttr $mem`;
//print ($mem + " : " + $val + "\n");
fprint $fileID ($mem + "\t" + $val + "\n");
}
fclose $fileID;
}
proc expCharPose()
{
string $sel[] = `ls -sl -type "character"`;
if( "" == $sel[0] ){
error "Select CharacterSet.";
return;
}
fileBrowser ("getExpCharPosePath", "CharcterPose", "", 1);
//fileBrowserDialog -m 1 -fc "getExpCharPosePath" -ft "Export";
}
expCharPose();
//Import CharPose
proc impCharPose()
{
string $sel[] = `ls -sl -type "character"`;
if( "" == $sel[0] ){
error "Select CharacterSet.";
return;
}
string $filename = `fileDialog -dm "*.chp"`;
//print ( $filename + "\n" );
if( "" == $filename ) return;
int $fileID = `fopen $filename "r"`;
if( 0 == $fileID ) return;
string $buf = `fgetline $fileID`;
if( "CharcterSetPoseFile\n" != $buf ){
error " ";
return;
}
fgetline $fileID;
string $charMembers[] = `character -q $sel[0]`;
string $mem;
while( 0 == `feof $fileID` ){
$buf = `fgetline $fileID`;
string $tokens[];
int $nTokens = `tokenize $buf "\t" $tokens`;
if( 2 == $nTokens ){
for( $mem in $charMembers ){
if( $mem == $tokens[0] ){
float $val = $tokens[1];
setAttr $mem $val;
break;
}
}
}
}
fclose $fileID;
}
impCharPose();