前言:本博文主要介绍vtkPolyData相关的常用数据变换方法,欢迎各位小伙伴一起加入。
1. 重新构建输入vtkPolyData数据的Mesh数据,将Polys和Strips合并为Polys输出为Mesh数据。
vtkPolyData* Mesh = vtkPolyData::New();
Mesh->SetPoints(inPts);
vtkCellArray *newPolys, *inPolys = input->GetPolys();
if (numStrips > 0)
{
newPolys = vtkCellArray::New();
if (numPolys > 0)
{
newPolys->DeepCopy(inPolys);
}
else
{
newPolys->AllocateEstimate(numStrips, 5);
}
vtkCellArray* inStrips = input->GetStrips();
for (inStrips->InitTraversal(); inStrips->GetNextCell(npts, pts);)
{
vtkTriangleStrip::DecomposeStrip(npts, pts, newPolys);
}
Mesh->SetPolys(newPolys);
newPolys->Delete();
}
else
{
newPolys = inPolys;
Mesh->SetPolys(newPolys);
}
Mesh->BuildLinks();
注意:若直接在vtkPolyData数据上进行处理会发生内存占用导致异常退出;因此通常会将待处理的数据重新构建为Mesh数据,这样可避免此类问题。
如:vtkFillHolesFilter等常见的过滤器。