Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Vtk热图:雷达数据的科学可视化:为vtkPlaneSource更新vtkFloatArray_C++_Vtk - Fatal编程技术网

C++ Vtk热图:雷达数据的科学可视化:为vtkPlaneSource更新vtkFloatArray

C++ Vtk热图:雷达数据的科学可视化:为vtkPlaneSource更新vtkFloatArray,c++,vtk,C++,Vtk,作为vtk的初学者,很难知道从哪里开始。我试图做的是雷达视图使用每次传感器满时发送给我的数据(代表一行)。我最初的想法是使用一个网格,将我得到的值映射为Z,一次填充一列网格 每次填充传感器时,我都会调用更新函数,该函数应该更新vtkPlaneData的标量 需要考虑的几件事: 我不知道我是否在用最好的结构来解决这个问题,vtk有太多的结构,我只是在学习 我知道C++,但我对3D软件不太好。 void Window::handleData(const std::vector data) { v

作为vtk的初学者,很难知道从哪里开始。我试图做的是
雷达视图
使用每次传感器满时发送给我的数据(代表一行)。我最初的想法是使用一个网格,将我得到的值映射为Z,一次填充一列网格

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

需要考虑的几件事:

  • 我不知道我是否在用最好的结构来解决这个问题,vtk有太多的结构,我只是在学习

  • 我知道C++,但我对3D软件不太好。
void Window::handleData(const std::vector data)
{
vtkFloatArray*currentCellData=动态\u转换(
m_planeSource->GetOutput()->GetCellData()->GetScalars());
vtkFloatArray*cellData=vtkFloatArray::New();
cellData->SetNumberOfComponents(1);
cellData->SetNumberOfValues(2000*2000);
//将元素移到上面一行;
对于(vtkIdType i=0,end=200*200-200;iSetValue(i+200,currentCellData->GetValue(i));
}
//添加新行。
对于(vtkIdType i=0,end=200;iSetValue(i,data[(int)i]);
}
//更新单元格
planeSource->GetOutput()->GetCellData()->SetScalars(cellData);
//更新窗口
renderWindow->GetInteractor()->Render();
}
我知道代码有点可疑,我不是在重用数据向量,而是在每次遍历所有元素以附加最后一行

当我重复使用相同的cellData时,视图没有刷新热图

所以,我的问题是:

  • 如何在
    vtkFloatArray
    中“左移”一行?(由于是N*M个元素,我想从PlaneSource创建Scalars(),这样就不需要每一步分配/取消分配内存了吗
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();
 }