2017-02-27 102 views
-1

我是VTK的新手。我试图在我的macbook上运行下面的代码,但是窗口未能弹出。似乎它意外退出。有人能告诉我最新的原因吗?C++ VTK渲染窗口无法在macOS上工作

TIA

int main(int argc, const char * argv[]) { 


//cylinder 
vtkSphereSource *sphere = vtkSphereSource::New(); 
sphere->SetPhiResolution(16); 
sphere->SetThetaResolution(16); 

//Shrink 
vtkShrinkFilter *shrink = vtkShrinkFilter::New(); 
shrink->SetInputConnection(sphere->GetOutputPort()); 
shrink->SetShrinkFactor(0.9); 

//Elevation Filter 
vtkElevationFilter *colorIt = vtkElevationFilter::New(); 
colorIt->SetInputConnection(shrink->GetOutputPort()); 
colorIt->SetLowPoint(0,0,-0.5); 
colorIt->SetHighPoint(0,0,0.5); 


vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New(); 
sphereMapper->SetInputConnection(colorIt->GetOutputPort());  


vtkActor *sphereActor = vtkActor::New(); 
sphereActor->SetMapper(sphereMapper); 

vtkRenderer *ren1 = vtkRenderer::New(); 
ren1->AddActor(sphereActor); 
ren1->SetBackground(0.1,0.2,0.4); 


vtkRenderWindow *renWin = vtkRenderWindow::New(); 
renWin->AddRenderer(ren1); 
renWin->SetSize(300,300); 


renWin->Render(); 
shrink->SetInputConnection(colorIt->GetOutputPort()); 
renWin->Render(); 


return 0; 

}

+0

你是否使用调试器来查看代码,看看问题出在哪里?你是否参考了文档以确保你做的一切正确? –

+0

什么队长Obvlious说+这个问题的标题是非常不具描述性和误导性的 - 这个问题几乎肯定与macOS(或者vtk的渲染窗口)无关。考虑改变它。 – tomj

回答

0

什么是最后两行的目的是什么?

shrink->SetInputConnection(colorIt->GetOutputPort()); 
renWin->Render(); 

这会创建过滤器的循环连接:sphere-> shrink-> colorIt - > ....(mapper,actor) - >再次收缩。你想缩小两次吗?那么使用更高的收缩系数就更简单了。或者你想要两个不同的领域?比你必须为它们创建两个单独的对象。

此外,vtkShrinkFilter的输出是vtkUnstructuredGrid,而不是vtkPolyData,因此您必须使用vtkDataSetMapper而不是vtkPolyDataMapper。当我执行此更改时,您的代码适用于我,并删除第二个shrink-> SetInputConnection行。