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

Alexandre GOUAILLARD agouaillard at gmail.com
Tue Aug 24 23:24:46 EDT 2010


hi,

perfectly right, I did not take care of the pointdata container. Good catch.

i m going to make the modification, and send you a patch first, then
commit it to the new itk.

thanks for pointing that out.

alex.


On Wed, Aug 25, 2010 at 1:56 AM, Mahnaz Maddah <mmaddah at synapse.sri.com> wrote:
>  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