2012/02/02

にわかスクリプト~救世主現る その2 :前回の追記

----前回までのあらすじ----
マテリアルを皆まとめてグループにしようとして失敗

時間切れ

マテリアル1つずつ選択して実行 とかで茶を濁す
-----------------------

とまぁこんな感じでグダグダ。超グダグダ。
そして月曜日にもまだできず、選択してグループにできたものは他のライブラリに移す。

という手作業前提な改悪を施して、後は週末にでも調べてみよう・・ とか思ってました。


が、


またしても救世主現る。
Material ・ ImageClips 取得メモ

屋良Martinさんありがとうございます。
私が雪山で遭難しかけてる時に記事を見つけて書いてくださったようで、本当に感謝です。


ということでまた私大して何もしてません。

ダメ人間です。救世主が居ないと何もできません。
なんかもうアレです、世紀末救世主に偶然助けられる村人的な存在です。

・・・orz

そんなこんなで今日も恥を晒しましょう。
 
誰かに助けられてばかりの全国の村人達のために。


Jscriptでふ
oSel = Selection(0);

if (oSel == null)
{
          Logmessage("マテリアルライブラリを選択しろ");
}
          else
{
           SetCurrentMaterialLibrary(oSel);


           var oMatLib = ActiveProject.ActiveScene.ActiveMaterialLibrary;
           var oMatItem = oMatLib.Items;


           for( var i=0; i<oMatItem.Count; i++ )
                     {
                    var oMats = oMatItem(i);
                    var oName = oMats.Name;
                    var oMember = SelectObjectsUsingMaterial(oMats);
                    CreateGroup(oName, oMember,null );
                    }
          Logmessage("でけた(´・ω・`)");
}



選択してるマテリアルライブラリ内のマテリアルが適応されてる奴らを
それぞれグループにしてしまいなさいよってスクリプトです。多分動くはず。。


ifとかも使ってみました。for、if、elseは基本なのですかね。

あとコピペスクリプトの時は全く使わなかったLogmessageが大活躍。


しかしあれだ。変数の名前って難しいな。

oMenberとかも何のメンバーだよって感じになるもんな。
ていうかよくわからんからもう全部o付けちゃったけどどうなのよコレ。

助けられつつ何となく調べ方も分かってきたような気がする。たぶん気がするだけ。
まぁちょっとずつ覚えて行きましょう(´・ω・`)


~追記~

ソースコードをブログの中に表示させるのやってみたんだけどなんかおかしい。
やたら改行されてたりスペース空いてたり。何じゃこりゃ。

そしてJunki The Junkie's Junkyardさんでも記事を書いて頂いた模様。
私がイエティとタイマンしてる間に・・・感謝の涙で前が見えません(´;ω;`)

4 件のコメント:

  1. 完全に余計なお世話でアレですが、このスクリプトと同じ働きをするもので、オブジェクトモデルで書いたものを、あなたが雪山にいた頃にブログにアップしてみたので、よろしければ見てみて下さい。


    余計なお世話ついでに変数名の話もしたいけどまた今度体調が万全の時にしましょう。

    さらに余計なお世話ついでに、Selection == null ならばそれは MatLib ではない、というロジックで if を書いてらっしゃるのでこれはさすがに無茶というか完全に破綻してますが、まあ、これもコメント欄で話すのは難しいか・・・。体調が良ければやるんだが・・・。


    頑張って下さい。俺もそうやって覚えたし、今でもそうやってあがいているので、気持ちはよくわかります。痛いほどわかります。 わかんなかったらどうか質問してみて下さい。答えられることならばいくらでも。

    返信削除
  2. >潤樹さん
    あぁ!すみません!屋良さんのブログ見たところでブログ巡回ストップして気づきませんでしたorz

    余計なお世話だなんてとんでもないです物凄く助かります(´;ω;`)

    取得しただけの状態から自分で書いたのと見比べられるので勉強になります!
    比べると言うかもう別物なので見て覚える感じになりますが(;・∀・)

    よく分からないけど動いたから放置して、思考停止しちゃってる部分が多々ありますorz
    Selection == nullの部分とか、試したら動いてしまったのでそのままです(汗

    体調悪いのですか!インフルが侵略戦争を仕掛けてきているようなのでお気をつけ下さい(`・ω・´)

    前に呟いていた「CG屋スキーツアー」ぜひやりたいです!行きましょう!
    何かできることがあればお手伝いします!!

    返信削除
  3. if, for, else さえ使いこなせば色々出来ますね。

    俺はselection.countで確認しています。使ったことも考えたこともなかったけどselection(0)==nullでもありだと思います。選択の数は0じゃないと同じ結果ですから。

    ただし、これは選択されているオブジェクトがあるかどうかの確認にしかなりません。
    オブジェクトはいくつ選択されてるかも確認しないし、何が選択されているかも確認しない。

    selection(0)は最初に選択されたオブジェクトという意味なので:
    selection(0)があるけど、MatLibじゃない
    MatLibが選択されているけど、selection(0)ではない
    というシチュエーションは十分ありえます。

    大抵の場合はtypeで確認すればいいです。Junkiさんのスクリプトを参考にして下さい。

    例:

    条件:選択オブジェクトの数は1つだけ。そして、そのオブジェクトはMatLib類。
    if(selection.count!=1 && selection(0).type !="library_source"){logmessage("マテリアルライブラリを選択しろ")}

    基本的に選択をループして、欲しい種類のオブジェクトだけを取って新しいコレクションに入れることは一番効率的で管理しやすいと思います。

    参考まで。

    返信削除
  4. >myara13さん
    解説に、例まで出して頂いて…!!ありがとうございます!
    本当に勉強になります。

    selection(0)==nullが一番の恥部のようですねこれは(´Д`;)

    うまく行かなくて結局selection(0)とコマンド組み合わせて逃げてしまうことが多いような気がしますorz

    精進します!!

    返信削除