首页 > 解决方案 > Vtk 热图:雷达数据的科学可视化:为 vtkPlaneSource 更新 vtkFloatArray

问题描述

作为 vtk 的初学者,有点难以知道从哪里开始。我正在尝试做的是radar view每次传感器满时发送给我的使用数据(并且代表单行)。我最初的想法是使用网格并将我得到的值映射为 Z,一次填充网格一列。

每次填充传感器时,我都会调用一个更新函数来更新 vtkPlaneData 的标量

有几点需要考虑:

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 时,视图没有刷新热图。

所以,我的问题:

标签: c++vtk

解决方案


推荐阅读