대략 설명을 하면 오브젝트(애니메이션된 키 값까지)를 대치 시켜주는 것인데
오브젝트 수백개를 애니메이션은 유지한채 메쉬 데이터만 바꾸고자 할때 매우 유용함.
JSH_오브젝트일괄바꾸기_V2.0.mel (8) 다운로드
/*** JSHRepalce V2.0 ***********************************************************************************************
제작자 : 정순홍, 씨네웍스 3D팀. (본 멜 스크립트는 저작권을 행사합니다)
버전 2.0 : 1.0에 인터페이스 추가.
설명 : 기존 오브젝트를 새로운 오브젝트로 위치, 크기, 애니메이션을 모두 대치시키는 기능.
사용법 : 마야 8.0에서 개발하였으나 7.0에서도 동작. 멜 실행시 자체 윈도우에서 단계별로 설명을 했으니
참고하여 그대로 단계를 밟아가며 수행하면 됩니다.
※ 1단계의 오브젝트 이름 바꾸는것은 기존의 multiRename에서 함수를 수정하여 가져다 썼으며 그 부분에 한해서는
저작권 행사를 하지 않습니다.
기타문의 : digitalog@naver.com 으로 메일 주세요.
부연설명 : 1. 기존의 오브젝트가 프리즈 되었을 경우 정상적으로 작동하지 않을 수 있습니다.
2. 일괄 오브젝트의 이름 바꾸는 기능만으로도 사용할 수 있습니다.
3. 애니메이션의 경우 기존 오브젝트의 각 채널이 새로운 오브젝트의 익스프레션으로 연결이 되므로
오브젝트 교체 후 기존 오브젝트를 삭제하면 애니메이션도 같이 삭제됨.
명시내용 : 제작자의 동의 없이 무단복제, 배포, 수정을 금합니다.
만약 불특정인이 JSHReplace V2.0 사용시 발생하는 에러 및 피해에 대해서는 제작자가 책임을 지지 않습니다.
*******************************************************************************************************************/
/********************** 오브젝트 이름 일괄 변환 함수 시작 ***********************************************************/
global proc string multiRename() {
string $userSelection[];
int $counter = 0;
$userSelection =`ls -sl`;
string $newName=(`textField -q -tx newNameField`);
if(size($userSelection) == 0) {
confirmDialog -title "Error" -message "There are no objects selected!" -button "OK" -defaultButton "OK";
} else if(`textField -q -tx newNameField` == "") {
confirmDialog -title "Error" -message "You must type in a new Name!" -button "OK" -defaultButton "OK";
textField -edit -tx "NEWNAME" newNameField;
} else {
for($counter = 0; $counter
int $CountNumber = $counter+1;
rename -is ($newName+$CountNumber);
}
}
for($counter = 0; $counter
select -add($newName+$CountNumber);
}
return $newName;
}
/********************** 오브젝트 이름 일괄 변환 함수 끝 ***********************************************************/
/********************** 메인 엔진 함수 오브젝트 대치 및 애니메이션 연결********************************************/
global proc JSHexchange()
{
string $original_name=(`textField -q -tx newNameField`);
string $newobj_name=(`textField -q -tx newobj_name`);
int $max_num=(`textField -q -tx obj_num`);
int $i=0;
string $original_tx;
string $original_ty;
string $original_tz;
string $original_rx;
string $original_ry;
string $original_rz;
string $original_sx;
string $original_sy;
string $original_sz;
string $forexp_rx;
string $forexp_ry;
string $forexp_rz;
string $forexp_sx;
string $forexp_sy;
string $forexp_sz;
string $newobj_tx;
string $newobj_ty;
string $newobj_tz;
string $newobj_rx;
string $newobj_ry;
string $newobj_rz;
string $newobj_sx;
string $newobj_sy;
string $newobj_sz;
vector $trans_num;
float $rx_num=0;
float $ry_num=0;
float $rz_num=0;
for ($i=1 ; $i<=$max_num ; $i++)
{
$original_tx=stringArrayToString({ $original_name, $i }, "");
$original_ty=stringArrayToString({ $original_name, $i }, "");
$original_tz=stringArrayToString({ $original_name, $i }, "");
$original_rx=stringArrayToString({ $original_name, $i,".rotateX" }, "");
$original_ry=stringArrayToString({ $original_name, $i,".rotateY" }, "");
$original_rz=stringArrayToString({ $original_name, $i,".rotateZ" }, "");
$original_sx=stringArrayToString({ $original_name, $i,".scaleX" }, "");
$original_sy=stringArrayToString({ $original_name, $i,".scaleY" }, "");
$original_sz=stringArrayToString({ $original_name, $i,".scaleZ" }, "");
$newobj_tx=stringArrayToString({ $newobj_name, $i, ".translateX" }, "");
$newobj_ty=stringArrayToString({ $newobj_name, $i, ".translateY" }, "");
$newobj_tz=stringArrayToString({ $newobj_name, $i, ".translateZ" }, "");
$newobj_rx=stringArrayToString({ $newobj_name, $i, ".rotateX" }, "");
$newobj_ry=stringArrayToString({ $newobj_name, $i, ".rotateY" }, "");
$newobj_rz=stringArrayToString({ $newobj_name, $i, ".rotateZ" }, "");
$newobj_sx=stringArrayToString({ $newobj_name, $i, ".scaleX" }, "");
$newobj_sy=stringArrayToString({ $newobj_name, $i, ".scaleY" }, "");
$newobj_sz=stringArrayToString({ $newobj_name, $i, ".scaleZ" }, "");
$trans_num =`xform -q -rp -ws $original_tx`;
$rx_num=`getAttr $original_rx`;
$ry_num=`getAttr $original_ry`;
$rz_num=`getAttr $original_rz`;
setAttr $newobj_tx ($trans_num.x);
setAttr $newobj_ty ($trans_num.y);
setAttr $newobj_tz ($trans_num.z);
$forexp_rx=stringArrayToString({ $newobj_rx, "=", $original_rx }, "");
$forexp_ry=stringArrayToString({ $newobj_ry, "=", $original_ry }, "");
$forexp_rz=stringArrayToString({ $newobj_rz, "=", $original_rz }, "");
$forexp_sx=stringArrayToString({ $newobj_sx, "=", $original_sx }, "");
$forexp_sy=stringArrayToString({ $newobj_sy, "=", $original_sy }, "");
$forexp_sz=stringArrayToString({ $newobj_sz, "=", $original_sz }, "");
$forexp_tx=stringArrayToString({ $newobj_tx, "=", $original_tx }, "");
$forexp_ty=stringArrayToString({ $newobj_ty, "=", $original_ty }, "");
$forexp_tz=stringArrayToString({ $newobj_tz, "=", $original_tz }, "");
expression -s $forexp_tx;
expression -s $forexp_ty;
expression -s $forexp_tz;
expression -s $forexp_rx;
expression -s $forexp_ry;
expression -s $forexp_rz;
expression -s $forexp_sx;
expression -s $forexp_sy;
expression -s $forexp_sz;
}
}
/********************** 메인 엔진 : 오브젝트 대치 및 애니메이션 연결 함수 끝 ********************************************/
/********************** 메인 함수 : *************************************************************************************/
global proc JSHReplace (){
if (`window -ex JshRPGUI`) { deleteUI JshRPGUI; }
window -t "CINEWORKS|JSH-Replace V2.0(BETA)" -menuBar true JshRPGUI;
menu -label "제작자";
menuItem -label "정순홍" -c POP_homepage;
menu -label "도움말" -helpMenu true;
menuItem -label "준비중(digitalog@naver.com)" -c POP_homepage;
columnLayout;
text -l "◆애니메이션 오브젝트 교체하기" -align "center";
setParent ..;
separator - height 40 -width 320 -style "out";
text -l "[1단계] 기존 오브젝트들의 이름 일괄 변환하기" -align "center";
text -l "====>기존의 바꿔야할 오브젝트를 모두 선택한 후";
text -l "==== 새이름을 입력하고 실행해주세요.\n";
rowColumnLayout -nc 3;
text -l "새이름" -align "center";
string $newNameField = `textField -w 300 -text "ObjectName" newNameField`;
button -l "이름바꾸기" -c multiRename;
setParent ..;
separator - height 40 -width 320 -style "out";
text -l "[2단계] 새로 바꿀 오브젝트를 기존 오브젝트의 갯수만큼";
text -l "Duplicate해주세요.";
separator - height 40 -width 320 -style "out";
text -l "[3단계] 아무것도 선택하지 않아도 됩니다.\n";
rowColumnLayout -nc 2;
text -l "바꿀오브젝트 갯수" -align "center";
string $obj_num = `textField -w 4 obj_num`;
setParent ..;
rowColumnLayout -nc 2;
text -l "바꿀오브젝트 이름" -align "center";
string $newobj_name = `textField -w 300 -text "일련번호를뺀이름" newobj_name`;
setParent ..;
separator - height 4 -width 320 -style "out";
rowColumnLayout -nc 3;
text -l "[4단게] 바꾸기";
text -l "";
button -l "run JSH Replace!!" -c JSHexchange;
showWindow JshRPGUI;
window -edit -w 320 -h 400 JshRPGUI;
}
/********************** 메인 함수 끝 *************************************************************************************/
global proc POP_homepage()
{
system("explorer http://www.cyworld.com/digitalc");
}
JSHReplace();