[vtkusers] Missing Neighbors in VTKPolyData

Bill Lorensen bill.lorensen at gmail.com
Mon Dec 2 08:27:27 EST 2013


How was the surface generated. Perhaps there are cracks in the surface.


On Mon, Dec 2, 2013 at 2:33 AM, Martin Klemm
<martin.klemm at hs-offenburg.de> wrote:
>
> Hi,
>
> I am currently working on a function that passes through all cells of a
> triangulated power crust surface. Depending on the normal of the cell it is
> classified as valid or invalid. The algorithm works except of a problem that
> occurs in certain cells.
>
> For my algorithm I use GetCellEdgeNeighbors of vtkPolyData to receive the
> edge neighbors of a cell. On a closed surface there should be three
> neighbors for a triangle. However, some triangles just have two neighbors.
>
> Then I checked the point neighbors which shows the same result. There are no
> coincident neighbors on this "weird" edge.
>
> Then I rendered the neighbors and the current cell as you can see here:
>
> http://www.picamatic.com/view/9881191_Unbenannt/
>
> Moreover I print the point neighbors:
> curCell = 719
> point neighbors first point: 719 1151 1153
> point neighbors second point: 714 715 719 721 722 7
> point neighbors third point: 719 720 721 1151 1152
>
> It looks like that even there are neighbors they are not linked to each
> other. And it seems like there are more neighbors than the renderwindow
> really shows. Could that be because there are really small triangles that
> you cannot really see in the renderer? Do you have any suggestions how to
> improve this situation?
>
> And here is my function to get the neighbors of a specified cell:
>
>
> /**
>  * \brief Gets the neighbors of a specified cell (triangle)
>  * \param inputTriangles The input cells (triangles)
>  * \param cellId The specified ID of the cell
>  * \param neighbors A list with the neighbors of the specified cell
>  *
>  * \warning You have to call vtkTriangleFilter before using this function.
>  * \todo Figure out how it is possible that on a closed surface a triangle
> can have less than three
>  * neighbors.
>  */
> void SurfaceReconstructScreen::GetCellNeighbors(vtkPolyData* inputTriangles,
>                                                 vtkIdType cellId,
>                                                 QList<vtkIdType>& neighbors,
>                                                 bool debug)
> {
>    //clear result list
>    neighbors.clear();
>
>    //build links in order to use getcellneighbors
>    inputTriangles->BuildLinks();
>
>    //
>    vtkSmartPointer<vtkIdList> cellPointIds =
> vtkSmartPointer<vtkIdList>::New();
>    inputTriangles->GetCellPoints(cellId, cellPointIds);
>
>    for(vtkIdType i = 0; i < cellPointIds->GetNumberOfIds(); i++)
>    {
>       vtkSmartPointer<vtkIdList> idList = vtkSmartPointer<vtkIdList>::New();
>       vtkIdType firstPoint;
>       vtkIdType secondPoint;
>
>       //add one of the edge points
>       firstPoint = cellPointIds->GetId(i);
>
>       //add the other edge point
>       if(i+1 == cellPointIds->GetNumberOfIds())
>       {
>          secondPoint = cellPointIds->GetId(0);
>       }
>       else
>       {
>          secondPoint = cellPointIds->GetId(i + 1);
>       }
>
>       //get the neighbors of the cell
>       vtkSmartPointer<vtkIdList> neighborCellIds =
> vtkSmartPointer<vtkIdList>::New();
>
>       inputTriangles->GetCellEdgeNeighbors(cellId, firstPoint, secondPoint,
> neighborCellIds);
>
>       for(vtkIdType j = 0; j < neighborCellIds->GetNumberOfIds(); j++)
>       {
>          neighbors.push_back(neighborCellIds->GetId(j));
>       }
>    }
> }
>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers



-- 
Unpaid intern in BillsBasement at noware dot com


More information about the vtkusers mailing list