Как сохранить векторное поле для vtkUnstructuredGrid на центроид ячейки - PullRequest
0 голосов
/ 07 сентября 2018

Можно ли сохранить векторное поле в центре тяжести тетраэдрической сетки, используя vtkStructuredGrid? Я попробовал следующий код, но VTK (версия 8.1) жалуется на это, что, я думаю, связано с тем, что это векторное поле определено в центроиде клетки.

Warning: In c:\vtk\src\common\datamodel\vtkdataset.cxx, line 443
vtkUnstructuredGrid (0000020A4EC10D50): Point array  with 3 components, has 137 tuples but there are only 64 points

Векторное поле определяется как:

vtkSmartPointer<vtkUnstructuredGrid> uGrid = vtkSmartPointer<vtkUnstructuredGrid>::New();

// ... I already populated uGrid with points and tetrahedral information
// numberOfPoints = 64
// numberOfTetrahedra = 103

// Add a vector field at the centroid of each tetrahedral
vtkSmartPointer<vtkDoubleArray> vectors = vtkSmartPointer<vtkDoubleArray>::New();
vectors->SetNumberOfTuples(numberOfTetrahedra);
vectors->SetNumberOfComponents(3);
for (vtkIdType ielement = 0; ielement < numberOfTetrahedra; ielement++)
{
    vectors->InsertNextValue(vec[3 * ielement]);
    vectors->InsertNextValue(vec[3 * ielement + 1]);
    vectors->InsertNextValue(vec[3 * ielement + 2]);
}
uGrid->GetPointData()->SetVectors(vectors);

// Write the data to file
vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer = vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
writer->SetFileName("vtk_test_write_unstructured_grid.vtu");
writer->SetInputData(uGrid);
writer->Write();
  • Предоставляет ли ВТК какие-либо инструменты для сохранения векторов на центроиде?
  • Имеет ли VTK фильтр для сопоставления центрированного на ячейках поля с точками сетки?

Буду признателен за советы и предложения по решению этой проблемы.

1 Ответ

0 голосов
/ 08 сентября 2018

Для данных, связанных с ячейками, вы должны использовать vtkCellData . Так что в вашем коде попробуйте заменить строку, в которой вы установили vector

uGrid->GetCellData()->SetVectors(vectors);

Эти векторы связаны с клеткой. Вы можете интерпретировать их как связанные с центроидом клеток, хотя в файле .vtu вы можете не обнаружить такой явной связи с центроидами клеток.

Чтобы отобразить поля, центрированные на ячейках, в точки сетки, рассмотрите возможность изучения vtkCellDataToPointData class.

...