vtk管線入門1

vtkInformationvtkInformationVector

vtkInformationvtkInformationVector實際是maps存儲着vtk管線中的數據。
vtkInformationVector相當於vtkInformation數組。

import vtk
info = vtk.vtkInformation()
info.Set(vtk.vtkStreamingDemandDrivenPipeline.UPDATE_PIECE_NUMBER(), 1)
 
print vtk.vtkStreamingDemandDrivenPipeline.UPDATE_PIECE_NUMBER()
print (info)

輸出:

vtkInformationIntegerKey (0x7fe688c8fa50)
  Reference Count: 1
 
vtkInformation (0x7fe688e4ff80)
  Debug: Off
  Modified Time: 66
  Reference Count: 1
  Registered Events: (none)
  UPDATE_PIECE_NUMBER: 1

使用vtkInformationvtkInformationVector保存整型數值。

import vtk
from vtk.util import keys
# keys.IntegerKey 保存整型
# keys.ObjectBaseKey 保存vtk.vtkObject()
key = keys.MakeKey(keys.IntegerKey, "another key", "some class")
 
iv = vtk.vtkInformationVector()
 
i1 = vtk.vtkInformation()
i1.Set(key, 10)
iv.Append(i1)
 
i2 = vtk.vtkInformation()
i2.Set(key, 20)
iv.Append(i2)
 
print iv
 
for i in range(2):
    print iv.GetInformationObject(i)

輸出:

vtkInformationVector (0x7ff513e40f10)
  Debug: Off
  Modified Time: 56
  Reference Count: 1
  Registered Events: (none)
  Number of Information Objects: 2
  Information Objects:
    vtkInformation(0x7ff513d33c10):
      Debug: Off
      Modified Time: 60
      Reference Count: 2
      Registered Events: (none)
      another key: 10
    vtkInformation(0x7ff513e42230):
      Debug: Off
      Modified Time: 63
      Reference Count: 2
      Registered Events: (none)
      another key: 20
 
 
vtkInformation (0x7ff513d33c10)
  Debug: Off
  Modified Time: 60
  Reference Count: 2
  Registered Events: (none)
  another key: 10
 
 
vtkInformation (0x7ff513e42230)
  Debug: Off
  Modified Time: 63
  Reference Count: 2
  Registered Events: (none)
  another key: 20

vtk管線的連接

如下圖所示,3 sources (s0, s1 and s2) and 3 filters (f0, f1 and f2)。在這裏插入圖片描述

s0 = Source()
s1 = Source()
s2 = Source()
 
f0 = Filter0()
f0.AddInputConnection(0, s0.GetOutputPort())
f0.AddInputConnection(0, s1.GetOutputPort())
f0.SetInputConnection(1, s2.GetOutputPort())
 
f1 = Filter1()
f1.SetInputConnection(f0.GetOutputPort(0))
 
f2 = Filter1()
f2.SetInputConnection(f0.GetOutputPort(1))

f1.Update() 
f2.Update()
import vtk
from vtk.util.vtkAlgorithm import VTKPythonAlgorithmBase
 
class Source(VTKPythonAlgorithmBase):
    def __init__(self):
        VTKPythonAlgorithmBase.__init__(self,
            nInputPorts=0,
            nOutputPorts=1, outputType='vtkPolyData')
 
    def RequestData(self, request, inInfo, outInfo):
        info = outInfo.GetInformationObject(0)
        output = vtk.vtkPolyData.GetData(info)
        print (info)
        return 1

class Filter0(VTKPythonAlgorithmBase):
    def __init__(self):
        VTKPythonAlgorithmBase.__init__(self,
            nInputPorts=2, inputType='vtkPolyData',
            nOutputPorts=2, outputType='vtkPolyData')
 
    def FillInputPortInformation(self, port, info):
        if port == 0:
            info.Set(vtk.vtkAlgorithm.INPUT_IS_REPEATABLE(), 1)
        return 1
 
    def RequestData(self, request, inInfo, outInfo):
        print (inInfo)
        print (inInfo[0], inInfo[1])
        info = inInfo[0].GetInformationObject(0)
        input = vtk.vtkPolyData.GetData(info)
        info = outInfo.GetInformationObject(0)
        output = vtk.vtkPolyData.GetData(info)
        return 1

