Can't extract boundary from vtkPolyData

Hi,

I’m trying to retrieve boundary points from vtkPolyData but without success. Here is how I try to do that:

// here are 9 points (see picture below)
    vtkSmartPointer<vtkPoints> points =
            vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(0,0,0);
points->InsertNextPoint(-1,0,0);
points->InsertNextPoint(-1,1,0);
points->InsertNextPoint(0,1,0);
points->InsertNextPoint(1,1,0);
points->InsertNextPoint(1,0,0);
points->InsertNextPoint(1,-1,0);
points->InsertNextPoint(0,-1,0);
points->InsertNextPoint(-1,-1,0);

    vtkSmartPointer<vtkPolyData> pointsPolydata  =
            vtkSmartPointer<vtkPolyData>::New();
    pointsPolydata ->SetPoints(points);

// create vertices for these points
    vtkSmartPointer<vtkVertexGlyphFilter> vertexFilter =
      vtkSmartPointer<vtkVertexGlyphFilter>::New();
    vertexFilter->SetInputData(pointsPolydata );
    vertexFilter->Update();

    vtkSmartPointer<vtkPolyData> polydata =
      vtkSmartPointer<vtkPolyData>::New();
    polydata->ShallowCopy(vertexFilter->GetOutput()); // ready to extract boundary

// apply filter
    vtkSmartPointer<vtkFeatureEdges> featureEdges =
      vtkSmartPointer<vtkFeatureEdges>::New();
    featureEdges->SetInputData(polydata);
    featureEdges->BoundaryEdgesOn();
    featureEdges->FeatureEdgesOff();
    featureEdges->ManifoldEdgesOff();
    featureEdges->NonManifoldEdgesOff();
    featureEdges->Update();

// visualization
    vtkSmartPointer<vtkPolyDataMapper> edgeMapper =
      vtkSmartPointer<vtkPolyDataMapper>::New();
    edgeMapper->SetInputData(featureEdges->GetOutput());
    vtkSmartPointer<vtkActor> edgeActor =
      vtkSmartPointer<vtkActor>::New();
    edgeActor->SetMapper(edgeMapper);
    edgeActor->GetProperty()->SetPointSize(10);

    vtkSmartPointer<vtkRenderer> renderer =
      vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow =
      vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
      vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    renderer->AddActor(edgeActor);
    renderWindow->Render();
    renderWindowInteractor->Start();

The result I get is empty window. Please show me my mistake.
The raw 9-points data is shown on the picture and I hope to retrieve 8 surrounding points
1

vtkFeatureEdges is not the right filter for this. A boundary edge is an edge of a polygon that don’t have a second neighbor. I think you are searching for the convex hull.

1 Like

@Ron84 Thank you for hint! I’m going to try vtkConvexHull2D
Just to know better VTK could you please explain what “A boundary edge is an edge of a polygon that don’t have a second neighbor” mean? I can’t imagine that

Here is an illustration: mesh

1 Like

Thank you
I think it becomes clearer to me

@Ron84 after few days I finally did it :slight_smile: Thank you)
image

1 Like