VTK修炼之道82:VTK管线机制_信息对象类VTKInformation

本文介绍了VTK管线的工作机制,从Source对象开始,包括Reader和SphereSource等,接着详细讨论了Filter对象及其作用。重点探讨了VTK管线中的信息对象类vtkInformation,涵盖关键信息、管道信息、端口信息、算法信息和请求及数据信息对象,揭示了VTK管线执行的控制方式和连接原理。
摘要由CSDN通过智能技术生成

1.VTK管线机制

VTK中通过管线机制来实现组合各种算法处理数据。每一种算法是一个Filter,多个Filter连接在一起形成VTK管线。每个Filter可以分为两个组成部分:一个是算法对象,继承自vtkAlgrithm,主要负责处理输入的数据和信息;另一个是执行对象,继承自vtkExecute(),负责通知算法对象何时运行以及传递需要处理的数据和信息。Filter类继承自vtkAlgrithm及其子类,实例化时,内部会生成一个默认的Executive()对象,用于管理执行管线。
数据和信息通过端口在Filter中传递,根据数据流的方向,分为输入端口和输出端口,如下图所示:

Filter的输入数据与信息存储在输入端口中。一个Filter可能有0个输入端口(例如 Reader对象);也可能有一个或多个输入端口(例如,vtkGlyph3D类需要两个输入端口,每个输入端口可以建立多个连接)。
一个Filter可能有1个或多个输出端口,每个输出端口对应一个逻辑输出。例如vtkExtractVectorComponents类,从一个三维向量数据中提取每个分量数据,该Filter需要一个输入端口接受向量数据,三个输出端口用于输出三个分量数据,端口号分别为0,1,2。
Filter之间通过端口(Port)建立连接(Connection)。例如一个标准的连接代码如下:
Filter2->SetInputConnection( Filter1->GetOutputPort() );
该句代码将Filter1的输出端口与Filter2的输入端口建立连接,连接中只涉及了一个输入端口和一个输出端口。而VTK中还有许多Filter可能需要多个输入,例如vtkGlyph3D,该类需要两个输入数据并生成一个输出数据。因此这里需要建立两个连接,相应的函数分别为SetInputConnection()和SetSourceConnection(),其中,SetInputConnection()输入的是几何点集数据,对应输入端口0,SetSourceConnection()输入的是Glyph图形数据,对应输入端口1。vtkGlyph3D中输入的两个数据具有不同的意义,因此建立了两个不同的输入端口。另外,对一个Filter的多个输入数据具有相同意义时,则只需要建立一个输入端口,并使用AddInputConnection()来添加新的连接。例如vtkAppendFilter类实现数据的合并,其多个输入数据具有相同意义,而不像vtkGlyph3D的两个输入表示不同的对象,因此其连接建立如下:
apeend = vtkAppendFilter::New();
append->AddInputConnection( foo->GetOutputPort );
append->AddInputConnection( bar->GetOutputPort );
下图显示了Filter之间建立连接的示意图:
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值