2005年02月18日

Keyframer2

とりあえず指定した範囲にキーフレームが打てればいいんで、仮で作ってみた
今のところは、followerをbakeする為だけのプラグインかも
あれば便利そうな機能とかは暇が出来てから
GUIは範囲の最初と最後、増分を入力する部分のみ
GoToFrameでフレームを移動して、CreaetKeyで選択されているオブジェクト等にキーフレームを打つ。 を指定した範囲分繰り返している
キーは全チャンネルに打たれてしまう

↓ソースの一部

 

typedef struct {
 GlobalFunc *global;
 int   start, end, step;
}MyData;

int Panel(MyData *data, GlobalFunc *global)
{
 LWPanelFuncs *panel = (LWPanelFuncs*)global(LWPANELFUNCS_GLOBAL, GFUSE_TRANSIENT);
 LWPanelID  pid = NULL;
 int    result = 0;
 LWControl  *ctl[3];

 if( !panel )
  return result;

 if( pid = PAN_CREATE(panel, SERVERNAME) ){
  ctl[0] = INT_CTL(panel, pid, "StartFrame");
  ctl[1] = INT_CTL(panel, pid, "EndFrame");
  ctl[2] = INT_CTL(panel, pid, "FrameStep");

  SET_INT(ctl[0], data->start);
  SET_INT(ctl[1], data->end);
  SET_INT(ctl[2], data->step);

  if( PAN_POST(panel, pid) ){
   result = 1;
   GET_INT(ctl[0], data->start);
   GET_INT(ctl[1], data->end);
   GET_INT(ctl[2], data->step);
  }
  PAN_KILL(panel, pid);
 }

 return result;
}

XCALL_(int) Activate(long version, GlobalFunc *global, LWLayoutGeneric *local, void *serverData)
{
 if( LWLAYOUTGENERIC_VERSION != version )
  return AFUNC_BADVERSION;

 LWSceneInfo  *sceneInfo = (LWSceneInfo*)global(LWSCENEINFO_GLOBAL, FUSE_TRANSIENT);
 LWInterfaceInfo *ifInfo = (LWInterfaceInfo*)global(LWINTERFACEINFO_GLOBAL,GFUSE_TRANSIENT);
 char   cmdline[MAX_PATH];

 if( !sceneInfo || !ifInfo ) return AFUNC_BADGLOBAL;

 MyData data = { global, ifInfo->previewStart, ifInfo->previewEnd, ifInfo->previewStep };

 if( 0 == Panel(&data, global) ) return AFUNC_OK;

 if( data.start > data.end ){
  int temp = data.end;
  data.end = data.start;
  data.start = temp;
 }
 if( 0 == data.step ) data.step = 1;
 else if( 0 > data.step ) data.step *= -1;

 for(int i=data.start; i<=data.end; i+=data.step){
  sprintf(cmdline, "GoToFrame %d", i);
  local->evaluate(local->data, cmdline);
  float time = (float)i / sceneInfo->framesPerSecond;
  sprintf(cmdline, "CreateKey %f", time);
  local->evaluate(local->data, cmdline);
 }
 return AFUNC_OK;
}

posted by toka at 13:00| Comment(0) | TrackBack(0) | LWプラグイン開発 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。