VTK中GetOutput()和GetOutputPort()区别

VTK的数据流采用流水线(pipeline)作业方式。但是在接口的时候有两种数据格式一种是使用GetOutput(),另外一种是使用GetOutputPort()

这两种输出有什么分别呢?
**举例说明:**
vtkDICOMImageReader对象拥有方法GetOutput()和GetOutputPort(),它的继承关系如下图。继承了vtkImageAlgorithm。
![Inheritance graph](http://codeplanet-wordpress.stor.sinaapp.com/uploads/2014/01/wpid-40fa07a338bda1eba9fdde5b65b38eb2_classvtkDICOMImageReader__inherit__graph1.png)
vtkAlgorithm中GetOutput()如下定义:
vtkImageData* GetOutput();
可知输出格式是vtkImageData类型;
另外GetOutputPort()在类vtkImageAlgorithm中定义如下:
vtkAlgorithmOutput* GetOutputPort()
{ **return** **this**->GetOutputPort(0);
}
可知输出格式是vtkAlgorithmOutput类型
vtkAlgorithm和vtkImageAlgorithm类的关系如下:
![Collaboration graph](http://codeplanet-wordpress.stor.sinaapp.com/uploads/2014/01/wpid-40fa07a338bda1eba9fdde5b65b38eb2_classvtkImageAlgorithm__coll__graph1.png)
vtkImageAlgorithm是继承了vtkAlgorithm的;
再看看vtkImageData的解释:
vtkImageData是vtkDataSet具体实现一个数据对象。vtkImageData可以表示一个拓扑或者几何点阵的几何数据结构。
![Inheritance graph](http://codeplanet-wordpress.stor.sinaapp.com/uploads/2014/01/wpid-40fa07a338bda1eba9fdde5b65b38eb2_classvtkImageData__inherit__graph1.png)
看看vtkAlgorithmOutput的解释:
vtkAlgorithmOutput是由vtkAlgorithm的GetOutputPort方法返回的是一个代理对象。经常被传递给另一个vtkAlgorithm类的SetInputConnection或者AddInputConnection或者RemoveInputConnection方法,以建立通道连接。
![Inheritance graph](http://codeplanet-wordpress.stor.sinaapp.com/uploads/2014/01/wpid-40fa07a338bda1eba9fdde5b65b38eb2_classvtkAlgorithmOutput__inherit__graph1.png)
参考】:
[1][http://www.vtk.org/doc/release/5.10/html/classvtkImageData.html](http://www.vtk.org/doc/release/5.10/html/classvtkImageData.html)
[2][http://www.vtk.org/doc/release/5.10/html/classvtkAlgorithm.html#a278ce83f371e6a398cf46f4600108d3e](http://www.vtk.org/doc/release/5.10/html/classvtkAlgorithm.html#a278ce83f371e6a398cf46f4600108d3e)
[3][http://www.vtk.org/doc/release/5.10/html/classvtkImageAlgorithm.html](http://www.vtk.org/doc/release/5.10/html/classvtkImageAlgorithm.html)
[4][http://www.vtk.org/doc/release/5.10/html/classvtkDataObject.html](http://www.vtk.org/doc/release/5.10/html/classvtkDataObject.html)
[5][http://www.vtk.org/doc/release/5.10/html/classvtkAlgorithmOutput.html](http://www.vtk.org/doc/release/5.10/html/classvtkAlgorithmOutput.html)
[6][http://www.vislab.cn/bbs/archiver/?tid-2656.html](http://www.vislab.cn/bbs/archiver/?tid-2656.html)
[7][http://vtk.1045678.n5.nabble.com/difference-between-GetOutputPort-and-GetOutput-td1250681.html](http://vtk.1045678.n5.nabble.com/difference-between-GetOutputPort-and-GetOutput-td1250681.html)
[8][http://www.vislab.cn/bbs/archiver/?tid-97.html](http://www.vislab.cn/bbs/archiver/?tid-97.html)
坚持原创技术分享,您的支持将鼓励我继续创作!