2013-11-26 6 views
-1

Я использую простой код для рендеринга сетки в цикле. На практике на каждой итерации я изменяю точку обзора и сохраняю изображение рендеринга. Я сократил это небольшой компилируемый пример ниже:Как закрыть VTKRenderWindow автоматически

int main(int argc, char **argv) { 
vtkSmartPointer<vtkPLYReader> fileReader = vtkSmartPointer<vtkPLYReader>::New(); 

fileReader->SetFileName("benchvise_mesh.ply"); 
fileReader->Update(); 
vtkSmartPointer<vtkPolyData> polydata_ = fileReader->GetOutput(); 

vtkSmartPointer<vtkRenderWindow> render_win = vtkSmartPointer<vtkRenderWindow>::New(); 
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); 
vtkSmartPointer<vtkActor> actor_view = vtkSmartPointer<vtkActor>::New(); 
vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New(); 
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); 

for (int i = 0; i < 100; i++) { 

    mapper->SetInput(polydata_); 
    mapper->Update(); 


    cam->SetViewAngle(58); 
    cam->SetClippingRange(0.00001, 10000); 
    //Invert view Up 
    cam->SetViewUp(0, -1, 0); 
    cam->SetPosition(0, 0, -500); 
    cam->SetFocalPoint(0, 0, 1); 
    cam->Modified(); 

    actor_view->SetMapper(mapper); 
    actor_view->Modified(); 

    renderer->SetActiveCamera(cam); 
    renderer->AddActor(actor_view); 
    renderer->SetBackground(1.0, 1.0, 1.0); 
    renderer->Modified(); 


    render_win->AddRenderer(renderer); 
    render_win->SetSize(640, 480); 
    //white 
    render_win->Modified(); 


    render_win->Start(); 
    render_win->Render(); 
    render_win->Finalize(); 

} 

}

Проблема заключается в том, когда я запускаю появляется это много значков vtkWindow на моей панели задач и в конечном итоге привести компьютер к остановке. Кажется, что на каждом цикле окно рендеринга остается в живых. Однако, когда я нажимаю на значок, окно фактически не появляется.

Есть что-то, что мне не хватает, что очистят окна рендеринга на каждой итерации.

BTW, я бегу под Ubntu с ВТК 5.8

ответ

0

Вы делаете «неправильно» есть несколько вещей. Удалите все неправильные петли, самое главное render_win->Start(), инициализируйте при начале и просто вызовите render_win->Render() в каждом цикле после того, как были сделаны признательные изменения в просмотре (звонки на картотеки или камеры SetPosition и аналогичные эффекты влияют на ваш вид без повторного подключения, повторное соединение вызывает вызов Add????() - методы). Modified() звонки должны быть неявными и не требуются вручную.

Смежные вопросы