[vtkusers] vtkPolyData RemoveDeletedCells() reorders vtkIdType cellid, so my indexes to them are no longer correct.

da xu remywendy at gmail.com
Thu Aug 13 11:37:55 EDT 2009


Thanks Jinzhong.

Do you know of any way to have a pointer to these cells so that I can access
them after a call to RemoveDeleteCells(), instead of remembering them by
their indices, since they get rearranged.

-Will

On Thu, Aug 13, 2009 at 7:33 AM, Yang, Jinzhong <jinzhong76 at gmail.com>wrote:

>  The cells in vtkPolyData is stored as an array of int. Once you call
> RemoveDeleteCells(), the array will be rearranged and compacted to release
> unused memory. If you want to keep the original indices, the easiest way is
>  not to call RemoveDeleteCells() and just mark those cells as deleted.
>
>
>
> -Jinzhong
>
>
>
> *From:* vtkusers-bounces at vtk.org [mailto:vtkusers-bounces at vtk.org] *On
> Behalf Of *da xu
> *Sent:* Wednesday, August 12, 2009 8:04 PM
> *To:* vtkusers at vtk.org
> *Subject:* [vtkusers] vtkPolyData RemoveDeletedCells() reorders vtkIdType
> cellid, so my indexes to them are no longer correct.
>
>
>
> Hi all,
> I have some cells in a vtkPolyData where I also have a std::list of their
> index in my program. Sometimes, I want to delete some of these cells, but
> when I call RemoveDeletedCells the cells in my vtkPolyData get re-ordered,
> so my std::list index to them are no longer correct.
>
> My question is there another way to keep track of which cell is which cell
> if I do call RemoveDeletedCells and get rid of some of them? Such as a
> pointer to each cell within my vtkPolyData...
>
> Relevant code below:
>
> pointArray is of vtkPoints
> cellArray is of vtkCellArray
>
> I keep a list of actorIndex to refer to each cell. (each cell is basically
> just the point i want to display on the render window). So when I delete
> actorIndex 10, the old actorIndex 11 becomes 10, and when I try to delete 11
> I get an error....
>
> AddPoint(double pt[3]) {
>
>     int actorIndex = pointArray->InsertNextPoint(pt);
>     polyData->SetPoints(pointArray);
>
>     int n = pointArray->GetNumberOfPoints() - 1; // Subtract one for the
> correct array index
>     cellArray->InsertNextCell(1, &n);
>
>     polyData->SetVerts(cellArray);
>     if (n==0) {
>         polyMapper->SetInput(polyData);
>         actor->SetMapper(polyMapper);
>         actor->GetProperty()->SetRepresentationToPoints();
>         renderer->AddActor(actor);
>     }
>     polyData->Modified();
> ...
>
> Any help/clue/pointer is appreciated!
>
> -Will
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20090813/b7693dfb/attachment.htm>


More information about the vtkusers mailing list