« C4D Python R13 テスト:アニメーショントラックを他のオブジェクトへコピーするスクリプトを考えてみる。 | トップページ | C4D Python R13 テスト:マテリアルの複製 »

C4D Python R13 テスト:アニメーショントラックを他のオブジェクトへコピーするスクリプトを作ってみた。

前回はアニメーショントラックをコピペするために、クリップボードにオブジェクト名を渡すと言う安直な方法を試してみた。

今回は、クリップボードを使わない方法を考えてみた。

コピー用スクリプトでコピー元オブジェクトのみをファイルに保存し、ペースト用スクリプトで保存したオブジェクトのアニメーショントラックを任意のコピー先オブジェクトへ適用する。
こんな具合だ。

Animationtrackcopy_17

ファイルの保存先は、C4Dアプリケーションと同じフォルダにします。
ファイル名は「TrackCopy.c4d」と言う事にします。

この方法だと、同一シーンのオブジェクトでも別のシーンのオブジェクトでも問題なくアニメーショントラックの複写が簡単にできそうだ。

では、コピー用スクリプトから…

Python
"""
TrackCopy
"""

import c4d
from c4d import documents, storage
import os


def main():
    if not isinstance(op, c4d.BaseObject):return
   
    #保存用BaseDocumentに選択したオブジェクトの複製を挿入
    work_doc = documents.BaseDocument()
    work_doc.InsertObject(op.GetClone())
   
    #保存用ファイルパスの作成とファイルの保存
    path = os.path.join(storage.GeGetStartupPath(), "TrackCopy.c4d")
    documents.SaveDocument(work_doc, path, c4d.SAVEDOCUMENTFLAGS_AUTOSAVE, c4d.FORMAT_C4DEXPORT)

if __name__=='__main__':
    main()

ペースト用スクリプトは…

Python
"""
TrackPaste
"""

import c4d
from c4d import documents, storage
import os


def main():
    #コピー先(選択オブジェクト)の取得
    dsts = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
    if not dsts:return
   
    #読み込みファイルパスの作成とファイルの読み込み
    path = os.path.join(storage.GeGetStartupPath(), "TrackCopy.c4d")
    work_doc = documents.LoadDocument(path, c4d.SCENEFILTER_OBJECTS)
    if not work_doc:return
   
    #コピー元(先頭オブジェクト)の取得
    src = work_doc.GetFirstObject()
    if not src:return
   
    #トラックの取得と複写
    src_track = src.GetCTracks()
    for dst in dsts:
        for trc in src_track:
            clone_track = trc.GetClone()
            dst.InsertTrackSorted(clone_track)
    c4d.EventAdd(c4d.EVENT_ANIMATE)

if __name__=='__main__':
    main()

とりあえず、この2つのスクリプトでアニメーショントラックのコピペができるものの…

同じオブジェクトにペーストスクリプトを複数回実行すると、下の図のようにトラックが重複追加されます。

Animationtrackcopy_18

残念ながら、このスクリプトにはUndo処理は書いていません。
ま、今回はここまでで…

|

« C4D Python R13 テスト:アニメーショントラックを他のオブジェクトへコピーするスクリプトを考えてみる。 | トップページ | C4D Python R13 テスト:マテリアルの複製 »

コメント

コメントを書く



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




« C4D Python R13 テスト:アニメーショントラックを他のオブジェクトへコピーするスクリプトを考えてみる。 | トップページ | C4D Python R13 テスト:マテリアルの複製 »