2019年9月30日月曜日

MELでファイル出力をしてみる

その昔、Maya Personal Learning Edition(略してPLE)というフリー版が存在していて色々お世話になっていました。無償の機能限定版とあって、ファイル入出力コマンドが使えないという制限があり中々キビシかったですが・・・。

そんな歴史もありつつ mayaLTは有償ということもあり制限が緩和され、PLEでは不可能だったファイル入出力が出来るようになりました。
けれども、fwriteAll~とfreadAll~というコマンドの新設と、なかなかアクロバティックな対応。
そんなファイル入出力コマンドをチェックしてみたいと思います。



今まで、ファイルを作成するには、fopen, fprint, fclose 3つのコマンドを使用する必要がありました。こんな感じ。
{
    string $file0 = "d:/test0.txt";

    string $obj[] = `polySphere`;
    string $vtxs[]= `polyListComponentConversion -tv $obj[0]`;
    $vtxs = `ls -fl $vtxs`;

    // ファイル出力
    int $fId = `fopen $file0 "w"`;
    for($vtx in $vtxs) fprint $fId ($vtx+"\n");
    fclose $fId;

}

C言語っぽいですね。

で、新設された fwriteAllLinesとfwriteAlltextはもっと簡単に使えます。
{
    string $file1 = "d:/test1.txt";
    string $file2 = "d:/test2.txt";

    string $obj[] = `polySphere`;
    string $vtxs[]= `polyListComponentConversion -tv $obj[0]`;
    $vtxs = `ls -fl $vtxs`;

    // fwriteAllText
    string $oText;
    for($vtx in $vtxs) $oText+=($vtx+"\n");
    int $result1 = `fwriteAllText $file1 $oText`;

    // fwriteAllLines
    int $result2 = `fwriteAllLines $file2 $vtxs`;

}

出力先と出力したい文字列を引数にするだけとなりました。
ただ、このコマンドにはちょっとした注意しないといけない部分があります。

fwriteAllTextのほうは改行コードが入りません。
なので、自分で追加しないと出力した文字は1行に連なってしまいます。

逆に fwriteAllLinesは改行コードが自動で挿入されます。
しかも、その改行コードは"\r\n"固定です。ひょっとすると windows以外では違うかも。
maya以外のアプリでファイルを使用する場合、改行コードの除去に注意が必要になってきます。


フルスペックの mayaでもこのコマンドは使用できるので、ツールをLTと共用させるためには積極的に使用したいところです。
ただし、LTの fwriteAll~には出力できる容量に制限があるようです。

とりあえず5行目をpolySphere -sx 250 -sy 250にして6万頂点くらいで出力してみたところ、
// Warning: line 12: File size limit has been exceeded. Unable to write to file "d:/test1.txt". //
// Warning: line 15: File size limit has been exceeded. Unable to write to file "d:/test2.txt". //
と出てきました。
ファイルサイズに制限がかかっているみたいですね。

5行目を`polySphere -sx 230 -sy 230`にしたところで fwriteAllLinesが出力できなくなりました。
ファイルサイズにして約1,024KB、大体1MBが限界のようです。
改行コードが"\n"と"\r\n"の違いでfwriteAllTextのほうが多く情報を出力できます。

0 件のコメント:

コメントを投稿