Извлечь границу из vtkPolyData - PullRequest
0 голосов
/ 08 мая 2020

Предположим, что у меня есть vtkPolyData, и мне нужно извлечь из него граничные узлы. Я пытаюсь выполнить:

// 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();

Но это дает мне пустое окно ... Где я сбился с пути?

Это изображение представляет необработанные данные

...