« MAXONのPluginCafeからダウンロードしたSDK関連の.hmcファイル(Windows HTML help)を開いても表示されない方へ… | トップページ | winでIEを使っているんだけど、調子が… »

C4D 複数選択されたオブジェクトの取得 C.O.F.F.E.E. R11 SDK

複数選択されたオブジェクトの取得と言えば…
このブログを読んいただいている方は、多分次のように答えてくれるでしょう…
GetActiveObject(doc)/SearchNext(BIT_AOBJ)/while()を使って取得する。

/*
複数選択されたオブジェクトを取得しコンソールに名前を表示
2009.5.30
*/


main(doc , op)
{
  var obj = GetActiveObject(doc);   //選択された先頭のオブジェクトを取得


  //選択されたオブジェクトを取得して名前を表示
  while(obj){                       //オブジェクトが無くなるまで繰り返す
    println(obj->GetName());        //オブジェクトの名前を表示
    obj = obj->SearchNext(BIT_AOBJ);//次の選択されたオブジェクトの取得
  }
}

こんな具合だね。

これでも、良いんだけどね。
R11SDKで追加されたBasic Functionに

[BaseObject]object([int]number);

と言う関数があります。
SearchNext()で次から次へと捜索しなくても、番号を指定するだけで選択されたオブジェクトの上からn番目のオブジェクトが取得できます。
勿論、最初の選択されたオブジェクトは0番ですね。
選択されたオブジェクトの個数以上の値を入れるとnilになります。

では、R11SDKで追加された関数object()を使って、先ほどの選択されたオブジェクト全ての名前をコンソールに表示するスクリプトを組んで見ます。

/*
R11SDKで複数選択されたオブジェクトの名前をコンソールに表示
2009.5.30
*/


main(doc , op)
{
  var i;

  for(i = 0 ; object(i) ; i++){   //選択されたオブジェクトが無くなるまで繰り返します
    println(object(i)->GetName());//選択されたi番目のオブジェクトの名前をコンソールに表示
  }
}

シンプルなループ処理なので、行数はあまり変わらないですね。
ただ、object(n)とfor()しか使っていませんので更にシンプルです。

さて、このboject()関数は取得するだけなのだろうか?
取得したオブジェクトに値を適用するには…

選択されたオブジェクトの名前を選択順連番に変更するスクリプトです。

/*
R11SDKで複数選択されたオブジェクトの名前を選択順連番に変更する
2009.5.30
*/


main(doc , op)
{
  var i;

  for(i = 0 ; object(i) ; i++){   //選択されたオブジェクトが無くなるまで繰り返します
    object(i)->SetName("selected_" + tostring(i)));//選択されたi番目のオブジェクトの名前を"select_i"へ変更します。
  }
}

GetActiveObject()もSearchNext()も知らなくても、BIT_AOBJも知らなくても選択されたオブジェクトを取得できます。
ま、知ってた方がスクリプトの幅は広がりますけどね。
選択されたオブジェクト用の変数も用意する必要もないですし。

スクリプトのメニューの状態で使ってもシンプルにできますよね。

|

« MAXONのPluginCafeからダウンロードしたSDK関連の.hmcファイル(Windows HTML help)を開いても表示されない方へ… | トップページ | winでIEを使っているんだけど、調子が… »