我试图在不使用 imageviewer 的情况下读取 dicom 图像,我遇到了 VtkGdmReader .. 当我尝试执行它时,它给了我一个错误:
代码 => vtkGdmReader示例
错误 C2039:“SetInput”:不是“vtkTexture”的成员
错误 C2039:“SetInput”:不是“vtkPolyDataMapper”的成员
请谁能告诉我为什么我会遇到这个问题,这个错误与 vtk 版本有关吗?如果是这样,那我该怎么办?
请帮我解决问题..
我试图在不使用 imageviewer 的情况下读取 dicom 图像,我遇到了 VtkGdmReader .. 当我尝试执行它时,它给了我一个错误:
代码 => vtkGdmReader示例
错误 C2039:“SetInput”:不是“vtkTexture”的成员
错误 C2039:“SetInput”:不是“vtkPolyDataMapper”的成员
请谁能告诉我为什么我会遇到这个问题,这个错误与 vtk 版本有关吗?如果是这样,那我该怎么办?
请帮我解决问题..
正如评论中所说,此错误与VTK版本有关。SetInput()
在 VTK 6 中被删除。
您可以在 VTK 5 中工作或更新代码。SetInput()
如果您决定对其进行更新,则可以通过替换或SetInputData()
进行SetInputConnection()
一些修改来修复此错误。SetInputConnection()
如果您希望过滤器通过管道,您应该使用。
作为修复您提到的错误的示例,您应该替换您提供的代码中的以下行:
VTKtexture->SetInput(ima);
和
VTKplaneMapper->SetInput(VTKplane->GetOutput());
to:
VTKtexture->SetInputConnection(reader->GetOutputPort());
和
VTKplaneMapper->SetInputConnection(VTKplane->GetOutputPort());
在第二个修改 ( VTKplaneMapper
) 中,请注意我们只是更改GetOutput()
为GetOutputPort()
,而在第一个修改 ( ) 中,VTKtexture
我们完全更改了传递给 的参数SetInputConnection()
。发生这种情况是因为数据对象(例如ima
)不再依赖于管道对象(例如算法和执行程序)。在这种情况下,我们将生成该数据对象的算法作为参数 - 如果您查找它,您可以看到行vtkImageData* ima = reader->GetOutput();
,您只需像我们在第二次修改中所做的那样替换GetOutput()
为。GetOutputPort()
我建议查看 VTK Wiki 的VTK 6 迁移页面(和指南)以获取有关此错误和您可能遇到的其他错误的更多信息。