2

Visual Studio 2010、VTK 5.6を使用しており、CMakeを使用せずにプロジェクトを構成しています。

私は数値計算を扱っており、実行時にVTKを使用していくつかのプロットを生成したいと考えています。VTK Webページにある折れ線グラフの例から始めて、必要なプロットを生成することができました。問題は、プロットウィンドウを閉じないとコードが続行されないことです。

「main.cpp」ファイルから、VTKプロシージャが開始されるヘッダーファイルにコマンドを送信します。

residualPlotter(x,xdim1d);

「residualPlotter」は、プロットを生成する関数です。それは以下に与えられます:

int residualPlotter(double* res, int size)
{

  // Create a table with some points in it
  vtkSmartPointer<vtkTable> table = 
    vtkSmartPointer<vtkTable>::New();

  vtkSmartPointer<vtkFloatArray> arrX = 
    vtkSmartPointer<vtkFloatArray>::New();
  arrX->SetName("X Axis");
  table->AddColumn(arrX);

  vtkSmartPointer<vtkFloatArray> arrF = 
    vtkSmartPointer<vtkFloatArray>::New();
  arrF->SetName("Function");
  table->AddColumn(arrF);

  // Fill in the table with some example values
  table->SetNumberOfRows(size);
  for (int i = 0; i < size; ++i)
  {
    table->SetValue(i, 0, i);
    table->SetValue(i, 1, res[i]);
  }

  // Set up the view
  vtkSmartPointer<vtkContextView> view = 
    vtkSmartPointer<vtkContextView>::New();
  view->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
  view->GetRenderWindow()->SetSize(800,600);

  // Add multiple line plots, setting the colors etc
  vtkSmartPointer<vtkChartXY> chart = 
    vtkSmartPointer<vtkChartXY>::New();
  view->GetScene()->AddItem(chart);
  vtkPlot *line = chart->AddPlot(vtkChart::LINE);
  line->SetInput(table, 0, 1);
  line->SetColor(0, 100, 0, 255);
  line->SetWidth(1.75);


  // Set up an interactor and start
  vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = 
    vtkSmartPointer<vtkRenderWindowInteractor>::New();
  renderWindowInteractor->SetRenderWindow(view->GetRenderWindow());
  renderWindowInteractor->Initialize();
  renderWindowInteractor->Start();


  return EXIT_SUCCESS;

}

したがって、ウィンドウを閉じなくてもコードを続行したいと思います。コードをどのように変更すればよいですか?

皆さん、ありがとうございました。

4

3 に答える 3

4

プロットをレンダリングしたいだけの場合は、別のことを行い、更新して再度レンダリングし、renderWindowInteractor コードをスキップして、単に呼び出すことができます。

view->Render();

これにより、指定したデータでプロットがレンダリングされ、制御がコードに戻ります。これを続けて、更新されたチャートを表示したいときはいつでもビューで Render() を呼び出すことができます。

于 2011-07-04T02:25:52.507 に答える
-1

次のように vtkActor にグリッドを追加しました。

vtkSmartPointer actor_grid = vtkSmartPointer::New();

vtkSmartPointer chart = vtkSmartPointer::New();

renderer->AddActor(actor_grid);

これはインタラクターに関連付けられていないため、うまく機能します。

ありがとう。

于 2012-03-16T03:53:18.460 に答える