« C4D Python R12 テスト:doc.GetSelection()で取得した選択オブジェクトリストから、スプラインオブジェクト以外を削除してみる。 | トップページ | C4D Python R12 テスト:シーンに変更を加える前にStopAllThreads()を呼び出す必要がある… »

C4D Python R12 テスト:子オブジェクト

子オブジェクトを操作してみる。
オブジェクトマネージャの階層構造だけの処理で、軸や座標は考慮していないので注意してください。

Children_01

アクティブオブジェクトの最初の子オブジェクトを取得する。
c4d.GeListNode.GetDown()

Python
'''
アクティブオブジェクトの先頭の子オブジェクトを取得する。
'''


import c4d


def main():
    if not op:return

    first_children = op.GetDown()
    print first_children.GetName()


if __name__ == '__main__':
    main()
C-1

アクティブオブジェクトの最後尾の子オブジェクトを取得する。
c4d.GeListNode.GetDownLast()

Python
'''
アクティブオブジェクトの最後尾の子オブジェクトを取得する。
'''


import c4d


def main():
    if not op:return

    first_children = op.GetDownLast()
    print first_children.GetName()


if __name__ == '__main__':
    main()
C-3

全ての子オブジェクトを取得する。
c4d.GeListNode.GetDown()/c4d.GeListNode.GetNext()

Python
'''
アクティブオブジェクトの全ての子オブジェクトを取得する。
'''


import c4d


def PrintObjectName(lists):
    for c in xrange(len(lists)):
        print c, lists[c].GetName()


def main():
    if not op:return

    children = op.GetDown()
    all_children = []

    while children:
        all_children.append(children)
        children = children.GetNext()

    PrintObjectName(all_children)



if __name__ == '__main__':
    main()

0 C-1
1 C-2
2 C-3

C.O.F.F.E.E.の時と同じように取得してみたけど…

全ての子オブジェクトを取得する。
c4d.GeListNode.GetChildren()

Python
'''
アクティブオブジェクトの全ての子オブジェクトを取得する。
'''


import c4d


def PrintObjectName(lists):
    for c in xrange(len(lists)):
        print c, lists[c].GetName()


def main():
    if not op:return

    all_children = op.GetChildren()
    PrintObjectName(all_children)


if __name__ == '__main__':
    main()

0 C-1
1 C-2
2 C-3

全ての子オブジェクトを選択する。
CallCommand()

Python
'''
アクティブオブジェクトの全ての子オブジェクトを選択する。
「子オブジェクトを選択

'''


import c4d


def main():
    if not op:return

    c4d.CallCommand(16388) #「子オブジェクトを選択
    #c4d.CallCommand(100004768)上と同じ「子オブジェクトを選択」


if __name__ == '__main__':
    main()

Children_02

これでは、孫オブジェクトも選択されてしまう。

子オブジェクトのみ全て選択する。
c4d.BaseList2D.GetBit()

Python
'''
アクティブオブジェクトの子オブジェクトのみを全て選択する。
'''


import c4d


def main():
    if not op:return

    all_children = op.GetChildren()
    for obj in all_children:
        obj.SetBit(c4d.BIT_AOBJ)


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

Children_03

孫オブジェクトは選択しない。

アクティブオブジェクトの子オブジェクトを同じ階層のオブジェクトにする。
CallCommand()

Python
'''
アクティブオブジェクトの子オブジェクトを同じ階層のオブジェクトにする。
「オブジェクトグループを展開」
'''


import c4d


def main():
    if not op:return

    c4d.CallCommand(100004773) #「オブジェクトグループを展開」


if __name__ == '__main__':
    main()

Children_04

アクティブオブジェクトの子オブジェクトを同じ階層のオブジェクトにする。
c4d.GeListNode.Remove()/c4d.GeListNode.InsertAfter()

Python
'''
アクティブオブジェクトの子オブジェクトを同じ階層のオブジェクトにする。
軸や座標は考慮していません。
'''


import c4d


def main():
    if not op:return

    op.DelBit(c4d.BIT_AOBJ)

    all_children = op.GetChildren()
    all_children.reverse()

    for obj in all_children:
        obj.Remove()
        obj.InsertAfter(op)
        obj.SetBit(c4d.BIT_AOBJ)


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

Children_05

実行後は元の子オブジェクトが選択されるようにしてみた。
今回はオブジェクトマネージャの階層構造だけの処理で、軸や座標は考慮していないので注意してください。

子オブジェクトを残して削除する。
「子階層は残して消去」
CallCommand()

Python
'''
アクティブオブジェクトの子オブジェクトを残して削除する。
「子階層は残して消去」
'''


import c4d


def main():
    if not op:return

    c4d.CallCommand(1019951) #「子階層は残して消去」


if __name__ == '__main__':
    main()

Children_06

子オブジェクトだったオブジェクトの順が反転してしまっている。

子オブジェクトを残して削除する。
c4d.GeListNode.Remove()/c4d.GeListNode.InsertAfter()

Python
'''
アクティブオブジェクトの子オブジェクトを残して削除する。
軸や座標は考慮していません。
'''


import c4d


def main():
    if not op:return

    op.DelBit(c4d.BIT_AOBJ)

    all_children = op.GetChildren()
    all_children.reverse()

    for obj in all_children:
        obj.Remove()
        obj.InsertAfter(op)
        obj.SetBit(c4d.BIT_AOBJ)

    op.Remove()


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

Children_07

実行後は元の子オブジェクトが選択される。
これも同じく、オブジェクトマネージャの階層構造だけの処理で、軸や座標は考慮していないので注意してください。

|

« C4D Python R12 テスト:doc.GetSelection()で取得した選択オブジェクトリストから、スプラインオブジェクト以外を削除してみる。 | トップページ | C4D Python R12 テスト:シーンに変更を加える前にStopAllThreads()を呼び出す必要がある… »

コメント

コメントを書く



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




« C4D Python R12 テスト:doc.GetSelection()で取得した選択オブジェクトリストから、スプラインオブジェクト以外を削除してみる。 | トップページ | C4D Python R12 テスト:シーンに変更を加える前にStopAllThreads()を呼び出す必要がある… »