2012-07-17 102 views
4

我試圖在Qt/VTK應用程序中顯示EnSight文件。更確切地說,我想顯示一個特定的EnSight零件,並通過其中一個矢量變量的大小來給它着色。據我所知,VTK閱讀器的輸出是一個vtkMultiBlockDataSet,每部分一個塊。每個塊是vtkUnstructuredGrid,變量是pointdata中的特定數組。向量大小着色vtkUnstructuredGrid

我到目前爲止的代碼如下。不幸的是,它顯示了統一的顏色(當在ParaView中加載相同的文件時,它顯示了一些局部變化)。

顯然我錯過了一些東西,但我不知道在哪裏。我會很感激任何提示。

casefile = "data/Results/exported/blahblah.case" 
part_id = 0 
var_id = 2 

reader = vtk.vtkGenericEnSightReader() 
reader.SetCaseFileName(casefile) 
reader.Update() 

# Color map 
colormap = vtk.vtkLookupTable() 
colormap.SetHueRange(0.667, 0.0) 
colormap.SetVectorModeToMagnitude() 
colormap.Build() 

multiblock = reader.GetOutput() 
ugrid = multiblock.GetBlock(part_id) 
pointdata = ugrid.GetPointData() 
data = pointdata.GetArray(var_id) 
data_range = data.GetRange(-1) 

mesh_mapper = vtk.vtkDataSetMapper() 
mesh_mapper.SetInput(ugrid) 
mesh_mapper.SetColorModeToDefault() 
mesh_mapper.SetScalarRange(data_range) 
mesh_mapper.SetScalarVisibility(True) 
mesh_mapper.SetLookupTable(colormap) 
# 
mesh_actor = vtk.vtkActor() 
mesh_actor.SetMapper(mesh_mapper) 
mesh_actor.GetProperty().SetDiffuseColor(1., 1., 1.) 

renderer = vtk.vtkRenderer() 
renderer.AddActor(mesh_actor) 
renderer.AddActor2D(colorbar) 

回答

0
colormap = vtk.vtkLookupTable() 
colormap.SetHueRange(0.667, 0.0) 
colormap.SetVectorModeToMagnitude() 
colormap.Build() 

將生成0和1之間的範圍內LookupTable中這是從您的示例數據的數據範圍是多少?

如果不是,請將數據範圍設置爲data_range元組中的最小/最大值,然後調用Build() - 我認爲這應該有幫助 - 您是否有示例數據?