日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年12月5日土曜日

ウインドウの作成

あるウインドウを作成したいとき、期待するのはそのコマンドを実行することで、「設定したウインドウが表示される」ということである。

しかしMayaでこれを実行するには、最低二つのステップを考える必要がある。


まずウインドウを作成する必要があるが、これは「window」コマンドで簡単に作ることが出来る。

しかし「window」コマンドはウインドウをMaya内に作成するだけで、表示はしない。
表示するためには別途指示してやる必要がある。

ウインドウを表示する一番シンプルなスクリプト「-visible」フラグを使う方法。
{
window -visible true name;
}

-visible」 フラグはそのwindowを表示するかどうかを指示するフラグ。
「name」はそのウインドウの名前となり、「-title」でタイトルが指定されていない場合、タイトルはこのウインドウの名前と同じになる。
-title」でタイトル名が指定されている場合は、その名称がタイトルに表示される。
例:window -t AAA name; nameという名前のウインドウが作られ、AAAとタイトルバーに表示される。
しかし内部での処理では「name」という名前で処理されておりAAAという名称では処理できない。

(例)下記のウインドウのタイトルは「AAA」だがウインドウの名称は「name」である。


ちなみにウインドウの名称にスペースを使うことは出来ない。
スペースが含まれていると下記のエラーとなる。
{
window na me;
}
// Error: Too many arguments. Expected 1, found 2. //
(引数が多すぎます。期待される値の数は1ですが、2つの値が見つかりました。)


----------------------------------------
上記では「-visible」フラグを用いたが、
ウインドウの表示は実際には、「showWindow」コマンドが使われるケースがほとんどである。

理由は現時点では、はっきりとは知らないが、おそらくレイアウトなどをしっかり構築したものを作成し、その後に表示するということを意図しているのだと思う。


{
window name;
showWindow name;
}


この二つはいつもペアで使われる。

2009/12/22追記:「learningMaya MEL fundamental」 p69より、
「window」 コマンドと、「showWindow」コマンドはブックエンドのようなものと考えるといいかもしれない。
この二つのコマンドの間に置かれる全ての物はウインドウの中に表示される。


「showWindow」は単体でも機能するが、通常はコマンドの後に表示したいウインドウの名称をいれておくほうが、動作が確実なので、一般的にそうされる。
ちなみに、名称が指定されていないと最後に作成されたウインドウが表示される。

{
window name;
window nameB;
showWindow;
}
(例:このスクリプトでは「showWindow」にウインドウの名称が指定されていないので、最後に作成された「nameB」のウインドウが表示される。)



そしてもう一つ必ずと言って良いほど組み合わされるものに「deleteUI」コマンドがある。
「deleteUI」コマンドは名前を指定してその名前のWindowを削除することができる。

100%これを使わなくては、ウインドウが作れないといういうわけではない。
しかしながら、これを使うことで余計なエラーを避けることが出来る。

windowコマンドを含むスクリプトが、エラーで止まった場合、ウインドウが表示されていないが作成されて存在していることがある。
これは表示されていないのでわかりにくいが、次に同じスクリプトを実行した場合、windowコマンドが同じ名称のウインドウを作成しようとするので下記のようなエラーとなる。
この考え方は変数と似ている。ユニークな物でなくては存在できないのである。

// Error: Object's name is not unique: name //
(オブジェクトの名称がユニークではありません: name)

それを避けるには上記の「deleteUI」を使って、その不可視ウインドウを削除してやる必要がある。


これをエラーが起きる度に、コマンドラインから実行することも出来るが、自動化してあればそのエラーに悩まされることはない。

そこで通常は「window」コマンドを実行する前に、「if」コマンドを使って同一名称のUIの有無を確認し、存在する場合は「deleteUI」で削除するようにしておく。

これで見えないウインドウによって悩まされることはなくなる。

{
if(`window -exists name`)
deleteUI name;

window name;
showWindow name;
}


-exists」フラグは:指定した名前のウィンドウが存在するかどうかによってtrueまたはfalseを返します。
「if」コマンドでは( )の中の結果がTrueであればそれに続くコマンドを実行する。
「deleteUI」コマンドをいつも実行するわけではない。それは該当する名称のウインドウが存在していなければ意味がないどころか、エラーになるからで、deleteUIを実行する場合と実行しない場合を振り分ける必要がある。
この例では「name」という名前のウインドウが存在するときのみ、Trueが返り、deleteUIが実行される。



-----------------<まとめ>----------------------
window(コマンド)
 ウインドウを生成する。「window フラグ 名称」の順に書く。
 ウインドウは生成されただけでは、表示されない。
 (例) window name; (フラグがない場合)

-visible(フラグ):
 作成したウインドウを表示する。ブーリアンで指定(trueで表示する)          
 通常は「showWindow」コマンドを使用する。

 (例)window -visible true name; 

-exists(フラグ):
 このフラグに続く名前のウインドウがあれば「true」を返す。

 if文で同じ名前のウインドウがあるか確認するときに使用。

 (例)if(`window -exists name`)

    deleteUI name;

-title(フラグ):
 このフラグに続く名前はウインドウの名前ではなくタイトルとなる。

 (タイトルバー部分に表示される名前で、Melの処理には使えない)

 (例) window -t AAA name;


showWindow(コマンド): 
 生成後、不可視のウインドウを表示する。
 表示したいウインドウの名前を続けて入力する。 
 「window」コマンドと一組で用いられる。
 (例)showWindow name;


deleteUI(コマンド):不要なウインドウを削除する。
 if文の中で「window -exists name」を用い、
 Trueが返ってきたときのみ実行されるようにする。
             



-----注意事項-----

1.ウインドウを作成することと表示することは別々と考えておく。
2.同じ名前のウインドウは二つ同時には存在できない。
3.ウインドウが表示されていなくても作成されていることはある。
4.ウインドウを作成する一般的な方法では最低、4つのコマンドが使われる。
「if, deleteUI, window, showWindow」
5.もちろんこれだけでは何の役にも立たない。
 

0 件のコメント:

コメントを投稿