2012-07-17 4 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()으로 전화하십시오. 예를 들어 데이터가 도움이 될 것이라고 생각합니다.