2012/02/09

にわかスクリプト~EnvelopeWeightsの名前を変えたかっただけなんです許してやってください。

こんなの書くのにしばらく時間がかかってしまいましたorz

今回ばかりは誰のためにもならないがそれでも晒す。全裸で晒す。

Jscript

for (i=0; i<Selection.count; i++)
{
    FreezeModeling(Selection(i), null, null);
    var oClusters =Selection(i).ActivePrimitive.Geometry.Clusters.Filter( "pnt" );
    SetValue(oClusters.GetAsText() + ".*.Name", "Envelope_Weights", null);
}


いやもう見事にダメダメですな。無理やり感この上ない。
なんかもう生きててごめんなさい。

Twitterでチラッと呟いたら天の声。

mObject Cleaner:myara CG blog
http://myara.blog.fc2.com/blog-entry-47.html

秒殺クラスタ :Junki The Junkie's Junkyard
http://junkithejunkie.cocolog-nifty.com/blog/2008/07/post_a1f7.html


涙が止まりません。

SDKガイドを調べる練習をしたんだと思い込むことにしようそうしよう。
ダメダメでもやってりゃ何とか形になるもんです。たぶんきっとメイビー。

日々教えて頂いている方々に見離される前に普通に書けるようになりたい所存です。

さぁ明日へ向かってアイキャンフライ。


追記:
ブログにコードのっけるウィジェットと変換コード公開してくださってる方が
居たのでメモメモ。

http://www.kuribo.info/2008/04/code-prettify.html


4 件のコメント:

  1. お疲れ様です。ちょっと突っ込ませて貰います。

    OMでクラスタを取得して、ポイントクラスタをFilterで絞ったのはとても良かった。俺はこのやりかたに辿り着くまでは結構時間がかかりました。

    しかし次の列はあんまり良くないです。

    なんで SetValue (oClusters + ".*.Name" …) で上手くいかないかというと、

    oClustersは普通のオブジェクトではなくコレクションだからです。(コレクションオブジェクトとも言うけど、コレクションだけにしたほうが分かりやすいかな)

    なので、LogMessage(oClusters)でもエラーが出ます。
    オブジェクトが一つしか入っていなくてもインデックス番号が指定されていないからね。

    GetAsText()でコレクションの中身の名前をストリング化してコマンドで使うところは良い発想だけど、これはオブジェクト数は1つになっている場合にしか上手く行かない。例えばシンメトリマップとか入っていたら oClusters に複数のオブジェクトが入って、GetAsText + SetValueも使えなくなってしまいます。

    因みに、Weigth Editor を開くと「EnvelopSelectedVert」という非表示なポイントクラスタが作られます。WeigthEditorを閉じると自動に消えます。なので、WeigthEditorが開いている間にポイントクラスタ+1になります。

    つまり、コレクションだからインデクス番号を指定するか、全オブジェクトをループする必要があります。

    今回はエンベロープだけは目的なので、ポイントクラスタから更にエンベロープクラスターだけに絞ったほうが良い。
    そうしないと、エンベロープ以外のポイントクラスタもリネームしちゃいます。

    そのためにクラスタ.タイプだけじゃなくて、クラスターの中に入っているプロパティ.タイプも調べなきゃいけない。プロパティ.タイプは「envweights」ならその親クラスタはエンベロープということです。

    因みに mObjectCleaner はβなので、コードが汚いところと無駄なところが多いと思う。

    Prettifyを試してみます!

    返信削除
  2. このコメントは投稿者によって削除されました。

    返信削除
  3. なんかコメント書くのに色々間違えて、書きなおしたら実はちゃんと送信されてたorz

    例えば、エンベロープクラスタを取得したい時に:
    oClustersでポイントクラスタを取得した後に、forループして:
    var oClsProp = oClusters(i).properties.Filter("envweights");
    でプロパティを絞って、そのプロパティの親(oClsProp(j).Parent)はエンベロープクラスタ。

    こないだ潤樹さんがマテリアルの記事ににコレクションの説明も書いてました。
    http://junkithejunkie.cocolog-nifty.com/blog/2012/01/post-1b5c.html

    返信削除
  4. >myara13さん
    いつもお世話になります(´;ω;`)

    そうなんです。SetValue (oClusters + ".*.Name" …) で動かなくて、
    oClusters のLogmessageもGetAstext以外上手く行かなくて詰まっていましたorz

    潤樹さんの記事ガン見してたんですがやはり大事な所を見落とします(´Д⊂ヽ
    読んだだけで理解できる脳みそが欲しいです。

    勉強になります!ありがとうございます!!

    返信削除