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


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
記事一覧

全ての記事を一覧

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

[サブジャンルランキング]
デザイン
2位
アクセスランキングを見る>>
ブログ内検索
プロフィール

Ari

Author:Ari
ExpertElite000.jpg

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

ツイッターでお知らせなどやってます。よかったらどうぞフォローお願いします。
ツイッターを覗いてみる

MEL
スポンサーリンク
QRコード
QR
タグ

Maya MEL モデリング MEL更新 Mayaあるある UI UV データ管理 カスタマイズ 数値設定 ~がない MayaTips アニメーション モデリングツールキット リネーム AriReFreezeRotate AriCompactToolSettings つぶやき MEL基本 マテリアル AriUVGridding バグ? AriSetPivot Maya基本 ホットキー 頂点カラー AriUVFit 新機能 記事まとめ AriVertexColorEditor AriMirror AriCircleVertex ~ない AriSceneOpener リトポロジー テクスチャ カメラ ジョイント スケルトン アンケート AriSortOutliner AriUVScaleChecker AriTransferPosition スクリプト MEL更新頂点カラー AriViewWindow AriUVAdsorption AriSplitPolygon AriSelectEdgeRing AriUVRatio AriDeleteEdgePreserveBorder AriUVAdsorptionMove AriAniKeyScale Rig AriAnimationCopy AriRenamer AriQuadrangulateRing 更新 レンダリング AriUVSetList ZBrush モデリングAriCircleVertex 

最新記事
メールフォーム

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