2012-07-17 143 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() - 我认为这应该有帮助 - 您是否有示例数据?