[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