如何编写ProgrammableSource过滤器以在ParaView中将numpy数组显示为vtkImageData?

时间:2017-03-17 12:49:05

标签: python paraview

因此,我不想将我们拥有的每个数据存储在另一种格式中以使其可由ParaView显示,而是希望使用ParaView提供的python接口直接从我们当前的文件格式加载数据并显示它。

为了测试这个,我想创建一个简单的ProgrammableSource过滤器,输出一个vtkImageData并用一些数据填充它。

我遇到了三个问题:

  • 首先,不显示数据(甚至不作为轮廓表示)
  • 我找不到设置值而不循环的方法
  • 我找不到可以帮助我的好的在线资源

这是我到目前为止所拥有的。没有来自ParaView的投诉,也没有任何回报。

import numpy as np
import vtk
import vtk.util.numpy_support as ns

img = self.GetImageDataOutput()
img.SetDimensions(3,4,5)
img.AllocateScalars(vtk.VTK_DOUBLE, 1)


dims = img.GetDimensions()
img.SetOrigin(0,0,0)
img.SetSpacing(0.55, 0.55, 0.55)

for z in range(dims[2]):
  for y in range(dims[1]):
    for x in range(dims[0]):
      img.SetScalarComponentFromDouble(x,y,z,0, 1.0*x*y*z)

注意:如果直接使用ParaView的python shell而不是ProgrammableSource更容易,这也没关系。

1 个答案:

答案 0 :(得分:4)

为了使用可编程源定义vtkImageData输出,还必须在流水线执行的RequestInformation阶段设置一些信息。将以下内容插入Script (RequestInformation)属性:

from paraview import util

op = self.GetOutput()
util.SetOutputWholeExtent(self, [0, 2, 0, 3, 0, 4])

此信息改编自http://www.paraview.org/Wiki/Python_Programmable_Filter提供的信息。