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

Mahnaz Maddah mmaddah at synapse.sri.com
Tue Aug 24 13:56:05 EDT 2010


  Thanks Alex. It partly worked. Seems when you delete a point from the 
mesh, its associated data does not get deleted automatically. So when in 
my vtk writer I call the GetPointData(idx, &pointvalue), it returns data 
from the old point id sequence not the modified one. Should a similar 
Squeeze function be applied to the point data container?

QuadEdgeMeshType::PointsContainer::Pointer points = mesh->GetPoints();
for(QuadEdgeMeshType::PointsContainer::Iterator i = points->Begin(); i !=
       points->End(); ++i)
     {
       int idx = i->Index();
...
       mesh->GetPointData(idx, &pointvalue);
...


Thanks,
-Mahnaz

On 08/24/2010 12:30 AM, Alexandre GOUAILLARD wrote:
> 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