vtkRenderWindowInteractor Ereignisschleife und Threading

Was ich in einer Anwendung versuche, in der vtk sowohl für die Interaktion als auch für das Rendern verwendet wird, besteht aus zwei Teilen: 1 - Ein Thread mit Rendering und vtkRenderWindowInteractor für die Interaktion mit der Maus. 2 - Ein Thread, der einige Modifikatorfunktionen der im VTK-Thread definierten Daten aufruft.

Von dem, was ich bisher in meiner Forschung erfahren habe, scheint es ziemlich kompliziert zu sein und VTK ist nicht threadsicher. Jetzt bin ich auf diesen Beitrag gestoßen http: //vtk.1045678.n5.nabble.com/Multi-threaded-VTK-td4514620.htm) in der VTK-Mailingliste, die die Verwendung von Qt-Signalen und -Slots vorschlägt. Eine erste Frage wäre, ob das noch die gute Lösung ist?

Eine zweite Frage, die immer noch damit und mit einem Problem verbunden ist, auf das ich zuvor gestoßen bin, ist, dass dasstart()desvtkRenderWindowInteractor blockiert. Und bis jetzt, egal was ich ausprobiert habe, werden alle durch Rotation oder Translation oder Skalierung vorgenommenen Änderungen nicht durchgeführt, solange die start () -Methode aufgerufen wird (weil ich eine Rendering-Schleife betrete). Meine Frage wäre dann: Wenn ich Qt-Signale und -Slots verwende, wird mich das von diesem Problem abhalten?

Hier ist der grundlegende Code, den ich bisher zum Rendern und Starten des vtkRenderWindowInteractor habe:

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();

So dass ich es zusammenfassen könnte, indem ich frage: Erlaubt mir Qt, Transformationsfunktionen aufzurufen, während der Rendering- und Interaktionsthread von vtk mit der Blockierung läuftstart() Methode vonvtkRenderWindowInteractor? Wenn nicht, sollte ich meinen Code ändern und über verschiedene Möglichkeiten für die Interaktion mit meinen Objekten in VTK nachdenken?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage