首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在qvtkWidget中给vtkPlot添加point后,如何强制重新渲染?

在qvtkWidget中给vtkPlot添加point后,如何强制重新渲染?
EN

Stack Overflow用户
提问于 2018-02-28 16:38:33
回答 1查看 232关注 0票数 0

在QT中,我有一个qvtkWidget,我可以在其中绘制图形。

我使用两个函数:

以下函数使用两个点(0,0)和(0,1)初始化绘图:

代码语言:javascript
复制
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应用程序中单击某个按钮时,将调用该函数:

代码语言:javascript
复制
void VTKPlotter::addValue(double v){

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

问题是,当我调用上面的函数时,绘图不会立即更新。如果我放大和缩小并平移绘图,它最终会更新,我可以看到新的点。

我尝试过以下方法:

代码语言:javascript
复制
view->ResetCamera();
view->Update();
view->Render();
view->GetRenderWindow()->Render();
view->GetRenderer()->ResetCamera();
view->ResetCameraClippingRange();
plot_qvtkWidget->update();

如何强制更新我的绘图?

EN

回答 1

Stack Overflow用户

发布于 2019-12-16 14:25:58

一种可能的解决方案是通过随后的适当调用chart->AddPlot(...)来调用chart->ClearPlots()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49025203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档