我试图在不使用imageviewer的情况下阅读dicom图像,我遇到了VtkGdmReader ..当我试图执行它时,它给了我一个错误:
code => vtkGdmReader示例
错误C2039:'SetInput':不是'vtkTexture'的成员
错误C2039:'SetInput':不是'vtkPolyDataMapper'的成员
请任何人告诉我为什么我面临这个问题,这个错误是否与vtk版本有关?如果是的话那我该怎么办呢?
请帮我解决问题..
答案 0 :(得分:1)
如评论中所述,此错误与VTK版本有关。 SetInput()
was removed in VTK 6。
您可以使用VTK 5或更新代码。如果您决定对其进行更新,则可以通过将SetInput()
替换为SetInputData()
或SetInputConnection()
并进行一些修改来解决此错误。如果希望过滤器通过管道,则应使用SetInputConnection()
。
作为修复您提到的错误的示例,您应该在您提供的代码中替换以下行:
VTKtexture->SetInput(ima);
和
VTKplaneMapper->SetInput(VTKplane->GetOutput());
于:
VTKtexture->SetInputConnection(reader->GetOutputPort());
和
VTKplaneMapper->SetInputConnection(VTKplane->GetOutputPort());
在第二个修改(VTKplaneMapper
)中,请注意我们刚刚将GetOutput()
更改为GetOutputPort()
,而在第一个修改(VTKtexture
)中我们完全更改了传递的参数到SetInputConnection()
。之所以发生这种情况,是因为数据对象(例如ima
)不再依赖于管道对象(例如算法和管理人员)。在这种情况下,我们将生成该数据对象的算法作为参数 - 如果您查找它,您可以看到行vtkImageData* ima = reader->GetOutput();
,您只需要将GetOutput()
替换为GetOutputPort()
正如我们在第二次修改中所做的那样。
我建议您查看VTK Wiki的VTK 6 Migration pages(和guide),了解有关此错误以及您可能遇到的其他错误的更多信息。