2017-03-17 12 views
0

因此,我不想用ParaView顯示其他格式的數據,而是使用ParaView提供的Python接口直接從我們當前的文件格式加載數據並顯示它。如何編寫PorgrammableSource過濾器以在ParaView中將numpy數組顯示爲vtkImageData?

要測試這個,我想創建一個簡單的ProgrammableSource過濾器,輸出一個vtkImageData並填充一些數據。

我遇到三個問題:

  • 首先,不顯示數據(甚至還不如一個輪廓表示)
  • 我無法找到一個方法來設置值,而循環
  • 我做沒有找到一個很好的在線來源,可以幫助我

這是我到目前爲止。沒有ParaView的投訴,但也沒有呈現。

import numpy as np 
import vtk 
import vtk.util.numpy_support as ns 

img = self.GetImageDataOutput() 
img.SetDimensions(3,4,5) 
img.AllocateScalars(vtk.VTK_DOUBLE, 1) 


dims = img.GetDimensions() 
img.SetOrigin(0,0,0) 
img.SetSpacing(0.55, 0.55, 0.55) 

for z in range(dims[2]): 
    for y in range(dims[1]): 
    for x in range(dims[0]): 
     img.SetScalarComponentFromDouble(x,y,z,0, 1.0*x*y*z) 

注:如果是使用更方便paraview包的蟒蛇外殼,而不是直接的ProgrammableSource的,這也將是確定。

回答

2

爲了用可編程源定義vtkImageData輸出,還必須注意在流水線執行的RequestInformation階段設置一些信息。將下面的進Script (RequestInformation)屬性:

from paraview import util 

op = self.GetOutput() 
util.SetOutputWholeExtent(self, [0, 2, 0, 3, 0, 4]) 

這一信息是從提供http://www.paraview.org/Wiki/Python_Programmable_Filter信息調整。

+0

哇,這已經看起來很有前途。但是,是否可以將numpy值解釋爲元素值而不是節點值,因爲在第一個條目中是第一個體素的值,而不是第一個線框節點? – NOhs

+0

在VTK和ParaView圖像數據中,點數據表示體素值,體素中心是具有相關數據的「點」。我意識到這有點令人困惑,但VTK中處理圖像數據的所有內容都是以這種假設編寫的。 –

相關問題