2015-11-21 3 views
1

Я вернусь к ВТК. Это часть моего кода:Как читать данные в vtkDataArray?

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?

+0

сообщение об ошибке само за себя. Вы указатель на «что-то» на vtkDataArray. Вам необходимо убедиться: 1.) убедитесь, что это «что-то» может быть представлено vtkDataArray. 2.) использовать static_cast () – Nandu

ответ

1

Vtk предоставляет метод для этого, вам не нужно использовать метод "низкого уровня":

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

или rgrid-> GetPointData() -> GetArray ("ИмяМассива")

Он работает так же, как для FieldData и CellData (http://www.vtk.org/doc/release/6.2/html/classvtkFieldData.html)

То, что вы получите это vtkArray, а не просто с ++ массив, так что вам придется читать это нравится:

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

Есть много примеров в вики http://www.vtk.org/Wiki/VTK/Examples/Cxx