我是ITK / VTK的新手,在学习过程中,在VTK中,我们如何一次调用多个可视化输出窗口(具有不同功能的分割器屏幕用于不同的输出窗口)。 我尝试使用多个线程实现上述但我无法实现上述期望..
// output window function 1
std::string inputFilename="E:\\DICOM_work\\CE53E85F";
vtkSmartPointer<vtkDICOMImageReader> reader =vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetFileName(inputFilename.c_str());
reader->Update();
// Visualize
vtkSmartPointer<vtkImageViewer2> imageViewer = vtkSmartPointer<vtkImageViewer2>::New();
imageViewer->SetInputConnection(reader->GetOutputPort());
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
imageViewer->SetupInteractor(renderWindowInteractor);
imageViewer->Render();
imageViewer->GetRenderer()->ResetCamera();
imageViewer->Render();
renderWindowInteractor->Start();
}
// output window function 2
void display1(void *)
{
std::string inputFilename="E:\\DICOM_work\\CE53E85Fg2";
vtkSmartPointer<vtkDICOMImageReader> reader1 = vtkSmartPointer<vtkDICOMImageReader>::New();
reader1->SetFileName(inputFilename.c_str());
reader1->Update();
// Visualize
vtkSmartPointer<vtkImageViewer2> imageViewer2 = vtkSmartPointer<vtkImageViewer2>::New();
imageViewer2->SetInputConnection(reader1->GetOutputPort());
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor1 = vtkSmartPointer<vtkRenderWindowInteractor>::New();
imageViewer2->SetupInteractor(renderWindowInteractor1);
imageViewer2->Render();
imageViewer2->GetRenderer()->ResetCamera();
imageViewer2->Render();
renderWindowInteractor1->Start();
}
当我尝试执行它时......代码执行直到...
renderWindowInteractor-&GT;开始();
然后代码退出而不执行另一个函数。请帮忙!
答案 0 :(得分:2)
在VTK官方维基中,有一个example的应用程序可以打开多个vtkRenderWindows。你看过了吗?基本上,该程序创建了一个vtkRenderWindowInteractor的向量:
std::vector<vtkSmartPointer<vtkRenderWindowInteractor> > interactors;
,最后,它在最后一个元素上调用Start()方法:
interactors[3]->Start();
('3'因为它打开4个窗口)。也许你可以将这种逻辑适应你的应用......
正如最后一点,请考虑 - 如果您愿意 - 您还可以拥有single vtkRenderWindow with multiple viewports。