« C4D で水を作りたい? | トップページ | C4D Python R12 テスト:ポリゴンオブジェクトのポリゴンを表示する。 »

C4D Python R12 テスト:そう言えば…オブジェクトが複数選択されていたら?

オブジェクトが複数選択されている場合、C.O.F.F.E.E.でのopはnilを返すんだよね。
その代りに、object()を使うんだよね。
複数選択のタグは、tag()を使うと…
これはC.O.F.F.E.E.SDK R11からだったけ?
それ以前は、BaseList4DのSearchNext()にbitを指定して選択されたオブジェクトをサーチしていたんだよね…

object()やtag()の様なものは、C4D Python SDK R12には無いようだ…
隅から隅まで全部目を通した分けではないので、見落としているかもね。

Pythonスクリプトでは、複数のオブジェクトが選択されているか、もしくは何も選択されていないとopはNoneとなり、1つだけオブジェクトが選択されていれば、そのオブジェクトになります。

今回もスクリプトマネージャです。

C.O.F.F.E.E.
var c;
for(c = 0 ; object(c) ; c++){
  println(object(c)->GetName());
}

C.O.F.F.E.E.の場合、これで複数選択されている全てのオブジェクトの名前がコンソールに表示されるけど…

Pythonコンソールで試しに…

Python
import c4d
from c4d import documents

if __name__ == '__main__':
    obj = doc.GetActiveObject()
    print obj.GetName()

c4d.BaseDocumentの操作なのでc4d.documentsモジュールもインポートする。

変数objはopと同じく、オブジェクトが複数選択されているとNoneとなる。

では、以前のようにオブジェクトマネージャでの最初のオブジェクトを取得し、C.O.F.F.E.E.でのBaseList4DのSearchNext()の様なものでサーチするのだろうか?

C.O.F.F.E.E.
var obj = doc->GetFirstObject();
if(!obj)return;
if(!obj->GetBit(BIT_AOBJ))obj = obj->SearchNext(BIT_AOBJ);
while(obj){
  println(obj->GetName());
  obj = obj->SearchNext(BIT_AOBJ);
}

GetActiveObject()と言う関数があったよね。複数オブジェクトの選択されている最初のオブジェクトを取得する関数だよね。
こんな具合だったけ…

C.O.F.F.E.E.
var obj = GetActiveObject(doc);
if(!obj)return;
while(obj){
  println(obj->GetName());
  obj = obj->SearchNext(BIT_AOBJ);
}

で、Pythonでは…?

C.O.F.F.E.E.でのBaseList4DのSearchNext()の様なものは見つけられず…
代わりに、c4d.BaseDocumentのGetSelection()を見つけたけど…
オブジェクトマネージャでの選択されたリストを取得できるのだ。

Python
import c4d
from c4d import documents

if __name__ == '__main__':
    for objs in doc.GetSelection():
        print objs.GetName()

Py_activeobj_tag_01

これで実行すると、選択されたアイテムの名前がコンソールに表示されます。

B
テクスチャ
スムーズ
D
モーションブラー

オブジェクトもタグも一色単…
良いのか、悪いのか、便利なのか、どうなのか…?

Python
import c4d
from c4d import documents

if __name__ == '__main__':
    for objs in doc.GetSelection():
        if isinstance(objs, c4d.BaseObject):
            print objs.GetName()
B
D

組み込み関数のisinstance()で選別すれば良いのか…

|

« C4D で水を作りたい? | トップページ | C4D Python R12 テスト:ポリゴンオブジェクトのポリゴンを表示する。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« C4D で水を作りたい? | トップページ | C4D Python R12 テスト:ポリゴンオブジェクトのポリゴンを表示する。 »