在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;
}其中plotTable是vtkSmartPointer<vtkTable>,view是vtkSmartPointer<vtkContextView>,plot_qvtkWidget是QVTKWidget*。
当调用上面的函数时,图立即显示在小部件中。
然后我有这个函数,当我在我的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();如何强制更新我的绘图?
发布于 2019-12-16 14:25:58
一种可能的解决方案是通过随后的适当调用chart->AddPlot(...)来调用chart->ClearPlots()
https://stackoverflow.com/questions/49025203
复制相似问题