4

我知道我可以使用计算器过滤器对数组进行操作,但我想执行一些更复杂的计算。我设法在 Paraview python shell 中做到了,但现在缺少的步骤是再次返回查看器(或将新的 polydata 保存到文件)。这是我到目前为止所拥有的:

polydata = servermanager.Fetch(FindSource("mydataalreadyopeninparaview"))
region_size = paraview.vtk.vtkIntArray()
region_size.SetNumberOfComponents(0)
region_size.SetName("regionsize")
for i in range(polydata .GetNumberOfPoints()):
   region_size.InsertNextValue(somecomputedvalue)
polydata.GetPointData().AddArray(region_size)

如何在 paraview 管道中“导入”我新创建的数据?

4

2 回答 2

3

更好的方法是使用可编程过滤器将数组添加到您的输入数据集中。在 ParaView 4.1 中,可以将以下脚本添加到Programmager Filter的属性面板上的脚本中

polydata = output
array = vtk.vtkIntArray()
array.SetNumberOfComponents(0)
array.SetName("regionsize")
for i in range(polydata .GetNumberOfPoints()):
    array.InsertNextValue(somecomputedvalue)
polydata.GetPointData().AddArray(array);
于 2014-08-21T04:20:46.930 回答
0

对流水线效果更好的方法是使用可编程滤波器。(相关:Paraview Python -- 对 servermanager.Fetch() 的反向操作?

将新的 polydata 保存到文件中:(在导入所有 ctk 模块时,感谢http://markmail.org/message/4kp7cxl2ani25cak发现)

from paraview.vtk.vtkIOLegacy import *
writer = vtkPolyDataWriter()
.....

一种更“粗略”的方法是使用 numpy.savetxt 将数据导出为 csv,然后读取 csv 并应用 TableToPoints 过滤器或 Python 脚本。

当客户端和服务器共享相同的内存空间(与内置服务器)时,可以使用 TrivialProducer 和 GetClientSideObject ,如此处所述http://public.kitware.com/pipermail/paraview/2011-February/020120.html,但是我没试过

于 2014-06-17T21:05:01.957 回答