■内容
XYZの0座標を中心にミラーコピーするMELです。
・SeparateMirror
オブジェクトのピボットと回転軸も反転する。
・FaceMirror
選択したフェースのみミラーする。
練習で作っていたものなので階層が深いオブジェクトをSeparateMirrorすると問題があります。グローバルに置いて実行すると大丈夫かと思います。Maya2013なのでMaya2014以降なら標準であるかも
global proc YOS_PartsMirror()
{
float $konata[],$tukasa[],$usimata[];
string $iwasaki[],$hatunemiku,$nagato[],$kagami,$nagamon[];
int $n ;
$iwasaki = `ls -sl`;
if(`size$iwasaki` > 0)
{
print (`size$iwasaki` + "\n") ;
for ($n=0;$n < `size$iwasaki`;$n++)
{
//トランスフォームのピボット情報取得
$konata = `xform -q -a -ws -sp $iwasaki[$n]`;
$tukasa = `xform -q -a -ws -ro $iwasaki[$n]`;
if($konata[0] != $tukasa[0])
{
move -r ($konata[0] * -1) ($konata[1] * -1) ($konata[2] * -1) $iwasaki[$n];
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $iwasaki[$n];
}
//原点0に移動
setAttr ($iwasaki[$n] + ".translateX") 0;
setAttr ($iwasaki[$n] + ".translateY") 0;
setAttr ($iwasaki[$n] + ".translateZ") 0;
setAttr ($iwasaki[$n] + ".rotateX") 0;
setAttr ($iwasaki[$n] + ".rotateY") 0;
setAttr ($iwasaki[$n] + ".rotateZ") 0;
//フリーズ
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $iwasaki[$n];
//複製
$nagamon = `duplicate -rr $iwasaki[$n]`;
//元の位置に移動
move -r $konata[0] $konata[1] $konata[2] $iwasaki[$n];
rotate -r $tukasa[0] $tukasa[1] $tukasa[2] $iwasaki[$n];
//XYZの選択
if(`radioButtonGrp -q -sl YosMirrorBox` == 1)
{
$konata[0] = $konata[0] * -1;
$konata[1] = $konata[1] ;
$konata[2] = $konata[2] ;
$tukasa[0] = $tukasa[0] + 180;
$tukasa[1] = $tukasa[1] * -1;
$tukasa[2] = $tukasa[2] * -1;
$usimata = {-1,1,1};
}
else if(`radioButtonGrp -q -sl YosMirrorBox` == 2)
{
$konata[0] = $konata[0] ;
$konata[1] = $konata[1] * -1;
$konata[2] = $konata[2] ;
$tukasa[0] = $tukasa[0] ;
$tukasa[1] = $tukasa[1] + 180;
$tukasa[2] = $tukasa[2] * -1;
$usimata = {1,-1,1};
}
else if(`radioButtonGrp -q -sl YosMirrorBox` == 3)
{
$konata[0] = $konata[0] ;
$konata[1] = $konata[1] ;
$konata[2] = $konata[2] * -1;
$tukasa[0] = $tukasa[0] ;
$tukasa[1] = $tukasa[1] ;
$tukasa[2] = $tukasa[2] + 180;
$usimata = {1,1,-1};
}
//反転
setAttr ($nagamon[0] + ".scaleX") -1.0;
setAttr ($nagamon[0] + ".scaleY") -1.0;
setAttr ($nagamon[0] + ".scaleZ") -1.0;
//フリーズ
select -r $nagamon[0];
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $nagamon[0];
polyNormal -normalMode 1;
DeleteHistory;
select -cl;
//移動
move -r $konata[0] $konata[1] $konata[2] $nagamon[0];
rotate -r $tukasa[0] $tukasa[1] $tukasa[2] $nagamon[0];
//$kagami = ($iwasaki[$n] + "T");
select -r $nagamon[0];
}
}
return ;
}
global proc YOS_PartsMirrorMesh()
{
float $konata[],$kagami[],$usimata[];
string $iwasaki[],$hatunemiku,$tukasa;
if(`radioButtonGrp -q -sl YosMirrorBox` == 1)
{
$kagami[0] = ($konata[0]+$konata[0]) * -1;
$kagami[1] = 0 ;
$kagami[2] = 0 ;
$usimata = {-1.0,1.0,1.0};
}
else if(`radioButtonGrp -q -sl YosMirrorBox` == 2)
{
$kagami[0] = 0 ;
$kagami[1] = ($konata[1]+$konata[1]) * -1;
$kagami[2] = 0 ;
$usimata = {1.0,-1.0,1.0};
}
else if(`radioButtonGrp -q -sl YosMirrorBox` == 3)
{
$kagami[0] = 0 ;
$kagami[1] = 0 ;
$kagami[2] = ($konata[2]+$konata[2]) * -1;
$usimata = {1.0,1.0,-1.0};
}
$iwasaki = `ls -sl`;
if(`size$iwasaki` == 0)
{
return ;
}
ConvertSelectionToFaces;
polyChipOff -ch 1 -kft 1 -dup 1 -off 0 -pvt 0.0 0.0 0.0 -s $usimata[0] $usimata[1] $usimata[2];
polyNormal -normalMode 0;
//select -cl ;
return;
}
global proc YOS_Mirror()
{
if(`window -q -ex YOS_Mirrorwin`)
{
deleteUI YOS_Mirrorwin ;
}
window -wh 140 130 -tb 1 -tlb 0 -t "YosMirror1.1" YOS_Mirrorwin ;
columnLayout -w 130;
radioButtonGrp -cw 1 40 -cw 2 40 -cw 3 40 -sl 1
-numberOfRadioButtons 3
-labelArray3 "X" "Y" "Z"
YosMirrorBox;
button -w 130 -h 25 -l "SeparateMirror" -c YOS_PartsMirror ;
button -w 130 -h 25 -l "FaceMirror" -c YOS_PartsMirrorMesh ;
button -w 130 -h 25 -l "Close" -c ("deleteUI -window YOS_Mirrorwin") ;
setParent..;
showWindow YOS_Mirrorwin ;
window -e -wh 160 130 YOS_Mirrorwin ;
}
0 件のコメント:
コメントを投稿