class Filter1(VTKPythonAlgorithmBase):
    def __init__(self):
        VTKPythonAlgorithmBase.__init__(self,
            nInputPorts=1, inputType='vtkPolyData',
            nOutputPorts=1, outputType='vtkPolyData')
 
    def RequestData(self, request, inInfo, outInfo):
        info = inInfo[0].GetInformationObject(0)
        input = vtk.vtkPolyData.GetData(info)
        info = outInfo.GetInformationObject(0)
        output = vtk.vtkPolyData.GetData(info)
        return 1

輸出打印:

vtkInformation (0000017D5487FD90)
  Debug: Off
  Modified Time: 624
  Reference Count: 3
  Registered Events: (none)
  CONSUMERS: vtkCompositeDataPipeline(0000017D54569670) port 0
  PRODUCER: vtkCompositeDataPipeline(0000017D54568CF0) port 0 
  DATA_OBJECT: vtkPolyData(0000017D51CBDC30)
  UPDATE_PIECE_NUMBER: 0
  UPDATE_NUMBER_OF_PIECES: 1
  UPDATE_NUMBER_OF_GHOST_LEVELS: 0


vtkInformation (0000017D54880A90)
  Debug: Off
  Modified Time: 626
  Reference Count: 3
  Registered Events: (none)
  CONSUMERS: vtkCompositeDataPipeline(0000017D54569670) port 0
  PRODUCER: vtkCompositeDataPipeline(0000017D54568700) port 0 
  DATA_OBJECT: vtkPolyData(0000017D53D82AE0)
  UPDATE_PIECE_NUMBER: 0
  UPDATE_NUMBER_OF_PIECES: 1
  UPDATE_NUMBER_OF_GHOST_LEVELS: 0


vtkInformation (0000017D548A9C70)
  Debug: Off
  Modified Time: 628
  Reference Count: 3
  Registered Events: (none)
  CONSUMERS: vtkCompositeDataPipeline(0000017D54569670) port 1
  PRODUCER: vtkCompositeDataPipeline(0000017D54569B30) port 0
  DATA_OBJECT: vtkPolyData(0000017D548982C0)
  UPDATE_PIECE_NUMBER: 0
  UPDATE_NUMBER_OF_PIECES: 1
  UPDATE_NUMBER_OF_GHOST_LEVELS: 0


((vtkmodules.vtkCommonCore.vtkInformationVector)0000017D55B6D408, (vtkmodules.vtkCommonCore.vtkInformationVector)0000017D55B6D4C8)
vtkInformationVector (0000017D54881310)
  Debug: Off
  Modified Time: 137
  Reference Count: 2
  Registered Events: (none)
  Number of Information Objects: 2
  Information Objects:
    vtkInformation(0000017D5487FD90):
      Debug: Off
      Modified Time: 676
      Reference Count: 2
      Registered Events: (none)
      CONSUMERS: vtkCompositeDataPipeline(0000017D54569670) port 0
      PRODUCER: vtkCompositeDataPipeline(0000017D54568CF0) port 0
      DATA_OBJECT: vtkPolyData(0000017D51CBDC30)
      UPDATE_PIECE_NUMBER: 0
      UPDATE_NUMBER_OF_PIECES: 1
      UPDATE_NUMBER_OF_GHOST_LEVELS: 0
    vtkInformation(0000017D54880A90):
      Debug: Off
      Modified Time: 710
      Reference Count: 2
      Registered Events: (none)
      CONSUMERS: vtkCompositeDataPipeline(0000017D54569670) port 0
      PRODUCER: vtkCompositeDataPipeline(0000017D54568700) port 0
      DATA_OBJECT: vtkPolyData(0000017D53D82AE0)
      UPDATE_PIECE_NUMBER: 0
      UPDATE_NUMBER_OF_PIECES: 1
      UPDATE_NUMBER_OF_GHOST_LEVELS: 0

 vtkInformationVector (0000017D54880990)
  Debug: Off
  Modified Time: 138
  Reference Count: 2
  Registered Events: (none)
  Number of Information Objects: 1
  Information Objects:
    vtkInformation(0000017D548A9C70):
      Debug: Off
      Modified Time: 744
      Reference Count: 2
      Registered Events: (none)
      CONSUMERS: vtkCompositeDataPipeline(0000017D54569670) port 1
      PRODUCER: vtkCompositeDataPipeline(0000017D54569B30) port 0
      DATA_OBJECT: vtkPolyData(0000017D548982C0)
      UPDATE_PIECE_NUMBER: 0
      UPDATE_NUMBER_OF_PIECES: 1
      UPDATE_NUMBER_OF_GHOST_LEVELS: 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章