如何在paraview中将自定义数组添加到polydata?

时间:2014-06-14 13:06:55

标签: python paraview

我知道我可以使用Calculator过滤器对数组进行操作,但我想执行一些更复杂的计算。我设法在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管道中我新创建的数据?

2 个答案:

答案 0 :(得分:3)

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

polydata = output
array = vtk.vtkIntArray()
array.SetNumberOfComponents(0)
array.SetName("regionsize")
for i in range(polydata .GetNumberOfPoints()):
    array.InsertNextValue(somecomputedvalue)
polydata.GetPointData().AddArray(array);

答案 1 :(得分:0)

与管道配合使用的方法是使用可编程滤波器。 (相关:Paraview Python -- Reverse operation to 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所述,但我还没有尝试过