C++ Vtk热图:雷达数据的科学可视化:为vtkPlaneSource更新vtkFloatArray
作为vtk的初学者,很难知道从哪里开始。我试图做的是C++ Vtk热图:雷达数据的科学可视化:为vtkPlaneSource更新vtkFloatArray,c++,vtk,C++,Vtk,作为vtk的初学者,很难知道从哪里开始。我试图做的是雷达视图使用每次传感器满时发送给我的数据(代表一行)。我最初的想法是使用一个网格,将我得到的值映射为Z,一次填充一列网格 每次填充传感器时,我都会调用更新函数,该函数应该更新vtkPlaneData的标量 需要考虑的几件事: 我不知道我是否在用最好的结构来解决这个问题,vtk有太多的结构,我只是在学习 我知道C++,但我对3D软件不太好。 void Window::handleData(const std::vector data) { v
雷达视图
使用每次传感器满时发送给我的数据(代表一行)。我最初的想法是使用一个网格,将我得到的值映射为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时,视图没有刷新热图
所以,我的问题是:
- 如何在
中“左移”一行?(由于是N*M个元素,我想从PlaneSource创建Scalars(),这样就不需要每一步分配/取消分配内存了吗vtkFloatArray
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();
}