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

2010年2月6日土曜日

MELスクリプトの修正

もう5日ほど前のことですが、一日時間がもらえたので、以前、うまく動かなかったスクリプトを修正することに取り組みました。
結果としては、なんとか機能するようには出来たものの原因は不明でした。

まず、第一のもんだは、
そのスクリプトを起動すると、二つのタブがついたウインドウが表れるのですが、第二のタブをクリックしたときに、情報をリフレッシュし、その時点での情報を取得し、それに応じて表示をかえる機能をもたせてありました。

リフレッシュ用のプロシージャが組み込まれており、タブ選択したときに自動的に実行されるようになっていました。

しかしながら以前、お伝えしたように、クリックすると第一タブと第二タブが交互に切り替わり続け、実質、操作を受け付けなくなります。
(メモリもドンドン消費していきます)

この無限ループを解決すれが、修正できるのではないかと思い、ウインドウの作成部分を一つづつ見直していきました。


 しかし、間違っているところがみつからないため、リフレッシュ・プロシージャの中身をすべて削除して、printコマンドで、文字が表示されるようにしました。
こうするとタブをクリックしたときにスクリプトエディターにその文字が表示されます。

これを動作を確認しながら、少しづつ、削除する量を少なくしていき、最後にあるtabLayoutのフラグへ行き着きました。

このプロシージャーは基本的に、もうひとつのウインドウ作成プロシージャと同じで、あるノードの存在をさがし、その名前をラジオボタンをつけてリストアップするというものでした。
そしてリストアップするために、そのウインドウの中身を再度作り直します。
プロシージャーの最後のほうで、tabLayoutコマンドをEditモードで使い、-tabLabelで 名称を表示し、-selectTabで、そのとき選択されているはずの第二タブを選択するようになっています。



そのフラグがあるとリフレッシュ後にタブ画面を再構築するとき、無限ループに陥り、そのフラグをとってしまうと、無限ループにはなりませんが、画面が再構築されて、第一タブの表示になってしまいます。すなわち第二タブは表示されません。


バグかと思い、簡単なスクリプトでチェックしましたが、-selectTabは問題なく機能します。

しかたがないので、タブを使用するのをやめ、一つの画面にすべての情報が表示されるように変更しました。

画面のリフレッシュは行われないので、リフレッシュが必要な操作を行った後に、ウインドウをdeleteUIで閉じるようにしました。

サーバー側へ、そのスクリプトをおき、以下をスクリプトエディターへコピペ後に、MMBでシェルフドラッグ・ドロップでボタンを作成しました。
source "//serverName/jobs/script/procedureName.mel";
procedureName;

これによりプロシージャの起動がワンクリックでできるので、再度スクリプトのウインドウを表示するのがさほど苦ではなくなりました。

また機能的な部分はほぼすべて動きましたが、一つだけ、動作があやしいものがありました。
あまり使う事はなさそうだったので、その部分はボタンを無効化して、おせなくしておきました。

これでやっとスクリプトもちゃんと使ってもらえそうです。

元のスクリプトはリナックス上で書かれた、リナックス版Maya8.5で動作する物でした。
今回はWin64版のMaya2010で動かそうとしました。
なにかOSの違いによる問題があるのでしょうか??


文法的な間違いは見つけられなかったのですが、ひとつひとつの変数の意味をひもときながらスクリプトの順序をおっていくことで、いろいろと勉強になりました。
やっと他人のスクリプトをみて、勉強できるレベルになれたようです。 

0 件のコメント:

コメントを投稿