2026.1.9随笔:实习第五天(用CFDApplicationUnStructGridWidget渲染声压结果,添加下拉框调节渲染模式)
今天早上睁开眼睛第一件事:“要不今天请假在家睡觉吧”,谁发明的调休啊!今天本来应该是周六的!不情愿的起了床到公司,上午摸了一小会鱼~
mt原话:
可以了,你这个自己写的渲染类不用提交了,然后看能不能通过我们之前写的那个CFDApplicationUnStructGridWidget视图类把解析到的声压结果渲染出来,之前这个是涉及到动画的,就是会有好多个结果文件、以及类似声压、还有别的速度、位移什么的,因为我们这只有一个声压结果,你就当一帧处理
因为之前自己写的类不是很规范,mt说不用提交(只是练练手)叫我仔细看一下CFDApplicationUnStructGridWidget这个类,然后把解析到的声压结果渲染出来。因为只有声压结果就当一帧来处理了
考虑在CFDApplicationUnStructGridWidget添加一个导入声压数据的函数,因为把导入声压的逻辑写到信号接收的那个地方的话就太臃肿了,添加这个函数之后,mt又叫我改了改,让我提交了代码。
然后又给了一个需求:添加一个下拉框,选择渲染模式(点、线、面、线框)
mt原话:
然后我觉得你可以在这个视图下方工具栏里,再添加一个通用的下拉框,作用就是切换视图里可视化对象的点、线、面、线框这四种渲染模式的,这个是属于静态网格和动画结果通用的,所以两种模式下都需要有这个下拉框,你看怎么添加这个功能
我参考了一下paraview的设计,然后用Ai做了那个下拉框


这个软件有时候会出现一些小bug,就是点击下拉框没反应,UI界面显示不出来,但是你点击对应的地方还是可以切换
Ai说这个是Qt原生的下拉框被
vtk的界面挡住了修复:当使用
QVTKOpenGLNativeWidget时,原生窗口会遮挡Qt的弹出窗口(如下拉框)。换成
QVTKOpenGLWidget通过为
combo的view窗口设置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 依赖以下方式之一来获得映射信息:
- SetMapper() - 从一个mapper获取映射关系
- SetLookupTable() - 从一个lookup table获取映射关系