[vtkusers] Missing Neighbors in VTKPolyData

Bill Lorensen bill.lorensen at gmail.com
Mon Dec 2 11:18:32 EST 2013


Also, you should try to determine which filter is causing the problem.
Use the FeatureEdges filter on each of the outputs.


On Mon, Dec 2, 2013 at 11:13 AM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
> If the edges are coincident, you can run CleanPolyData.
>
>
>
> On Mon, Dec 2, 2013 at 11:15 AM, Martin Klemm
> <martin.klemm at hs-offenburg.de> wrote:
>> Thank you. vtkFeatureEdges shows me exactly the edges that return just 2
>> neighbors instead of three. But do you know any way to resolve this issue?
>> How can I connect this edges with its proper neighbors?
>>
>>
>> On 02.12.2013 16:36, Bill Lorensen wrote:
>>>
>>> The filter vtkFeatureEdges can detect boundary edges. See this example:
>>> http://vtk.org/Wiki/VTK/Examples/Cxx/Meshes/BoundaryEdges
>>>
>>>
>>> On Mon, Dec 2, 2013 at 9:12 AM, Martin Klemm
>>> <martin.klemm at hs-offenburg.de> wrote:
>>>>
>>>> The surface was generated by the vtkPowerCrustSurfaceFilter (found here
>>>> http://www.sq3.org.uk/powercrust/ ). Since I need triangles I used a
>>>> trianglefilter afterwards. Then I used a vtkFillHolesFilter in case there
>>>> is
>>>> a hole (but I think it is not necessary). Then I use two planes to clip
>>>> away
>>>> a part of the generated surface. Because vtkClipClosedSurface can produce
>>>> lines I used another triangle filter to filter out the lines.
>>>>
>>>> And the problem happens with the output of the last triangle filter. So
>>>> my
>>>> pipeline is as follows:
>>>> vtkPowerCrustSurfaceFilter -> vtkTriangleFilter -> vtkFillHolesFilter ->
>>>> vtkClipClosedSurface -> vtkTriangleFilter
>>>>
>>>> Do you know how I can check for cracks in the surface? Or is there even a
>>>> good way to close them?
>>>>
>>>> Thanks for your help!
>>>>
>>>>
>>>>
>>>> On 02.12.2013 14:27, Bill Lorensen wrote:
>>>>>
>>>>>
>>>>> 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
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>> --
>>
>>
>> Martin Klemm
>> Hochschule Offenburg
>> Badstraße 24
>> 77652 Offenburg
>> Tel. +49 781 / 205 - 4681
>
>
>
> --
> Unpaid intern in BillsBasement at noware dot com



-- 
Unpaid intern in BillsBasement at noware dot com


More information about the vtkusers mailing list