2009年から仕事でMAYAを勉強。MAYAはデフォルトでは使い勝手が悪い。逆にスクリプトを覚えてカスタマイズするとかなり強力なツールになることがわかってきた。

物覚えが悪いので勉強したことはリマインダとしてココに書き留めるようにする。

2009年5月27日水曜日

汎用パーツをLibみたいにする

一区切りついたのでソースを見やすくする一環の

”汎用ルーチンを別に作って返り値をもらう”の研究。

プログラマからサンプルをもらったので見る。考えるな、盗むんだ。

proc int[] GenerateIndex( int $num )
{
int $newval[];
int $cnt;

// num <= 0 の場合は最低一つ返すようにする
$newval[0] = 0;

for( $cnt=0 ; $cnt<$num ; $cnt++ )
{
$newval[ $cnt ] = $cnt;
}

return $newval;
}

・・・なんだreturnって。はじめて見るぞ。

とにかくforとセットになる命令であることは確かなようだ。これで$newvalの値を返すのか?

返す場所は指定しなくても来た場所に戻るのか?

で、そもそもどこからこれを呼んでいるのか。

// 8個の連続したインデックス配列を作る
int $idxs[] = GenerateIndex(8);
int $idx;

ぬお、変数に直接プロシージャ名を指定してる。こんなことができるのか。



これを参考に試行錯誤した結果、俺のやりたい事はこうすればできると判明

1.サブルーチン的なglobal procをまとめたファイルをhogehogelib.melという
名前で保存しスクリプトフォルダに入れる。

ここで重要なのは hogehogelib.mel の最後に

global proc hogehogelib()

と書いておくこと。

2.適当なスクリプトを書く。そのなかでhogehogelib.melを使いたい場合は1行
hogehogelib;
と書いておきスクリプトをロードさせる。

あとはそのプロシージャの中で、libにあるプロシージャを呼び出せばreturn命令で
戻ってきてくれる。


そういえば、もらったサンプルが返す値は変数1個だけだんだけど、配列2個とか複数の値を
返したい場合はどう記述すればいいのんか?

return $val1[] $val2[];

とか?







0 件のコメント: