Цикл и поток обработки событий vtkRenderWindowInteractor

То, что я пытаюсь сделать в приложении, использующем vtk как для взаимодействия, так и для рендеринга, состоит в том, чтобы иметь две разные части: 1 - Поток с Rendering и vtkRenderWindowInteractor для взаимодействия с мышью. 2 - Поток, вызывающий некоторые функции-модификаторы данных, определенных в потоке VTK.

Из того, что я получил в своих исследованиях, это кажется довольно сложным, и VTK не является поточно-ориентированным. Вот наткнулся на этот пост (http://vtk.1045678.n5.nabble.com/Multi-threaded-VTK-td4514620.html) в списке рассылки VTK, в котором предлагается использовать Qt Signals и Slots. Первый вопрос был бы, это все еще хорошее решение?

Второй вопрос, который все еще связан с этим и с проблемой, с которой я сталкивался ранее, заключается в том, чтоstart()изvtkRenderWindowInteractor блокирует И до сих пор, независимо от того, что я пробовал, все модификации, выполняемые функциями поворота или перевода или масштабирования, не выполняются до тех пор, пока вызывается метод start () (потому что я вхожу в цикл рендеринга). Тогда мой вопрос будет таким: если я буду использовать сигналы и слоты Qt, это помешает мне решить эту проблему?

Вот основной код, который у меня есть для рендеринга и запуска vtkRenderWindowInteractor:

std::string filename = BUNNY;
// Read all the data from the file
vtkSmartPointer<vtkXMLPolyDataReader> reader =vtkSmartPointer<vtkXMLPolyDataReader>::New();
reader->SetFileName(filename.c_str());
reader->Update();
inputPolyData = reader->GetOutput();

cout << "File Found and Loaded : " << filename << endl ;

vtkSmartPointer<vtkTransform> translation = vtkSmartPointer<vtkTransform>::New();
translation->Translate(0.3, -0.05, 0);
transformFilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
//transformFilter->SetInputConnection(reader->GetOutputPort());
transformFilter->SetInputData(inputPolyData);
transformFilter->SetTransform(translation);
//transformFilter->Update();

vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(transformFilter->GetOutputPort());

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

ren->AddActor(mainActor);

vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(win);
vtkInteractorStyleMultiTouchCamera *style =
vtkInteractorStyleMultiTouchCamera::New();
iren->SetInteractorStyle(style);

//Start the event loop
iren->Initialize();
iren->Start();

//defineClipping();
win->PolygonSmoothingOn();
win->Render();
win->Start();

ctxView->Render();

Чтобы я мог подвести итог, спросив: позволит ли мне Qt вызывать функции преобразования, пока поток рендеринга и взаимодействия vtk работает с блокировкойstart() методvtkRenderWindowInteractor? Если нет, я должен изменить свой код и подумать о различных возможностях взаимодействия с моими объектами в VTK?

Ответы на вопрос(1)

Ваш ответ на вопрос