c++ - Vtk 热图:雷达数据的科学可视化:为 vtkPlaneSource 更新 vtkFloatArray
问题描述
作为 vtk 的初学者,有点难以知道从哪里开始。我正在尝试做的是radar view
每次传感器满时发送给我的使用数据(并且代表单行)。我最初的想法是使用网格并将我得到的值映射为 Z,一次填充网格一列。
每次填充传感器时,我都会调用一个更新函数来更新 vtkPlaneData 的标量
有几点需要考虑:
我不知道我是否使用了最好的结构来解决这个问题,vtk 的结构太多,我只是在学习。
我知道 c++,但我不擅长 3d 软件(还)。
void Window::handleData(const std::vector<float> data)
{
vtkFloatArray* currentCellData = dynamic_cast<vtkFloatArray*>(
m_planeSource->GetOutput()->GetCellData()->GetScalars());
vtkFloatArray* cellData = vtkFloatArray::New();
cellData->SetNumberOfComponents(1);
cellData->SetNumberOfValues(2000 * 2000);
// Move elements one row above;
for (vtkIdType i = 0, end = 200 * 200 - 200; i < end; i++) {
cellData->SetValue(i + 200, currentCellData->GetValue(i));
}
// Add the new row.
for (vtkIdType i = 0, end = 200; i < end; i++)
{
cellData->SetValue(i, data[(int)i]);
}
// update the cells
planeSource->GetOutput()->GetCellData()->SetScalars(cellData);
// update the window
renderWindow->GetInteractor()->Render();
}
我知道代码闻起来很腥,我没有重用数据向量,而且我每次都在遍历所有元素以追加最后一行。
当我重用相同的 cellData 时,视图没有刷新热图。
所以,我的问题:
我怎样才能“左移”一行
vtkFloatArray
?(作为 N * M 个元素,我想 << M; 将所有元素向上移动一行并保留最后一行)我怎样才能直接追加一行而不必遍历所有项目(类似
cellData.insertAt(pos, array.data(), array.size())
)- 如何重新利用
CellData()->Scalars()
PlaneSource 中的电流而不需要每一步都分配/释放内存?
- 如何重新利用
解决方案
推荐阅读
- gpgpu - 用于并行求和减少的 Vulkan 计算着色器
- vue.js - 2021 年如何在 vue.js 中手动嵌入 Instagram 帖子
- git - 为什么我无法将我的代码推送到 BitBucket?
- java - Hikari 连接池 postgres
- jquery - 在 jquery 中不使用插件创建滑块
- powershell - 通过 ssh 进行的 Powershell 会话。开始工作
- android - 如果分辨率很小,则禁用应用旋转
- python - Tensorflow Profiler 会话终止并且训练停止
- python - 如何在 AWS Athena 中解析 Json?
- azure-functions - Azure Timer Functions 还记得他们错过了计划的时间吗?