2026.1.9随笔:实习第五天(用CFDApplicationUnStructGridWidget渲染声压结果,添加下拉框调节渲染模式)

今天早上睁开眼睛第一件事:“要不今天请假在家睡觉吧”,谁发明的调休啊!今天本来应该是周六的!不情愿的起了床到公司,上午摸了一小会鱼~

mt原话:

可以了,你这个自己写的渲染类不用提交了,然后看能不能通过我们之前写的那个CFDApplicationUnStructGridWidget视图类把解析到的声压结果渲染出来,之前这个是涉及到动画的,就是会有好多个结果文件、以及类似声压、还有别的速度、位移什么的,因为我们这只有一个声压结果,你就当一帧处理

因为之前自己写的类不是很规范,mt说不用提交(只是练练手)叫我仔细看一下CFDApplicationUnStructGridWidget这个类,然后把解析到的声压结果渲染出来。因为只有声压结果就当一帧来处理了

考虑在CFDApplicationUnStructGridWidget添加一个导入声压数据的函数,因为把导入声压的逻辑写到信号接收的那个地方的话就太臃肿了,添加这个函数之后,mt又叫我改了改,让我提交了代码。

然后又给了一个需求:添加一个下拉框,选择渲染模式(点、线、面、线框)

mt原话:

然后我觉得你可以在这个视图下方工具栏里,再添加一个通用的下拉框,作用就是切换视图里可视化对象的点、线、面、线框这四种渲染模式的,这个是属于静态网格和动画结果通用的,所以两种模式下都需要有这个下拉框,你看怎么添加这个功能

我参考了一下paraview的设计,然后用Ai做了那个下拉框

这个软件有时候会出现一些小bug,就是点击下拉框没反应,UI界面显示不出来,但是你点击对应的地方还是可以切换

Ai说这个是Qt原生的下拉框被vtk的界面挡住了

修复:当使用QVTKOpenGLNativeWidget时,原生窗口会遮挡Qt的弹出窗口(如下拉框)。

换成 QVTKOpenGLWidget

通过为comboview窗口设置WindowStaysOnTopHint/Popup标志,使弹出层显示在VTK原生窗口之上。

还遇到了一个问题:在Static Grid模式下强制切换Animation的时候报错

1
2
3
4
// 设置颜色条的 mapper
// 解决在Static Grid模式下强制切换 Animation 的时候报错
// 右侧颜色条渲染问题
m_scalarBarActor->SetLookupTable(m_colorFunction);

问题根源分析

错误信息

这个错误在 VTK 的 [vtkScalarBarActor.cxx](vscode-file://vscode-app/d:/software/Microsoft VS Code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) 第474行输出,表示 [vtkScalarBarActor](vscode-file://vscode-app/d:/software/Microsoft VS Code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) 无法渲染。

vtkScalarBarActor 的工作原理

vtkScalarBarActor 是做什么的:

  • 它是一个2D actor,用于在渲染窗口右侧显示色彩条(颜色尺度条)
  • 它需要知道数据值到颜色的映射关系,才能绘制这个色彩条

它需要什么信息来工作:

vtkScalarBarActor 依赖以下方式之一来获得映射信息:

  1. SetMapper() - 从一个mapper获取映射关系
  2. SetLookupTable() - 从一个lookup table获取映射关系