簡體   English   中英

將點添加到 qvtkWidget 中的 vtkPlot 后如何強制重新渲染?

[英]How to force re-rendering after adding point to a vtkPlot in a qvtkWidget?

在 QT 中,我有一個qvtkWidget ,我在其中繪制了一個圖表。

我使用兩個功能:

以下函數使用兩個點 (0,0) 和 (0,1) 初始化圖:

bool VTKPlotter::initPlot(){

   // Create a table:
   plotTable = vtkSmartPointer<vtkTable>::New();
   vtkSmartPointer<vtkFloatArray> arrT = vtkSmartPointer<vtkFloatArray>::New();
   vtkSmartPointer<vtkFloatArray> arrUSD = vtkSmartPointer<vtkFloatArray>::New();
   arrT->SetName("Time");
   plotTable->AddColumn(arrT);
   arrUSD->SetName("USD");
   plotTable->AddColumn(arrUSD);

   //Set up the view:
   view = vtkSmartPointer<vtkContextView>::New();
   view->GetRenderer()->SetBackground(0.8, 0.8, 0.8);

   //Set up chart:
   vtkSmartPointer<vtkChartXY> chart = vtkSmartPointer<vtkChartXY>::New();   
   view->GetScene()->AddItem(chart);

   //Set renderer, interactor:
   view->SetInteractor(plot_qvtkWidget->GetInteractor());
   plot_qvtkWidget->SetRenderWindow(view->GetRenderWindow());
   plot_qvtkWidget->show();

   //Add line and initial values:
   vtkPlot *line;
   line = chart->AddPlot(vtkChart::LINE);
   line->SetInputData(plotTable, 0, 1);
   line->SetColor(25, 25, 230, 220);
   line->SetWidth(1.5);

   int numPoints = 2;
   plotTable->SetNumberOfRows(numPoints);

   plotTable->SetValue(0, 0, 0);
   plotTable->SetValue(1, 0, 1);
   plotTable->SetValue(0, 1, 0);
   plotTable->SetValue(1, 1, 1);

   return true;
}

其中plotTablevtkSmartPointer<vtkTable>viewvtkSmartPointer<vtkContextView>並且plot_qvtkWidgetQVTKWidget*

調用上述函數時,繪圖會立即顯示在小部件中。

然后我有這個函數,當我在我的 QT 應用程序中單擊某個按鈕時調用它:

void VTKPlotter::addValue(double v){

   plotTable->InsertNextBlankRow();
   int r = plotTable->GetNumberOfRows() - 1;
   plotTable->SetValue(r, 0, r);
   plotTable->SetValue(r, 1, v);
}

問題是,當我調用上述函數時,繪圖不會立即更新。 如果我放大和縮小並在圖周圍平移,它最終會更新,我可以看到新的點。

我試過這些方法:

view->ResetCamera();
view->Update();
view->Render();
view->GetRenderWindow()->Render();
view->GetRenderer()->ResetCamera();
view->ResetCameraClippingRange();
plot_qvtkWidget->update();

我如何強制我的情節更新?

一種可能的解決方案是調用chart->ClearPlots()並隨后適當調用chart->AddPlot(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM