如何在vtkDataArray中读取数据

How to read data in vtkDataArray?

本文关键字:读取 数据 vtkDataArray      更新时间:2023-10-16

我是VTK的新手。这是我代码的一部分:

vtkDataSetReader *rdr = vtkDataSetReader::New();
rdr->SetFileName("proj7b.vtk");
rdr->SetScalarsName("hardyglobal");
rdr->Update();
int dims[3];
vtkRectilinearGrid *rgrid = (vtkRectilinearGrid *) rdr->GetOutput();
rgrid->GetDimensions(dims);

vtkDataArray *dataArray;
dataArray = vtkDoubleArray::New();
dataArray = rgrid->GetPointData()->GetScalars()->GetVoidPointer(0);
for(i=0;i<10;i++)
{
    cout<<"here----------"<<endl;
    cout<<" "<<dataArray[i]<<" ";
}

我想将数据读取到我的vtkDataArray中。但此代码无法编译:

proj7b.cxx:525:15: error: 
  assigning to 'vtkDataArray *' from incompatible type 'void *'
dataArray = rgrid->GetPointData()->GetScalars()->GetVoidPointer(0);
          ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

生成1个错误。有人知道如何将数据读入vtkDataArray吗?

Vtk为其提供了方法,您不需要使用"低级"方法:

rgrid->GetPointData()->GetArray(0)

或rgrid->GetPointData()->GetArray("arrayname")

它对FieldData和CellData(http://www.vtk.org/doc/release/6.2/html/classvtkFieldData.html)

你得到的是一个vtkArray,而不是一个简单的c++数组,所以你必须像这样阅读:

cout<<" "<<dataArray->GetValue(i) <<" ";

维基上有很多例子http://www.vtk.org/Wiki/VTK/Examples/Cxx

请参阅此页面:https://cloud.tencent.com/developer/ask/sof/148655

void doSomething(vtkSmartPointer<vtkDataArray> dataArray)
{
  vtkIdType numTuples = dataArray->GetNumberOfTuples();
  for (vtkIdType tupleIdx = 0; tupleIdx < numTuples; ++tupleIdx)
  {
    double* tuple = dataArray->GetTuple(tupleIdx);
    for (int j = 0; j < /*¿¿¿???*/; ++j)
    {
      double var = tuple[j];
      // Do something with var
      // Carefull don't go out of bounds
    }
  }
}