【MEL基本】ボタンで複数行のコマンドを実行する


AriOpenMultiWindow01.jpg

MEL基本最初の記事では、ボタンを押すと特定の機能が実行されるMELの書き方を説明しました。
しかしこの説明だけでは、複数行のコマンドを実行することが出来ません。

このブログでいうと
【MEL】新しいビューを別ウィンドウで開く
【MEL】同一頂点のマージを手軽に~マージの失敗を発見しやすく
など複数の行をスクリプトエディタに書き込んで実行するものです。

今回は複数行のコマンドや、複雑なコマンドの実行方法を説明します。
例ではわかりやすく、アウトライナ、ハイパーシェード、UVテクスチャエディタ、の3つのウィンドウをワンボタンで開くMELを書いてみます。

ただ最初に言っておきます。複数行でも単純なコマンドであれば改行を消して1行に詰め込めば実行できるには出来ます。今回はそうではなく、長く長く複雑なコマンドになったときにどうするかという意味も含めてです。



ボタンとウィンドウ

まず最低限のウィンドウとボタンだけのコードです。
実行するとボタンがひとつだけのウィンドウが開きます。
AriOpenMultiWindow02.jpg


{
if ( (`window -ex AriToolWindow`) == true ) deleteUI AriToolWindow;
window -title "機能ボタン" AriToolWindow;

scrollLayout;//スクロールバーのあるフィールド
columnLayout;//縦に並べる

button -w 120 -l "複数実行" -c "";//ボタン

setParent..;//縦に並べる終了
setParent..;//スクロールバーのあるフィールド終了

showWindow;
}

buttonコマンドの -c ""の中に何もないので、まだボタンを押しても何も実行されない状態です。

詳細はMEL基本最初の記事でわかると思います。



アウトライナ等3つのウィンドウを開くコマンド

先ほどの{ }の外に、新たに{ }で囲って3つのウィンドウを開くコマンドを書きます。
まだ実行する必要はありませんが、実行するとそのまま全部実行されるので、ウィンドウ3つも開きます。
AriOpenMultiWindow03.jpg


{
OutlinerWindow; //アウトライナ
HypershadeWindow; //ハイパーシェード
TextureViewWindow; //UVテクスチャエディタ
}


{
if ( (`window -ex AriToolWindow`) == true ) deleteUI AriToolWindow;
window -title "機能ボタン" AriToolWindow;

scrollLayout;//スクロールバーのあるフィールド
columnLayout;//縦に並べる

button -w 120 -l "複数実行" -c "";//ボタン

setParent..;//縦に並べる終了
setParent..;//スクロールバーのあるフィールド終了

showWindow;
}





コマンドをプロシージャ化

先ほど新たに書いた{ }の上にプロシージャ化するコマンドを追加します。
MELファイルの作り方にも書きましたが、global proc と書き、そのあとに後に好きな名前を書いて最後に()をつけます。
ここでつける名前は他のコマンドなどとかぶらないように気をつけてください。
AriOpenMultiWindow04.jpg

プロシージャ化したので、自分でつけたプロシージャ名(ここではAriOpenMultiWindow)を実行するだけで、{ }中のコマンドが実行される状態になりました。



ボタンコマンドでプロシージャを実行する

あとはこのプロシージャを実行したいので、buttonコマンドの-cフラグの後に、先ほどつけたプロシージャ名を書けば完成です。
AriOpenMultiWindow05.jpg



global proc AriOpenMultiWindow()
{
OutlinerWindow;
HypershadeWindow;
TextureViewWindow;
}


{
if ( (`window -ex AriToolWindow`) == true ) deleteUI AriToolWindow;
window -title "機能ボタン" AriToolWindow;

scrollLayout;//スクロールバーのあるフィールド
columnLayout;//縦に並べる

button -w 120 -l "複数実行" -c "AriOpenMultiWindow";//ボタン

setParent..;//縦に並べる終了
setParent..;//スクロールバーのあるフィールド終了

showWindow;
}


このようにglobal procによってプロシージャ化というものをして名前をつけておくと、後からその名前を実行するだけで、{ }の中が実行される仕組みになります。

global procを実行すると、その時点で{ }内の内容がMayaに登録される感覚で、コマンドをスクリプトエディタから消しても、Mayaを閉じるまでそのプロシージャは有効になります。
再びglobal proc の同じ名前を実行することで、内容を書き換えることは可能です。

ホントはglobalをつけず、procだけでプロシージャにはなるのですが、使う場所やタイミングが限定されるので、
今のところglobal procで、名前をかぶらないようにつけることだけ気をつけてください。あとMayaを閉じるまで有効になっているということも。

プロシージャは単にボタンで実行するためだけではなく、いろいろなところで使用されます。
同じ機能を何度も実行したい場合や、コードが複雑にならないようにするためでしょうか・・・。
(C言語等のプログラムでいうと関数というものにとても近いのですかね???)



おまけ
MEL化する場合

このボタンをMEL化したい場合、ボタンウィンドウの記述がある{ }のところにMEL化するプロシージャを書きます。
AriOpenMultiWindow06.jpg

ここの名前とMELファイル名を同じにして全部テキストにコピペしてください。詳細【MEL基本】MELファイルの作り方

MELを実行したときになんていうプロシージャを実行させたいか考えるとここに書くことになりますよね。



テーマ : 3DCG
ジャンル : コンピュータ

tag : Maya, MEL, MEL基本, UI, カスタマイズ,

コメントの投稿

非公開コメント

カテゴリ
おすすMEL1
UV格子状整列 AriUVGridding03.gif

UV解像度チェック AriUVScaleChecker01.gif
月別アーカイブ
おすすMEL2
リネーマー AriRenamer01.gif

置換/配置 AriAssetChanger01.gif
タグ

Maya MEL モデリング MEL更新 Mayaあるある UI データ管理 カスタマイズ 数値設定 UV ~がない モデリングツールキット リネーム マテリアル バグ? MEL基本 つぶやき ホットキー 新機能 アニメーション リトポロジー テクスチャ アンケート 頂点カラー 更新 カメラ Rig レンダリング ZBrush 記事まとめ スクリプト 

記事一覧

全ての記事を一覧

アクセスランキング
[ジャンルランキング]
コンピュータ
55位
アクセスランキングを見る>>

[サブジャンルランキング]
デザイン
2位
アクセスランキングを見る>>
ad


ブログ内検索
最新記事
ad


プロフィール

Ari

Author:Ari
ゲーム系を中心にモデラーをやってます。プライベートでその他の作業も挑戦中です。
拍手ボタンありがとうございます。テンションあがります。

少し前ツイッターはじめました。よかったらどうぞフォローお願いします。
ツイッターを覗いてみる

(あ…呼び方はAriでも自習部屋でも何でもいいです)

QRコード
QR
メールフォーム

名前:
メール:
件名:
本文: