14/12/16更新
二重起動をしないようにしました。
アンドゥのしすぎてもウインドウが消せるようにしました。
14/12/15更新
メンバーセットが増え続ける状態だったので修正
バインドされたオブジェクトを微調整したいなーと。
中間オブジェクトをいじろうとして、重なって見にくいとか。
いろいろ面倒だったので作ってみた。
複数選択対応してます。
選択して実行すると右ウインドウに中間オブジェクト
左ウインドウはジョイントルートを移動させたメッシュが表示されます。
動きを見ながら頂点を調整する時に楽です。
閉じるボタンで中間オブジェクトが非表示になります。
global proc yjp_constructionHide()
{
global string $yjp_constructionSel[];
global string $yjp_constructionSellayer[];
global string $yjp_constructionPname;
global string $yjp_constructionPanel;
global float $yjp_constructionPposY;
global float $yjp_constructionTime;
currentTime $yjp_constructionTime;
int$n;
for ($n=0;$n<size($yjp_constructionSel);$n++)
{
select -r $yjp_constructionSel[$n];
print ($yjp_constructionSel[$n]+" " +$yjp_constructionSellayer[$n]+"\n");
editDisplayLayerMembers -noRecurse $yjp_constructionSellayer[$n] $yjp_constructionSel[$n];
HideIntermediateObjects;
}
isolateSelect -state 0 $yjp_constructionPanel;
if(`objExists "construction_layer"`)delete "construction_layer";
if(`objExists "tempview_layer"`)delete "tempview_layer";
if(`objExists "const_workcam"`)delete "const_workcam" ;
if(`objExists "const_viewcam"`)delete "const_viewcam";
setAttr ($yjp_constructionPname + ".ty") $yjp_constructionPposY;
clear $yjp_constructionSel;
clear $yjp_constructionSellayer;
}
global proc yjp_constructionPosChange()
{
global string $yjp_constructionPname;
global float $yjp_constructionPposY;
float $asf = `getAttr ($yjp_constructionPname + ".ty")`;
if($asf == $yjp_constructionPposY)
{
setAttr ($yjp_constructionPname + ".ty") 150;
}
else
{
setAttr ($yjp_constructionPname + ".ty") $yjp_constructionPposY;
}
}
global proc yjp_Construction()
{
global string $yjp_constructionSel[];
global string $yjp_constructionSellayer[];
global string $yjp_constructionPname;
global string $yjp_constructionPanel;
global float $yjp_constructionPposY;
global float $yjp_constructionTime;
if(size($yjp_constructionSel) != 0)
{
warning ;
print ("Constructionが起動しています"+ "\n") ;
return;
}
$yjp_constructionSel = `ls -sl`;
if (size($yjp_constructionSel) == 0)
{
warning ;
print ("バインドされたオブジェを選択してください"+ "\n") ;
return;
}
$yjp_constructionTime = `currentTime -q`;
if((`window -ex yjp_IntermediateEeditPanel`)==true)
{
yjp_constructionHide;
deleteUI yjp_IntermediateEeditPanel;
}
string $sel,$pobj[],$layer[],$io[];
//レイヤーチェック
int $n;
select -cl ;
createDisplayLayer -name "tempview_layer" -number 1 -nr;
setAttr "tempview_layer.displayType" 2;
for ($n=0;$n<size($yjp_constructionSel);$n++)
{
$io = stringArrayRemove(`listRelatives -s -ni $yjp_constructionSel`,`listRelatives -s $yjp_constructionSel`);
if(size($io) == 0)
{
stringArrayRemoveAtIndex($n, $yjp_constructionSel);
}
}
if(size($yjp_constructionSel) == 0)
{
print ("中間オブジェクトがあるオブジェクトを選択してください"+ "\n"); error;
}
for ($n=0;$n<size($yjp_constructionSel);$n++)
{
$sc = `findRelatedSkinCluster $yjp_constructionSel[$n]`;
if(size($sc) == 0)
{
stringArrayRemoveAtIndex($n, $yjp_constructionSel);
continue ;
}
$jointlistname = `listConnections -type "joint" ($sc +".matrix")`;
$yjp_constructionPname = `rootOf $jointlistname[0]`;
$layer = `listConnections -s on -t "displayLayer" $yjp_constructionSel[$n]`;
if(`objExists $layer[0]`)
{
$yjp_constructionSellayer[$n] = $layer[0];
}
else
{
$yjp_constructionSellayer[$n] = "defaultLayer";
}
editDisplayLayerMembers -noRecurse "tempview_layer" $yjp_constructionSel[$n];
}
$yjp_constructionPposY = `getAttr ($yjp_constructionPname + ".ty")`;
setAttr ($yjp_constructionPname + ".ty") 150;
duplicate -rr -n "const_workcam" persp;
duplicate -rr -n "const_viewcam" persp;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
window -w 840 -h 500 -t "construction" -tbm 0 yjp_IntermediateEeditPanel;
paneLayout -w 200 -h 200 -cn "quad" yjp_ConstPaneLayout;
string $viewPanel = `modelPanel -mbv 1 -cam "const_viewcam"`;
setParent ..;
string $yjp_constructionPanel = `modelPanel -cam "const_workcam"`;
setParent ..;
paneLayout -e -ps 2 50 98 -sp $yjp_constructionPanel 2 yjp_ConstPaneLayout;
paneLayout -e -ps 1 50 98 -sp $viewPanel 1 yjp_ConstPaneLayout;
modelEditor -e -parent yjp_ConstPaneLayout -da "smoothShaded" -displayTextures on-dl "none" -sel 0 -j 0 -m 0 -lc 0 -ha 0 $viewPanel;
modelEditor -e -parent yjp_ConstPaneLayout -da "smoothShaded" -displayTextures on-dl "none" $yjp_constructionPanel;
button -w 200 -h 30 -l "Position change" -c ("yjp_constructionPosChange;");
button -w 200 -h 30 -l "Close" -c ("yjp_constructionHide;deleteUI yjp_IntermediateEeditPanel;");
setParent ..;
showWindow;
select $yjp_constructionSel ;
viewFit "const_viewcam";
DisplayIntermediateObjects;
if(!`objExists construction_layer`)
{
createDisplayLayer -name "construction_layer" -number 1 -nr;
}
editDisplayLayerMembers -noRecurse construction_layer (`ls -sl`);
viewFit "const_workcam";
isolateSelect -state 1 $yjp_constructionPanel;
}
0 件のコメント:
コメントを投稿