2015年7月31日金曜日

MayaLT2015:Mel:コマンド足らねえやんけ!

ずーーーーっと。
ずーーーっと。

fopen $fileId "w";

が動かないので調べてたんですよ。
ずううううううううっと!

で、結局こういう記事を発見したわけです。

MayaのMELは、MayaLTだとエラーが出る場合があります。


まあ多少のことは予想してましたよ。レンダリング回りとかね。そもそも機能無いですから。
しかしよ!あんた!
結構足りないんですわ。

例えば、fopenを調べようとして、MayaLTのヘルプを見ると。こんな感じ。
fopen無いわけですわ。

で、Mayaのヘルプ。
fopenあるじゃん。
つーかコマンド数がこんなに違うのかい!

お前(Autodesk)さんよー。Python使えないのは我慢するわ。安いしね。けどさ。もーちょっとちゃんと告知してくんねーかねー。

あんたんとこのサイトに書いてあるわけよ、これ。

これじゃわかるわけねーって!

あー、今年前厄だって思い出したわ。
俺が悪いわ。

2015年7月13日月曜日

MayaLT2015:Mel:フラットライトをショートカットに

モデリングしてる時に特にライトを配置していないと、ビューポートのライト表示が「デフォルトライト」か「全てのライト」のどちらかしか選べない!「デフォルトライト」だと妙にハイライト入ってしまうし、「全てのライト」だとそもそもライト置いてないんだし真っ暗。で、フラットライトにしたいんだけど、メニューから選ばなきゃいけない。ワイヤーフレームとテクスチャ表示を行ったり来たりしたいのにこれは非常に面倒くさい。つーか、テクスチャ表示にすると必ず「デフォルトライト」になるのどうにかしてくれ。 かといって、ホットキーの設定をしようとするも、フラットライトの項目が見つからないじゃないか。なんだこれは。 幸い、コマンド履歴がスクリプトエディタで見ることができる。最近MotionBuilderを使っていてコマンド履歴が見えないので、見えるだけでスクリプトを書くテンションが上がるではないか。導入までのアレコレをこれから書いてゆくが、面倒な人のためにとりあえず作ったスクリプトを貼っておく。
string $panel = eval("getPanel -withFocus");
modelEditor -e -dl flat $panel;

■コマンドを探す

さて、まずどうやったかっていうと、スクリプトエディタの履歴をチェックした。
updateLightingMenu MayaWindow|formLayout1|viewPanes|modelPanel4|menu21 modelPanel4;
modelEditor -e -dl flat modelPanel4;
// 結果: modelPanel4 // 
updateModelPanelBar MayaWindow|formLayout1|viewPanes|modelPanel4|modelPanel4|modelPanel4;
dR_setModelEditorTypes;
Mayaのコマンド履歴はどうもゴミが多くて見にくいが、「flat」っていう文字が見つかるので、
modelEditor -e -dl flat modelPanel4;
をコピペして実行してみると、ビューポートが確かに「フラットライト」になる・・・。けど、フラットになるパネルとならないパネルがある。あー、「modelPanel4」というやつは特定のパネルのことを言っているわけね。つーわけで、これをアクティブパネルに変更すればいいわけか。調べると、Graberry | Orthographic を切り替える MELというページを見つけたのでそこから拝借。
string $panel = `getPanel -withFocus`;
この部分は例によってそのままじゃ動かないので、以下のように変更。
string $panel = eval("getPanel -withFocus");
で、「modelPanel4」の部分を「$panel」に変更すれば完成。

■ホットキーに登録

登録するキーはどうせライトを使わないんだし(ゲームの素材を作ってるだけだから)7にしようと思ったんだけど、思いとどまってホットキーがアサインされていない8を使うことにした。自作のスクリプトをどうやって登録するのか・・・しばらくいじって「ホットキーを編集:」というところのドロップダウンメニューに「カスタムスクリプト」という項目を見つけた。んだけどなーんも表示されない。しばらくいじってて右の「ランタイムコマンドエディタ」というところに記入して保存したら出てきたので、それを登録。動いた。「カスタムスクリプト」と書いておきながら「ランタイムコマンド」ってどういうことよ・・・?と少々苦笑いしつつ完成。
 
うむ。快適。

2015年7月12日日曜日

MayaLT: Mel:オブジェクトのローカル座標をゼロにする

Mayaいいんだけど、ローカル座標とワールド座標があって、ワールドの位置がわからなくなるので困る。
ピボットをセンターにした時なんかに起こるんだけど、その後ローカル座標をゼロにする方法がわからなくて、調べた。


ここを参照した。
けど、そのまま実行してもうまく動かない。

string $sel[] = 'ls -sl';
の部分がうまく実行できないみたいなので、調べつつ少し手直し。

string $sel[] = eval('ls -sl');
に変更。
どうやら、Maya LTのせいなのかバージョンの違いなのかはわからないけど、コマンドの戻り値を直接引き取ることができないらしくて、evalを使用しなきゃいけないらしい。

あとは、ピボットをセンターにしている部分をコメントアウトするのと、複数選択に対応して作りなおした。
string $sel[] = eval("ls -sl");
for ($s in $sel){
     //CenterPivot;
     float $selRPQuery[] = eval("xform -q -ws -rp $s");
     string $locator[] = eval("spaceLocator");
     move -ws $selRPQuery[0] $selRPQuery[1] $selRPQuery[2];
     select -r $s;
     select -tgl $locator[0];
     parent;
     makeIdentity -apply true -t 1 -r 0 -s 0 -n 0;
     select -r $s;
     parent -w;
     select -r $locator[0];
     doDelete;
}
生まれて始めてのMelでした。