【MEL】複数オブジェクトを同時にコンストレイントするツール
気まぐれに昔会社のアニメーターの要望で作ったMELツールを公開してみる
とはいっても会社で作ったものをそのまま持ってくるのは気が引けたので、同じような仕様になるように改めて書き直してみた
(最近はもっぱらPythonばかり書いていてMELの書き方を忘れていた・・・)
複数オブジェクトを同時にコンストレイントするツールです
https://gyazo.com/eb8894193a4add32871c3bc357f39362
(トラックパッドで操作してるからとてもモタモタしてる)
機能説明
各種ConstraintのラジオボタンやMaintain Offsetのチェックボックス、
Closeボタンに関しては何となく想像できると思うので割愛して、それ以外のボタンについて説明します。
Parent/Childボタン
オブジェクトを選択した状態で押すと、現在選択しているものがリストされます
リストされる順番は選択した順番です
Clearボタン
リストをクリアします
Applyボタン
Parent/Childリストで隣り合っているオブジェクト同士がコンストレイントされます
ParentとChildの数が合わないとerrorがでて何も起きません
インストール
以下のコードをスクリプトエディタに張り付けて実行したら起動できます
code:mel
global proc MultiConstraint(){
string $windowName = "MultiConstraintTool";
if ((window -ex $windowName) == true) deleteUI $windowName;
window -t $windowName $windowName;
columnLayout -adj true;
radioCollection "MultiConstraint_radioCollection";
radioButton -l "Parent Constraint" -select "MultiConstraint_radioParent";
radioButton -l "Point Constraint" "MultiConstraint_radioPoint";
radioButton -l "Orient Constraint" "MultiConstraint_radioOrient";
radioButton -l "Scale Constraint" "MultiConstraint_radioScale";
separator ;
checkBox -l "Maintain Offset" "MultiConstraint_checkBox";
separator ;
paneLayout -configuration "vertical2";
columnLayout -adj true;
rowColumnLayout -numberOfColumns 3
-columnWidth 1 125
-columnWidth 2 5
-columnWidth 3 50;
button -l "Parent" -c "MultiConstraint.setList(\"MultiConstraint_textScrollListParent\")";
text "";
button -l "Clear" -c "MultiConstraint.clearList(\"MultiConstraint_textScrollListParent\")";
setParent ..;
textScrollList -w 180 -h 200 "MultiConstraint_textScrollListParent";
setParent ..;
columnLayout -adj true;
rowColumnLayout -numberOfColumns 3
-columnWidth 1 125
-columnWidth 2 5
-columnWidth 3 50;
button -l "Child" -c "MultiConstraint.setList(\"MultiConstraint_textScrollListChild\")";
text "";
button -l "Clear" -c "MultiConstraint.clearList(\"MultiConstraint_textScrollListChild\")";
setParent ..;
textScrollList -w 180 -h 200 "MultiConstraint_textScrollListChild";
setParent ..;
setParent ..;
string $form = formLayout -numberOfDivisions 100;
string $applyButton = button -l "Apply" -c "MultiConstraint.apply()";
string $closeButton = button -l "Close" -c ("deleteUI " + $windowName);
formLayout -edit
-attachNone $applyButton "top"
-attachForm $applyButton "left" 5
-attachForm $applyButton "bottom" 5
-attachPosition $applyButton "right" 2 50
-attachNone $closeButton "top"
-attachPosition $closeButton "left" 2 50
-attachForm $closeButton "bottom" 5
-attachForm $closeButton "right" 5
$form;
setParent ..;
showWindow $windowName;
window -e -w 360 -h 340 $windowName;
}
global proc MultiConstraint.setList(string $layout){
string $selection[] = ls -sl;
for($i in $selection){
textScrollList -e -append $i $layout;
}
}
global proc MultiConstraint.clearList(string $layout){
textScrollList -e -removeAll $layout;
}
global proc MultiConstraint.constraint(string $parent, string $child){
string $selected = radioCollection -q -select MultiConstraint_radioCollection;
string $command;
select -r $parent;
select -add $child;
if(MultiConstraint.checkBox.isCheckd()){
if($selected == "MultiConstraint_radioParent"){
parentConstraint -mo -weight 1;
}else if($selected == "MultiConstraint_radioPoint"){
pointConstraint -mo -weight 1;
}else if($selected == "MultiConstraint_radioOrient"){
orientConstraint -mo -weight 1;
}else if($selected == "MultiConstraint_radioScale"){
scaleConstraint -mo -weight 1;
}
}else{
if($selected == "MultiConstraint_radioParent"){
parentConstraint -weight 1;
}else if($selected == "MultiConstraint_radioPoint"){
pointConstraint -weight 1;
}else if($selected == "MultiConstraint_radioOrient"){
orientConstraint -weight 1;
}else if($selected == "MultiConstraint_radioScale"){
scaleConstraint -weight 1;
}
}
}
global proc int MultiConstraint.checkBox.isCheckd(){
return checkBox -q -v MultiConstraint_checkBox;
}
global proc MultiConstraint.apply(){
string $parentList[] = textScrollList -q -ai MultiConstraint_textScrollListParent;
string $childList[] = textScrollList -q -ai MultiConstraint_textScrollListChild;
if(size($parentList)!=size($childList)){
error "ParentとChildの数が一致しません\n";
}
for($i=0;$i<size($parentList);$i++){
MultiConstraint.constraint($parentList$i, $childList$i); }
}
MultiConstraint();
ライセンス
Copyright © 2019 amanatsu-knit
Released under the MIT license