我知道我可以使用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管道中我新创建的数据?
答案 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所述,但我还没有尝试过