« C4D Python R12 テスト:アニメーションのトラックにアクセスしてみる。 | トップページ | C4D Python R12 テスト:オブジェクトにアニメーショントラックを追加する。 »

C4D Python R12 テスト:オブジェクトからキーフレームにもアクセスしてみる。

オブジェクトから、CTrackを取得し、CTrackからCCurveを取得。
更にCCurveからCKeyを取得。
と言う手順だろう…多分…

C.O.F.F.E.E.ならば、
http://villager-and-c4d.cocolog-nifty.com/blog/2009/07/c4d-r11-coffe-1.html

今回は、立方体に位置XYZのトラックが設定されている状態でテストしました。

Python_ctrack_05

Python
'''
選択したオブジェクトからのキーフレームを取得し
キーフレームの秒とフレームを表示
2011.5.27
'''


import c4d


def main():
    if not isinstance(op, c4d.BaseList2D):return

    tracks = op.GetCTracks() #オブジェクトの全トラックの取得
    if not tracks:return

    print op.GetName()
    for track in tracks:
        print 'CTrackName:', track.GetName()
        curve = track.GetCurve() #トラックからカーブの取得
        key_count = curve.GetKeyCount()
        for key_id in xrange(key_count):
            key = curve.GetKey(key_id) #カーブからキーの取得
            sec = key.GetTime().Get() #キーから秒の取得
            frm = key.GetTime().GetFrame(doc.GetFps()) #キーからフレームの取得
            print ' '*8, 'key:', key_id, '  sec:', sec, '  frame:', frm
            print ' '*8, 'キーの値', key.GetValue()
            print ' '*8, '補間', key.GetInterpolation()
            print ' '*8, '左の時間', key.GetTimeLeft().Get()*doc.GetFps()
            print ' '*8, '左の値', key.GetValueLeft()
            print ' '*8, '右の時間', key.GetTimeRight().Get()*doc.GetFps()
            print ' '*8, '右の値', key.GetValueRight()
            print ' '*8, key.GetGeData()
            print ' '*8, '-'*20
    print 'ok'


if __name__=='__main__':
    main()

立方体
CTrackName: 位置 . X
         key: 0   sec: 0.0   frame: 0
         キーの値 0.0
         補間 1
         左の時間 -7.5
         左の値 -25.0
         右の時間 7.5
         右の値 25.0
         None
         --------------------
         key: 1   sec: 1.0   frame: 30
         キーの値 100.0
         補間 1
         左の時間 -7.5
         左の値 0.0
         右の時間 7.5
         右の値 0.0
         None
         --------------------
         key: 2   sec: 2.0   frame: 60
         キーの値 0.0
         補間 1
         左の時間 -7.5
         左の値 0.0
         右の時間 7.5
         右の値 0.0
         None
         --------------------
         key: 3   sec: 3.0   frame: 90
         キーの値 100.0
         補間 1
         左の時間 -7.5
         左の値 -25.0
         右の時間 7.5
         右の値 25.0
         None
         --------------------
CTrackName: 位置 . Y
         key: 0   sec: 0.0   frame: 0
         キーの値 0.0
         補間 1
         左の時間 -7.5
         左の値 -25.0
         右の時間 7.5
         右の値 25.0
         None
         --------------------
         key: 1   sec: 1.0   frame: 30
         キーの値 100.0
         補間 1
         左の時間 -7.5
         左の値 0.0
         右の時間 7.5
         右の値 0.0
         None
         --------------------
         key: 2   sec: 2.0   frame: 60
         キーの値 0.0
         補間 1
         左の時間 -7.5
         左の値 0.0
         右の時間 7.5
         右の値 0.0
         None
         --------------------
         key: 3   sec: 3.0   frame: 90
         キーの値 100.0
         補間 1
         左の時間 -7.5
         左の値 -25.0
         右の時間 7.5
         右の値 25.0
         None
         --------------------
CTrackName: 位置 . Z
         key: 0   sec: 0.0   frame: 0
         キーの値 0.0
         補間 1
         左の時間 -7.5
         左の値 -25.0
         右の時間 7.5
         右の値 25.0
         None
         --------------------
         key: 1   sec: 1.0   frame: 30
         キーの値 100.0
         補間 1
         左の時間 -7.5
         左の値 0.0
         右の時間 7.5
         右の値 0.0
         None
         --------------------
         key: 2   sec: 2.0   frame: 60
         キーの値 0.0
         補間 1
         左の時間 -7.5
         左の値 0.0
         右の時間 7.5
         右の値 0.0
         None
         --------------------
         key: 3   sec: 3.0   frame: 90
         キーの値 100.0
         補間 1
         左の時間 -7.5
         左の値 -25.0
         右の時間 7.5
         右の値 25.0
         None
         --------------------
ok

c4d.Ckeyから取得できるものを表示してみました。
キーの時間/キーの値/補間
左の時間/左の値
右の時間/右の値
CKey.GetGeData()…これが全て、None…

オブジェクトからのキーフレームを取得するには、オブジェクトからCTrackリストを取得して、CTrackからCCurve…そして、CCurveからCkeyという流れだろう…

トラックリストの取得

BaseList2D.GetCTracks()

CTrackからCCurveの取得

CTrack.GetCurve()

CCurveからCKeyの取得

CCurve.GetKey()

CKeyを取得した後は、CKeyを操作するでしょう…
キーフレームを選択すると属性マネージャには次のように表示されますね。

Python_ctrack_06

属性マネージャに表示されたキーのパラメータの項目は、スクリプトマネージャにはドラッグ&ドロップができませんので、CKeyのメソッドを使うわけだね…

CKeyのメソッドで値を操作するわけですが…
メソッドでは、時間を固定や自動接線、角度ゼロなどのフラグが操作できないような…
まだ勉強不足なので詳しくわかりません。
GetGeData()メソッドも何を取得できるかわかりません。

更に解らないのは、選択されたキーフレームを判別するにはどうしたらいいのだろう?

Python_ctrack_07

Ckeyには選択フラグを扱うメソッドは無さそうだし…
CCurveには選択されたCKeyのBaseSelectを扱うメソッドも無さそうだ…

そう言えばCOFFEEで選択オブジェクトの判別に、GetBit(BIT_AOBJ)やSearchNext(BIT_AOBJ)で…
と思ってSDK見たら…

C4DAtom
├CKey
└GeListNode
    └BaseList2D ->GetBit()
         ├CCurve
         └CTrack

残念ながら、CKeyはBaseList2Dを継承していないし…
まさか、C4DAtomのGetDirty()…
じゃないし…

よく解らないから、保留だね…

|

« C4D Python R12 テスト:アニメーションのトラックにアクセスしてみる。 | トップページ | C4D Python R12 テスト:オブジェクトにアニメーショントラックを追加する。 »

コメント

コメントを書く



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




« C4D Python R12 テスト:アニメーションのトラックにアクセスしてみる。 | トップページ | C4D Python R12 テスト:オブジェクトにアニメーショントラックを追加する。 »