2014-06-14 68 views
2

我知道我可以使用Calculator過濾器對數組進行操作,但我想執行一些更復雜的計算。我設法在Paraview python shell中完成它,但現在缺少的步驟是再次返回查看器(或將新的polydata保存到文件中)。 這是我到目前爲止有:如何在paraview中將自定義數組添加到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

更好的辦法是使用可編程濾波器將數組添加到輸入數據集。在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); 
0

與流水線效果更好的方法是使用可編程濾波器。 (相關:Paraview Python -- Reverse operation to servermanager.Fetch()?

爲了節省新POLYDATA到文件: (發現由於http://markmail.org/message/4kp7cxl2ani25cak進口所有CTK模塊時)

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

更爲「粗糙」的方法是使用數據導出爲CSV numpy.savetxt,然後閱讀csv並應用TableToPoints過濾器或Python腳本。

這可能是可以使用TrivialProducer和GetClientSideObject當客戶機和服務器共享相同的存儲空間(與內置的服務器)這裏http://public.kitware.com/pipermail/paraview/2011-February/020120.html解釋,但我還沒有嘗試過

相關問題