« C4D R11 C.O.F.F.E.E.からアニメーショントラックの属性にアクセス | トップページ | C4D ポイント数を操作するC.O.F.F.E.E.ノード »

C4D R11 C.O.F.F.E.E.からアニメーショントラック内のキーを取得しアクセス

アニメーショントラックのキーにアクセスするには、トラック(CTrack)を取得し、そのトラックからカーブ(CCurve)を取得します。
更に、カーブからキー(CKey)を取得、と言うように段階を踏んでいきます。

トラックには、補間されたカーブと、それを構成するキーがありますね。

Track_03

キーにはタイムライン上の時間と設定値が格納され、キーフレーム間の補間法の為のパラメータが格納されていますね。

Track_04

では、アクティブオブジェクトの最初のトラックのキーの属性をコンソールに表示してみます。
ただし、R11のトラックの見た目の順番とC.O.F.F.E.E.で取得するトラックの順番が一致するとは限らないようです。

/*
C.O.F.F.E.E.からアニメーショントラックのキーを取得し属性値を表示 R11
2009.7.14
*/


main(doc , op)
{
  //トラックの取得
  var trc = op->GetFirstCTrack();
  if(!trc)return;

  //カーブの取得
  var crv = trc->GetCurve();
  if(!crv)return;

  if(!crv->GetKeyCount())return;

  var key;
  var c;

  var type = new(array , 4);
  type[1] = "スプライン";
  type[2] = "ルニア";
  type[3] = "ステップ";

  println(trc->GetName() , "--------");

  for(c = 0 ; c < crv->GetKeyCount() ; c++)
  {
    key = crv->GetKey(c);//キーの取得
    println(c , " --------");
    println("CKeyのメンバ関数からの取得 ---");
    println("  キーの時間 : " , key->GetTime()->GetFrame(doc->GetFps()));
    println("  キーの値 : " , key->GetValue());
    println("  補間 : " , type[key->GetInterpolation()]);
    println("  左の時間 : " , key->GetTimeLeft()->GetFrame(doc->GetFps()));
    println("  左の値 : " , key->GetValueLeft());
    println("  右の時間 : " , key->GetTimeRight()->GetFrame(doc->GetFps()));
    println("  右の値 : " , key->GetValueRight());

    println(" ");
  }
}

位置 . X--------
0 --------
CKeyのメンバ関数からの取得 ---
  キーの時間 : 0.000000
  キーの値 : 0.000000
  補間 : スプライン
  左の時間 : -10.000000
  左の値 : 0.000000
  右の時間 : 10.000000
  右の値 : 0.000000

1 --------
CKeyのメンバ関数からの取得 ---
  キーの時間 : 45.000000
  キーの値 : 36.448601
  補間 : スプライン
  左の時間 : -18.000000
  左の値 : -10.205612
  右の時間 : 18.000000
  右の値 : 10.205612

2 --------
CKeyのメンバ関数からの取得 ---
  キーの時間 : 90.000000
  キーの値 : 0.000000
  補間 : スプライン
  左の時間 : -10.000000
  左の値 : 0.000000
  右の時間 : 10.000000
  右の値 : 0.000000

どう言う訳だか、属性マネージャのキーの項目からのドラッグ&ドロップができませんでした。
C4D R11 Demoだからだろうか?
CKeyからのメンバ関数で取得できる属性の項目は、これだけ…?
メンバ関数にGetGeData()と言うのがありますが、引数に何を渡せば良いのやら…

CCurveからのCKeyの取得は、スプラインやポリゴンオブジェクトと同じように、番号で取得できます。

[CKey]CCurve::GetKey([int]number);

その為に、CCurveのメンバ関数には、CCurveに取り付けられたキーの個数を取得するメンバ関数が用意されています。

[int]CCurve::GetKeyCount();

|

« C4D R11 C.O.F.F.E.E.からアニメーショントラックの属性にアクセス | トップページ | C4D ポイント数を操作するC.O.F.F.E.E.ノード »