Как принудительно выполнить повторный рендеринг после добавления точки в vtkPlot в qvtkWidget?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как принудительно выполнить повторный рендеринг после добавления точки в vtkPlot в qvtkWidget?

Сообщение Anonymous »

В QT у меня есть qvtkWidget, в котором я строю график.

Я использую две функции:

Следующая функция инициализирует график двумя точками (0,0) и (0,1):

Код: Выделить всё

bool VTKPlotter::initPlot(){

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

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

//Set up chart:
vtkSmartPointer chart = vtkSmartPointer::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, view — это vtkSmartPointer, а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();
Как заставить график обновиться?

Подробнее здесь: https://stackoverflow.com/questions/490 ... qvtkwidget
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»