VTK中GetOutputPort()和GetOutput()的区别

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算法的输入

相关推荐

  1. VTKGetOutputPort()GetOutput()区别

    2024-03-18 18:06:02       47 阅读
  2. Mybatis${}#{}区别

    2024-03-18 18:06:02       40 阅读
  3. VTK----VTK事件机制

    2024-03-18 18:06:02       38 阅读
  4. Shell ${} $() 区别

    2024-03-18 18:06:02       47 阅读
  5. Golangjsonjsoniter区别

    2024-03-18 18:06:02       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 18:06:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 18:06:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 18:06:02       82 阅读
  4. Python语言-面向对象

    2024-03-18 18:06:02       91 阅读

热门阅读

  1. 【Educoder数据挖掘实训】用Cosine计算相似度

    2024-03-18 18:06:02       37 阅读
  2. 蓝桥杯刷题--python-13-并查集

    2024-03-18 18:06:02       43 阅读
  3. 手机怎么弄不同的ip地址

    2024-03-18 18:06:02       46 阅读
  4. C++——基础复习——模拟动态数组容器

    2024-03-18 18:06:02       37 阅读