[Insight-users] Deleting a point from a Quad Edge mesh

Alexandre GOUAILLARD agouaillard at gmail.com
Tue Aug 24 03:30:52 EDT 2010


hi mahnaz,

the vtk file writer supposes a point list whose IDs are incremental
(point Ids are implicit in vtk, whereas points Ids are explicit in
ITK). As soon as you delete a point, you create a gap in the IDs. To
make it easier to use the writer, I implemented a mechanism in ITK
that keep track of deleted points and can "squeeze" the point list so
that the Ids are sequential:

Its doxygen documentation is here:
http://www.itk.org/Doxygen318/html/classitk_1_1QuadEdgeMesh.html#ae3b55e8ed3beb3dffb91933245a79906
"
void itk::QuadEdgeMesh< TPixel, VDimension, TTraits >::SqueezePointsIds	() 	
squeeze the point container to be able to write the file properly
"

just call SqueezePointsIds() before you write the mesh, and you should be fine.

alex.



On Tue, Aug 24, 2010 at 4:45 AM, Mahnaz Maddah <mmaddah at synapse.sri.com> wrote:
>
> I've been trying to delete a point that has invalid point data associated
> with it from its belonging QuadEdge mesh.
>
> Comparing the values printed out for point and pointToBeDeleted in my code
> below, it seems the right point (vertex) is being deleted, however as soon
> as only one point is deleted from the mesh, my vtk polydata writer does not
> work for the modified mesh (it works well if no point gets deleted).
>
> Could someone please verify if the following code is the right way to delete
> a point and also what happens to the data associated with the deleted point?
>
> Thanks,
> -Mahnaz
>
>
>
>
> typedef itk::QuadEdgeMeshEulerOperatorJoinVertexFunction<QuadEdgeMeshType,
> QuadEdgeMeshType::QEType> jointFunctionType;
> jointFunctionType::Pointer joinVertex=jointFunctionType::New();
>
>    unsigned int j=0;
>    while  (j < mesh->GetNumberOfPoints())
>      {
>        mesh->GetPoint(j, &point);
>        mesh->GetPointData(j, &pointvalue);
>        if (pointvalue.FA ==nanVal)
>        {
>            //std::cout << j << "     " << point[0] <<" " << point[1] << "
> "<< point[2] << std::endl;
>            joinVertex->SetInput(mesh);
>            if (joinVertex->Evaluate(mesh->FindEdge(j)))
>           {
>                int pid = joinVertex->GetOldPointID();
>                QuadEdgeMeshType::PointType pointToBeDeleted =
> mesh->GetPoint(pid);
>               // std::cout << "Deleting "<< j << "     " <<
> pointToBeDeleted[0] <<" " <<pointToBeDeleted[1] << " "<< pointToBeDeleted[2]
> << std::endl;
>
>                mesh->DeletePoint(pid);
>           }
>        }
>        j++;
>      }
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>


More information about the Insight-users mailing list