c++ - 如何在单元质心处存储 vtkUnstructuredGrid 的 vector 场

标签 c++ vtk paraview

是否可以使用 vtkStructuredGrid 在四面体网格的质心处存储 vector 场?我尝试了以下代码,但 VTK(8.1 版)对此有提示,我猜这是因为这个 vector 场是在单元质心处定义的。

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

vector 场定义为:

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 是否提供任何工具来在质心处保存 vector ?
  • VTK 是否有过滤器将以单元为中心的场映射到网格的点?

对于解决此问题的任何提示/建议,我将不胜感激。

最佳答案

对于与单元格关联的数据,您应该使用 vtkCellData .因此,在您的代码中,尝试将设置 vector 的行替换为

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

这些 vector 与细胞相关联。您可能会将它们解释为与细胞质心相关联,尽管在 .vtu 文件中您可能找不到与细胞质心的任何此类明确关联。

要将以单元为中心的场映射到网格的点,请考虑探索 vtkCellDataToPointData类。

关于c++ - 如何在单元质心处存储 vtkUnstructuredGrid 的 vector 场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52216079/

相关文章:

macos - 如何为支持 Cocoa/XCode 的 OSX 10.8 安装 VTK 6.1?

c++ - vtk 类型的数组拒绝在 C++ 中保存内容

Java 二进制文件 (.raw) 输出

java - 什么数据格式可以从 Java (Clojure) 写入并由 Paraview 读取?

c++ - Objective-C++ 是与 Objective-C 完全不同的语言吗?

c++线程速度测试,我做对了吗?

javascript - 使用 XTK 读取 ASCII VTK

c++ - 激发 'inline' 说明符的现实世界示例?

c++ - 当内存空间被删除时,指针的值保持不变还是被改变?对象内容是否会改变?