如何在Paraview中向多元数据添加自定义数组?
我知道可以使用计算器过滤器对数组进行操作,但我想进行一些更复杂的计算。我已经在Paraview的Python命令行中完成了这些计算,但现在缺少的步骤是如何将结果重新导入到查看器中(或者把新的多边形数据保存到文件中)。
这是我目前的进展:
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的处理流程中“导入”我新创建的数据呢?
2 个回答
0
在处理数据管道时,使用可编程过滤器的方法效果更好。 (相关内容可以参考:Paraview Python -- 反向操作 servermanager.Fetch()?)
要把新的多边形数据保存到文件中: (这个方法是通过 http://markmail.org/message/4kp7cxl2ani25cak 发现的,当导入所有 ctk 模块时)
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,但我还没有尝试过这个方法。
4
更好的方法是使用可编程过滤器将数组添加到你的输入数据集中。在ParaView 4.1中,你可以在属性面板的可编程过滤器的脚本中添加以下代码:
polydata = output
array = vtk.vtkIntArray()
array.SetNumberOfComponents(0)
array.SetName("regionsize")
for i in range(polydata .GetNumberOfPoints()):
array.InsertNextValue(somecomputedvalue)
polydata.GetPointData().AddArray(array);