<div dir="ltr">Hello everyone,<div>I'm sorry if that question has already been answered but I didn't find anything.</div><div><br clear="all"><div>I want to extract only polygons from surface shell of PolyData. So - the only outside polygons, not inside the volume. What I mean:</div><div><br></div><div><font face="monospace, monospace">from vtk import vtkCellArray, vtkIdList, vtkPoints, vtkPolyData</font></div><div><br></div><div><font face="monospace, monospace"># coords</font></div><div><font face="monospace, monospace">raw_points = (</font></div><div><font face="monospace, monospace">    (-1, -1, 1),</font></div><div><font face="monospace, monospace">    (-1, 1, 1),</font></div><div><font face="monospace, monospace">    (1, 1, 1),</font></div><div><font face="monospace, monospace">    (1, -1, 1),</font></div><div><font face="monospace, monospace">    (-1, -1, -1),</font></div><div><font face="monospace, monospace">    (-1, 1, -1),</font></div><div><font face="monospace, monospace">    (1, 1, -1),</font></div><div><font face="monospace, monospace">    (1, -1, -1),</font></div><div><font face="monospace, monospace">    (0, 0, 0)</font></div><div><font face="monospace, monospace">)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># cell = indexes of triangle</font></div><div><font face="monospace, monospace">raw_cells = [</font></div><div><font face="monospace, monospace">    (0, 1, 3),</font></div><div><font face="monospace, monospace">    (2, 3, 1),</font></div><div><font face="monospace, monospace">    (4, 5, 0),</font></div><div><font face="monospace, monospace">    (1, 0, 5),</font></div><div><font face="monospace, monospace">    (7, 6, 4),</font></div><div><font face="monospace, monospace">    (5, 4, 6),</font></div><div><font face="monospace, monospace">    (3, 2, 7),</font></div><div><font face="monospace, monospace">    (6, 7, 2),</font></div><div><font face="monospace, monospace">    (1, 5, 2),</font></div><div><font face="monospace, monospace">    (6, 2, 5),</font></div><div><font face="monospace, monospace">    (4, 7, 0),</font></div><div><font face="monospace, monospace">    (3, 0, 7),</font></div><div><font face="monospace, monospace">]</font></div><div><font face="monospace, monospace">must_kept = len(raw_cells)</font></div><div><font face="monospace, monospace">raw_cells.extend((</font></div><div><font face="monospace, monospace">    (0, 8, 3),</font></div><div><font face="monospace, monospace">    (1, 8, 2),</font></div><div><font face="monospace, monospace">    (1, 8, 0),</font></div><div><font face="monospace, monospace">    (2, 8, 3),</font></div><div><font face="monospace, monospace">    (5, 8, 4),</font></div><div><font face="monospace, monospace">    (6, 8, 7),</font></div><div><font face="monospace, monospace">    (5, 8, 6),</font></div><div><font face="monospace, monospace">    (4, 8, 7),</font></div><div><font face="monospace, monospace">))</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">def init_data():</font></div><div><font face="monospace, monospace">    points = vtkPoints()</font></div><div><font face="monospace, monospace">    for i, point in enumerate(raw_points):</font></div><div><font face="monospace, monospace">        points.InsertPoint(i, point)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    cells = vtkCellArray()</font></div><div><font face="monospace, monospace">    for raw_cell in raw_cells:</font></div><div><font face="monospace, monospace">        cell = vtkIdList()</font></div><div><font face="monospace, monospace">        for id_ in raw_cell:</font></div><div><font face="monospace, monospace">            cell.InsertNextId(id_)</font></div><div><font face="monospace, monospace">        cells.InsertNextCell(cell)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    data = vtkPolyData()</font></div><div><font face="monospace, monospace">    data.SetPoints(points)</font></div><div><font face="monospace, monospace">    data.SetPolys(cells)</font></div><div><font face="monospace, monospace">    return data</font></div><div><br></div><div>I use the cube with one point inside and triangle cells for that, I want to use filter to remove inner cells - it used to extend <font face="monospace, monospace">raw_cells</font> array.</div><div>I tried vtkPolyDataConnectivityFilter() and vtkPolyDataConnectivityFilter() with no success in the way:</div><div><font face="monospace, monospace"><br></font></div><div><div><font face="monospace, monospace">data = init_data()</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">filter_ = vtkPolyDataConnectivityFilter()</font></div><div><font face="monospace, monospace">filter_.SetInput(data)</font></div><div><font face="monospace, monospace">filter_.Update()</font></div><div><font face="monospace, monospace">surface_data = filter_.GetOutput()</font></div></div><div><font face="monospace, monospace"><br></font></div><div><div><font face="monospace, monospace">print('{} kept after filter {} of all'.format(surface_data.GetNumberOfCells(), data.GetNumberOfCells()))</font></div><div><font face="monospace, monospace">print('{} points kept after filter {} of all'.format(surface_data.GetNumberOfPoints(), data.GetNumberOfPoints()))</font></div></div><div><br></div><div>And got:</div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">20 kept after filter 20 of all
</span><br>9 points kept after filter 9 of all<br></span></div><div><br></div>while expected:<div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">12 kept after filter 20 of all
</span><br>8 points kept after filter 9 of all<br></span></div><div><span style="font-family:monospace"><br></span></div>Which filter should I use to get the result?<div><br></div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div style="color:rgb(136,136,136);font-size:12.8px"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"></div></div></div></div></div></div></div></div></div></div>
</div></div>