スポンサーリンク

VTKでタイマー

#include <iostream>

//VTK_MODULE_INITに必要
#include <vtkAutoInit.h>

#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>

// コールバック関数を使用するのに必要
#include <vtkCallbackCommand.h>


//必須
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);


// コールバック関数に渡すデータ
struct MyData
{
  std::string text;
  int counter;
};

      
// タイマーのコールバック関数
void MyTimerCallbackFunction(vtkObject* caller, long unsigned int eventId, void* clientData, void* callData)
{
  MyData* data = static_cast<MyData*>(clientData);

  // タイマーイベントが発生したことを確認する
  std::cout << data->text << " " << data->counter << std::endl;
  data->counter++;

  // 画面更新
  auto interactor = static_cast<vtkRenderWindowInteractor*>(caller);
  interactor->Render();
}

int
main(int /*argc*/, char** /*argv*/) { ////////////////////////////////////// auto renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->ResetCamera(); ////////////////////////////////////// auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); renderWindow->SetInteractor(interactor); renderWindow->Render(); //////////////////////////////////////
  // タイマーに渡す構造体の作成
  MyData callbackData{ "Counter:",0 };

  // タイマー作成
  auto timerCallback = vtkSmartPointer<vtkCallbackCommand>::New();
  timerCallback->SetCallback(MyTimerCallbackFunction); // コールバック関数を設定
  timerCallback->SetClientData(&callbackData); // コールバック関数に渡すデータを設定

  interactor->AddObserver(vtkCommand::TimerEvent, timerCallback); // タイマーイベントにコールバック関数を設定

  interactor->Initialize();
  interactor->CreateRepeatingTimer(100); // 100msごとにタイマーイベントを発生させる
  //////////////////////////////////////


  interactor->Start(); //イベントループへ入る

  return 0;
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: