Python-vtk可视化OpenFOAM切割面输出LEGACY格式VTK压力场异常求助
问题排查与解决方法
以下为你代码的核心问题和对应修复方案:
1. 查找表范围设置错误
你代码中给vtkLookupTable设置范围时调用了vtkdata.GetScalarRange(),但你的压力数据存储在自定义FIELD attributes下,不是VTK默认激活的标量字段,因此GetScalarRange()返回的是默认值(0.0, 1.0),和你实际压力数据的取值范围完全不匹配,颜色映射错位就会出现全白的异常表现。
2. Mapper未指定映射的标量数组
你调用了mapper.SetScalarModeToUsePointFieldData()但没有指定具体要使用的数组名称,VTK无法识别需要映射p压力字段,自然不能正确渲染场数据。
修改后的核心代码片段
将对应位置替换为以下内容即可恢复正常渲染:
# look-up table pColorTable = vtk.vtkLookupTable() pColorTable.SetHueRange(0, 0.67) # red -> blue pColorTable.SetNumberOfTableValues(16) # number of colors # 替换为实际压力数据的取值范围,不要用默认的scalar_range pColorTable.SetTableRange(DataMin, DataMax) pColorTable.Build() # mapper mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(reader.GetOutputPort()) mapper.SetScalarRange(DataMin,DataMax) mapper.SetLookupTable(pColorTable) mapper.ScalarVisibilityOn() # 指定使用点数据中名称为p的数组做颜色映射 mapper.SetScalarModeToUsePointData() pointData.SetActiveScalars("p") # 若要保留UsePointFieldData写法,可用下面这句替代上面两句 # mapper.SelectColorArray("p") mapper.Update()
可选优化(直接输出PNG)
如果不需要交互窗口,可在渲染完成后添加以下代码直接输出图片:
# 输出png文件 w2if = vtk.vtkWindowToImageFilter() w2if.SetInput(renwin) w2if.Update() writer = vtk.vtkPNGWriter() writer.SetFileName("pressure_contour.png") writer.SetInputConnection(w2if.GetOutputPort()) writer.Write()
内容的提问来源于stack exchange,提问作者WUYing
相关产品推荐
相关产品推荐

