如何在vtkDataArray中读取数据?

3

我对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吗?


错误信息是自我解释的。你正在引用指向vtkDataArray的“某物”。需要确保的是:1)确保此“某物”可以由vtkDataArray表示。2)使用static_cast<vtkDataArray*>()。 - Nandu
2个回答

0

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


-1
请查看此页面: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
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接