bistek:
def get_boundary_edges(self):
border_edges = vtk.vtkFeatureEdges()
border_edges.BoundaryEdgesOn()
border_edges.NonManifoldEdgesOff()
border_edges.FeatureEdgesOff()
border_edges.ManifoldEdgesOff()
border_edges.SetInputData(self)
border_edges.Update()
clean_border_edges = vtk.vtkCleanPolyData()
clean_border_edges.SetInputConnection(border_edges.GetOutputPort())
border_strips = vtk.vtkStripper()
border_strips.SetJoinContiguousSegments(True)
border_strips.SetInputConnection(clean_border_edges.GetOutputPort())
border_strips.Update()
border_polygons = vtk.vtkCellArray()
border_polygons.SetNumberOfCells(border_strips.GetOutput().GetNumberOfCells())
border_points = vtk.vtkPoints()
points_in_border = 0
for cell in range(border_strips.GetOutput().GetNumberOfCells()):
polygon = vtk.vtkPolygon()
polygon.GetPointIds().SetNumberOfIds(border_strips.GetOutput().GetCell(cell).GetNumberOfPoints())
for point_in_cell in range(border_strips.GetOutput().GetCell(cell).GetNumberOfPoints()):
point_in_border = point_in_cell + points_in_border
border_points.InsertNextPoint(border_strips.GetOutput().GetCell(cell).GetPoints().GetPoint(point_in_cell))
polygon.GetPointIds().SetId(point_in_cell, point_in_border)
border_polygons.InsertNextCell(polygon)
points_in_polygon = polygon.GetNumberOfPoints()
points_in_border += points_in_polygon
borders = vtk.vtkPolyData()
borders.SetPoints(border_points)
borders.SetPolys(border_polygons)
borders.Modified()
return borders
This was just what I was looking for, I spent over an hour trying to write an algorithm that reordered the points but realized this must already be an anticipated/desired output structure