Melのテキスト処理を高速化

Melを高速化する場合、特にテキストなどの出力を早くしたいときに利用すると便利なのが、下記サイトにあるsprintfです。
http://www.highend3d.com/maya/plugins/?group=mayaplugins&section=utilities

このPlug-inはC言語でよく使われるsprintf関数を制限(引数は10個以内、ソースがあるので増やせますが)がありながらもMaya上で実現させたPlug-inです。
配布されている物以外のバイナリーは無いので、場合によってはコンパイルしないと利用できませんが、使うと非常に高速化できます。

たとえば、取得した文字列と浮動小数点数を混ぜながら出力する場合を想定してみましょう。

3個の要素を持つ配列を組み合わせて出力する場合のscriptはこのようになります。

string $sampleList[]={"aaaa","bbbb","cccc"};
float $testFLList[]={1.2,1,19.444};
string $expStr;
for($i=0;$i!=3;$i++){
 $expStr+=($sampleList[$i]+" "+$testFLList[$i]+"\n");
}
print $expStr;

//result
aaaa 1.2
bbbb 1
cccc 19.444

ちゃんと出力されているので、これでもいいのです、ほとんどの場合は・・・・。

でも「ちょっと待ってください」という方だけ、ここから先を読んでください。

僕の場合の「ちょっと待ってください」は書式変更とパディングでした。
Cソースに変換する場合、データがfloatであることを主張しないといけない場合があります。
この場合「1.2」は小数点がありますから主張しています、しかし「1」はよろしくありません、「1」は「1.0」と出力したくなります。
以前は小数点以下の切捨てや、hex出力して0パディングする関数群を用意したりしていましたが、あまりにも処理が重すぎて話しになりませんでした。
それらの苦労も処理落ちも「sprintf」があれば解決です。

string $sampleList[]={"aaaa","bbbb","cccc"};
float $testFLList[]={1.2,1,19.444};
string $expStr="";
for($i=0;$i!=3;$i++){
 $expStr+=sprintf("%s %.4f\n",$sampleList[$i],$testFLList[$i]);
}
print $expStr;

//result
aaaa 1.2000
bbbb 1.0000
cccc 19.4440

浮動小数点以下が書式にしたがって4桁でそろえられています。

 

string $sampleList[]={"aaaa","bbbb","cccc"};
float $testFLList[]={1.2,1,19.444};
string $expStr="";
for($i=0;$i!=3;$i++){
 $expStr+=sprintf("%s 0x%.4x\n",$sampleList[$i],(int)$testFLList[$i]);
}
print $expStr;

//result
aaaa 0x0001
bbbb 0x0001
cccc 0x0013

hex変換してなおかつ出力も0パディングされています。

このような変換や書式変更が頻繁に行われるようなscriptの場合、最大で10倍強の高速化が行えます。

広告
カテゴリー: Plug-in関係 パーマリンク

Melのテキスト処理を高速化 への3件のフィードバック

  1. Unknown より:

    Hi,Do you need advertising displays, screen advertisings, digital sign, digital signages and LCDs? Please go Here:www.amberdigital.com.hk(Amberdigital).we have explored and developed the international market with professionalism. We have built a widespread marketing network, and set up a capable management team dedicated to provide beyond-expectation services to our customers.
    amberdigital Contact Us
    website:www.amberdigital.com.hk
    alibaba:amberdigital.en.alibaba.com[bcfhcjccbacibd]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中