« C4D Python R12 テスト:リスト型のメソッドを確認 | トップページ | C4D Python R12 テスト:子オブジェクト »

C4D Python R12 テスト:doc.GetSelection()で取得した選択オブジェクトリストから、スプラインオブジェクト以外を削除してみる。

リストからの削除って言うんだから…リスト型のremove()メソッドだろうか?

と思ったけど…remove()は、インデックスを指定するのではなく、該当要素を指定するので無理だよね…「スプライン以外のオブジェクト」って指定しようが無いよね?
そうすると、インデックスを指定してリストの要素を削除できるものと言うと、pop()メソッドかぁ…
本来、pop()は抜き出す為のメソッドだけど… まぁ良いか…

Deselect_except_spline_02

今回は選択解除ではないので、オブジェクトマネージャの選択状況は変わらないね。

Python
'''
選択オブジェクトリストからスプラインオブジェクト以外を削除します。
2011.6.5
'''


import c4d


def printlist(lists):
    for c in xrange(len(lists)):
        print c, lists[c]


def main():
    sel_obj = doc.GetSelection()

    print '処理前'
    printlist(sel_obj)

    c = 0
    while c < len(sel_obj):
        if sel_obj[c].GetType() != c4d.Ospline:
            sel_obj.pop(c)
            c = 0
            continue
        c += 1

    print '処理後'
    printlist(sel_obj)


if __name__=='__main__':
    main()
    c4d.EventAdd()

処理前
0 <c4d.BaseObject object at 0x206F4250>
1 <c4d.BaseObject object at 0x206F4240>
2 <c4d.SplineObject object at 0x209E7C80>
3 <c4d.SplineObject object at 0x209E7D40>
4 <c4d.SplineObject object at 0x209E7D20>
5 <c4d.SplineObject object at 0x209E7CE0>
6 <c4d.SplineObject object at 0x209E7B40>
7 <c4d.SplineObject object at 0x209E7B80>
8 <c4d.SplineObject object at 0x209E7AC0>
9 <c4d.BaseObject object at 0x206F4200>
10 <c4d.BaseObject object at 0x206F4230>
処理後
0 <c4d.SplineObject object at 0x209E7C80>
1 <c4d.SplineObject object at 0x209E7D40>
2 <c4d.SplineObject object at 0x209E7D20>
3 <c4d.SplineObject object at 0x209E7CE0>
4 <c4d.SplineObject object at 0x209E7B40>
5 <c4d.SplineObject object at 0x209E7B80>
6 <c4d.SplineObject object at 0x209E7AC0>

処理後スプラインオブジェクト以外は、削除されているね。

でもね…

選択オブジェクトの中からスプラインオブジェクトだけ取得するのであれば、リストを操作して抜き出したり削除しなくてもできたりするんだよね。

Python
'''
複数選択オブジェクトからスプラインオブジェクト以外を選択解除し…
スプラインオブジェクトのみ取得します。
2011.6.5
'''


import c4d


def printlist(lists):
    for c in xrange(len(lists)):
        print c, lists[c]


def main():
    for obj in doc.GetSelection():
        if obj.GetType() != c4d.Ospline:
            obj.DelBit(c4d.BIT_AOBJ)

    sel_obj = doc.GetSelection()
    printlist(sel_obj)


if __name__=='__main__':
    main()
    c4d.EventAdd()

0 <c4d.SplineObject object at 0x209E7D80>
1 <c4d.SplineObject object at 0x209E7D40>
2 <c4d.SplineObject object at 0x209E7D20>
3 <c4d.SplineObject object at 0x209E7CE0>
4 <c4d.SplineObject object at 0x209E7B40>
5 <c4d.SplineObject object at 0x209E7C40>
6 <c4d.SplineObject object at 0x209E7CC0>

スプライン以外を選択解除した後に、BaseDocument.GetSelection()で取得し直せば良いだけなのだ。
複雑に考える必要はないのね。

|

« C4D Python R12 テスト:リスト型のメソッドを確認 | トップページ | C4D Python R12 テスト:子オブジェクト »

コメント

コメントを書く



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




« C4D Python R12 テスト:リスト型のメソッドを確認 | トップページ | C4D Python R12 テスト:子オブジェクト »