Hi vtkers
I have made a function to simplify a triangle mesh:
void UpdateTriangles(vtkIdType ia, vtkIdType ib, vtkPolyData *pTriangles);
The ia and ib are vertex IDs of an edge and pTriangles points to a triangle mesh.
The ib will contract to ia to make an edge collapse that will make the mash simpler.
It works. But after it is called some times, the pTriangles->Delete() crashed.
Does anyone has any suggestion?
Thank you in advance.
The code is as following:
void UpdateTriangles(vtkIdType ia, vtkIdType ib, vtkPolyData *pTriangles)
{
unsigned short i, ncells;
vtkIdType *tmp, *cells;
pTriangles->GetPointCells(ib, ncells, tmp);
if(ncells == 0)
return;
cells = new vtkIdType[ncells];
if(cells == NULL)
return;
memcpy(cells, tmp, ncells*sizeof(vtkIdType));
//delete first and make marks
for(i=0; i<ncells; i++)
{
if(pTriangles->IsPointUsedByCell(ia, cells[i]))
{
pTriangles->RemoveCellReference(cells[i]);
pTriangles->DeleteCell(cells[i]);
cells[i] = -1;
continue;
}
}
for(i=0; i<ncells; i++)
{
if(cells[i] != -1)
{
pTriangles->RemoveReferenceToCell(ib, cells[i]);
pTriangles->AddReferenceToCell(ia, cells[i]);
pTriangles->ReplaceCellPoint(cells[i], ib, ia);
}
}
delete [] cells;
}