当我无法直接访问vtkPolyData
中的特定单元格时,我发现了this post online(可追溯到2013年)。我正在使用最新版本:VTK 8.1.1
,似乎新版本的VTK仍然存在此问题。
polys->InitTraversal();
for(int i = 0; i < polys->GetNumberOfCells(); i++)
{
polys->GetNextCell(idList); // This sequential method gets the point IDs correctly
int a = idList->GetId(0);
int b = idList->GetId(1);
int c = idList->GetId(2);
}
但是,直接访问方法似乎有问题
polys->InitTraversal();
for(int i = 0; i < polys->GetNumberOfCells(); i++)
{
polys->GetCell(i, idList); // This method returns wrong ids
int a = idList->GetId(0);
int b = idList->GetId(1);
int c = idList->GetId(2);
}
如何在不遍历所有单元的情况下获取特定单元中的点ID? polys->GetCell(i, idList)
并非旨在让您直接访问特定单元格吗?
答案 0 :(得分:1)
对于直接访问,我们可以使用vtkPolyData::GetCellPoints()方法。例如我们可以做
vtkNew<vtkIdList> idL; // or auto idL = vtkSmartPointer<vtkIdList>::New();
poly->GetCellPoints( 13, idL ); // Assuming you want the points for 13th cell
for(auto i = 0; i < idL->GetNumberOfIds(); ++i)
std::cout<< idL->GetId(i) << std::endl;
对于循环遍历所有单元格,我更喜欢使用while
循环:
vtkNew<vtkIdList> idL;
poly->GetPolys()->InitTraversal();
while(poly->GetPolys()->GetNextCell(idL)){
for(auto i = 0; i < idL->GetNumberOfIds(); ++i)
std::cout<< idL->GetId(i) << std::endl;
}