« artist side/C4Dコミュニティ 「キャラクタを1フレーム毎にobj形式でXPressoでの保存」?回答が出た… | トップページ | artist side/C4Dコミュニティ 「キャラクタを1フレーム毎にobj形式でXPressoでの保存」?-05 »

artist side/C4Dコミュニティ 「キャラクタを1フレーム毎にobj形式でXPressoでの保存」?-04

XPressoではなく、ユーザスクリプトだったらどうだろう?

さて、ユーザスクリプトから、タイムライン上でのオブジェクトの状態を拾う方法を考えなければなりません。

タイムライン上のオブジェクトのシーケンスから数値は拾えるんだっけ?
それとも、自分でキーフレームから中間を算出するのか?
一番簡単な方法は?

そう言えば、タイムライン上の現在の時間を取得するには、

var sec = doc->GetTime()->GetSecond();//タイムライン上の現在の秒を取得

と、するわけだが…

現在のフレームを取得するならば、

var frm = doc->GetTime()->GetFrame(doc->GetFps());//タイムライン上の現在のフレーム

では、タイムライン上の指定したフレームに移動してみよう。

100フレームに移動します。

//フレーム100へ移動
var tm = doc->GetTime();//tm = new(BaseTime);
tm->SetFrame(100 , doc->GetFps());
doc->SetTime(tm);

アニメーションの最初のフレームは、

var mnf = doc->GetMinTime()->GetFrame(doc->GetFps());//アニメーションの最初のフレーム

アニメーションの最後のフレームは、

var mxf = doc->GetMaxTime()->GetFrame(doc->GetFps());//アニメーションの最後のフレーム

じゃあ、もしかして…

/*
思ったようには行かないのだ…
残念ながら…
2009.7.12
*/


main(doc , op)
{
  var mnf = int(doc->GetMinTime()->GetFrame(doc->GetFps()));//アニメーションの最初のフレーム
  var mxf = int(doc->GetMaxTime()->GetFrame(doc->GetFps()));//アニメーションの最後のフレーム
  var tm = new(BaseTime);
  var c;

  for(c = mnf ; c <= mxf ; c++){
    tm->SetFrame(c , doc->GetFps());
    doc->SetTime(tm);
    EventAdd();
    println(c , " " , op->GetPosition());
  }
}

アニメーションの最初のフレームと最後のフレームを取得。
for()のループでアニメーションの最初のフレームから最後のフレームまでを繰り返す。
タイムライン上をループカウンターで移動して…
イベントで画面を更新し、アクティブオブジェクトの位置をコンソールに表示する。

なんとなく、思ったように動きそうだけど…
そうは、簡単にはいかないのだ…

アクティブオブジェクトにキーフレーム打って、アニメーション設定していても…

スクリプトが実行された時の、アクティブオブジェクトの位置をフレームの数だけコンソールに表示するだけ…
変化なし…

0 [-40.448509,40.314606,-19.697220]
1 [-40.448509,40.314606,-19.697220]
2 [-40.448509,40.314606,-19.697220]
3 [-40.448509,40.314606,-19.697220]
4 [-40.448509,40.314606,-19.697220]
5 [-40.448509,40.314606,-19.697220]
        :
        :
85 [-40.448509,40.314606,-19.697220]
86 [-40.448509,40.314606,-19.697220]
87 [-40.448509,40.314606,-19.697220]
88 [-40.448509,40.314606,-19.697220]
89 [-40.448509,40.314606,-19.697220]
90 [-40.448509,40.314606,-19.697220]

駄目なのは分かっていたけどね、淡い期待が少しは有ったのは本当さっ…
ただの負け惜しみなんだけどね…

EventAdd()じゃなくて、BaseDocumentのMultiMessage()とか?
それともBaseList2DのMessage()とか?

ま、懲りずに続きを考えているんだけどね…
希望の光が…

|

« artist side/C4Dコミュニティ 「キャラクタを1フレーム毎にobj形式でXPressoでの保存」?回答が出た… | トップページ | artist side/C4Dコミュニティ 「キャラクタを1フレーム毎にobj形式でXPressoでの保存」?-05 »