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)