Подключите потоковые точки, используя VTK

У меня есть функция, которая вызывается в цикле, и на каждом проходе она дает (x, y, z) трехмерной точки. Я пытаюсь соединить эти точки в режиме реального времени с помощью VTK, но не могу обновить окно рендеринга после каждого кадра. Я вижу кучу строк, если я выйду из цикла, хотя.

По сути, это то, что я делаю:

// Create a vtkPoints object to store the points in it
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();

vtkSmartPointer<vtkPolyLine> polyLine = vtkSmartPointer<vtkPolyLine>::New();

// Create a cell array to store the lines in
vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();

// Create a polydata to store everything in
vtkSmartPointer<vtkPolyData> linesPolyData = vtkSmartPointer<vtkPolyData>::New();

// Setup actor and mapper
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();

vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

// Setup render window, renderer, and interactor
vtkSmartPointer<vtkRenderer> renderer =  vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =       vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =   vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);

renderer->AddActor(actor);
renderWindow->Render();
renderer->Render();

int numpoints = 0;

while(some_condition)
{
call_function(&x,&y,&z);
double point[3] = {0.0, 0.0, 0.0};
point[0] = (float)x;
point[1] = (float)y;
point[2] = (float)z;

numpoints++;
points->InsertNextPoint(point);

polyLine->GetPointIds()->SetNumberOfIds(numpoints);
for(unsigned int i = 0; i < num_points; i++)
{
polyLine->GetPointIds()->SetId(i,i);
}

lines->InsertNextCell(polyLine);

// Add the points to the dataset
linesPolyData->SetPoints(points);

// Add the lines to the dataset
linesPolyData->SetLines(lines);

#if VTK_MAJOR_VERSION <= 5
mapper->SetInput(linesPolyData);
#else
mapper->SetInputData(linesPolyData);
#endif

linesPolyData->Modified();
linesPolyData->Update();

renderWindow->Render();
renderer->Render();

renderWindowInteractor->Enable();

check_loop_exit_condition();
}

Если я сделаю renderer->Render() вне цикла я получаю все строки (или, по крайней мере, я так думаю). Может кто-нибудь выяснить, где я иду не так?

1

Решение

От эти документы, кажется, что вы не должны звонить напрямую

renderer->Render();

Вы должны только позвонить

renderWindow->Render();
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]