myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | Memo : Filter PolyMeshes

スクリプトのメモです。


いつもポリゴンメッシュだけを取得してくれるファンクションを使っています。

何も考えずに書いたファンクションですけど。
8~9割は潤樹さんのパクリだし:

潤樹さんのファンクションは元々こんな感じです:


//jscript
function FilterX3D(in_Objs)
{
var oCol = XSIFactory.CreateObject('XSI.Collection');
for (var i=0; i {
if (in_Objs(i).IsClassOf(siX3DObjectID))
{
oCol.Add(in_Objs(i));
}
}
return oCol;
}


しかし俺はポリゴンメッシュだけが欲しい時が多い。
そして、ブランチ選択対応もしたいのでこう変えてみました:


//jscript
function FilterPolyMsh(in_Objs){
var oCol = XSIFactory.CreateObject('XSI.Collection');
oCol.unique = true;

for (var i=0, a=in_Objs.count; i < a; i++) {
if (in_Objs(i).type == "polymsh") {
oCol.Add(in_Objs(i));
}
}
var oExp = oCol.expand();
for (var i=0, a = oExp.count; i < a; i++) {
if (oExp(i).type == "polymsh") {
oCol.Add(oExp(i))
}
}
return oCol;
}


今見ると結構無駄が多いから、もっと効率のいいファンクションを書いてみました。
なんとなくですね。

ミリ秒ぐらいの差しか出ないけど、ほぼ毎回使うファンクションなので書きなおしてみました。


//jscript
function FilterPolyMsh(in_Objs){
var oCol = XSIFactory.CreateObject('XSI.Collection');
oCol.unique = true;
oCol.items = in_Objs;
return SIFilter(oCol.Expand(), siPolyMeshFilter);
}


なんかJSにしてはコンパクトでエレガントな感じですね。

これで決まりです。このファンクションはコレクションに入れておきます!

便利なファンクションやスクリプトメモを自分のフォルダに貯めていて、自分なりにジャンルで整理しています。
スクリプトを組む時に、例えば Current Camera が欲しいけどその取得はもう忘れてしまった!という時にこのスクリプト集フォルダを探って、「Get Current Camera.js 」のコードをコピペーするだけで済むから単純なスクリプトはすぐに書けます。

なので、なるべくこのスクリプト集に効率の良いスクリプトにしています。