SetInput()函数被彻底删除了,只剩下SetInputConnection()和SetInputData()函数:
1、GetOutputPort():
GetOutputPort() 返回的是上一个算法管道对象输出(output port)的引用。它是用于连接到当前算法输入端口的对象,通常在构建VTK管道时使用。
将上一个算法的输出连接到当前算法的输入时,可以使用 GetOutputPort() 获取上一个算法的输出端口,然后将其连接到当前算法的输入端口:
被用于SetInputConnection()的reader是算法对象的名字,不是数据对象的名字:
//读入Structurered_Points类型的vtk文件vtkSmartPointer<vtkStructuredPointsReader> reader = vtkSmartPointer<vtkStructuredPointsReader>::New();reader->SetFileName("data/head.vtk");//路径//体绘制方法提取等值面,marchingCubes算法的输出作为mapper算法的输入vtkSmartPointer<vtkMarchingCubes> marchingCubes = vtkSmartPointer<vtkMarchingCubes>::New();marchingCubes->SetInputConnection(reader->GetOutputPort());marchingCubes->SetValue(0,1500); //等值面应该是关心的解剖结构//将生成的等值面数据进行Mapper,mapper算法接收marchingCubes算法的输出vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(marchingCubes->GetOutputPort());//送入到数据映射器中处理
作为管道对象,与SetInputConnection()一同使用
vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
vtkSmartPointer<vtkPolyDataMapper> mapper2 = vtkSmartPointer<vtkPolyDataMapper>::New();mapper2->SetInputConnection(reader->GetOutputPort());//获取reader算法管道本身的输出作为mapper2算法管道的输入reader->SetFileName("xxxxx.STL");
mapper1->Update();
这里也是,reader是作为算法对象名被SetInputConnection所连接的。
//读取JPG序列图像vtkSmartPointer <vtkJPEGReader> reader = vtkSmartPointer <vtkJPEGReader>::New();reader->SetFileNames(fileArray);//reder是算法管道对象//显示vtkSmartPointer<vtkImageViewer2> viewer = vtkSmartPointer<vtkImageViewer2>::New();viewer->SetInputConnection(reader->GetOutputPort());//reader管道对象作为输入vtkSmartPointer<vtkRenderWindowInteractor> interact =vtkSmartPointer<vtkRenderWindowInteractor>::New();
2、GetOutput():
GetOutput() 返回的是算法的实际输出数据对象。它是一个智能指针,可以使用它来获取算法的输出数据,进行进一步的处理或直接使用。
在不需要将上一个算法的输出连接到当前算法的输入,而是直接操作上一个算法的输出数据时,对这个输出数据本身使用 GetOutput()。
作为SetInputData()接口的的sphereSource是数据对象的名字,不是算法对象的名字。
vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(sphereSource->GetOutput()); // 直接使用GetOutput()
input是作为独立数据对象名,与SetInputData()一同使用:
vtkDataObject* input = inInfo->Get(vtkDataObject::DATA_OBJECT());this->InternalFilter->SetInputData(input);//input是一个独立数据对象,不是算法管道输出结果的引用this->InternalFilter->Update();
output也是数据对象名,不是算法对象名。output是aFilter算法管道对象的输出:
vtkDataObject* output = aFilter->GetOutput();//output是aFilter算法管道输出的结果,但它不是aFilter算法管道输出的引用,而是独立的数据对象aFilter->Update();anotherFilter->SetInputData(output);//SetInputData将独立数据对象output作为anotherFilter算法的输入