/*========================================================================= Test of vtkPolyDataSingleSourceShortestPath Version: $Revision: 1.3 $ Made by Rasmus Paulsen email: rrp(at)imm.dtu.dk web: www.imm.dtu.dk/~rrp/VTK =========================================================================*/ #include "vtkActor.h" #include "vtkPolyDatamapper.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkSphereSource.h" #include "vtkTransform.h" #include "vtkTransformPolyDataFilter.h" #include "vtkTubeFilter.h" #include "vtkPolyDataSingleSourceShortestPath.h" #include "vtkPolyData.h" #include "vtkPointData.h" int main( int argc, char *argv[] ) { // create a rendering window and renderer vtkRenderer *ren = vtkRenderer::New(); vtkRenderWindow *renWindow = vtkRenderWindow::New(); renWindow->AddRenderer(ren); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWindow); renWindow->SetSize( 300, 300 ); vtkSphereSource *sphere = vtkSphereSource::New(); sphere->SetPhiResolution(30); sphere->SetThetaResolution(30); sphere->SetRadius(10); // Distort the shape of the sphere vtkTransform *trans = vtkTransform::New(); trans->Scale(1.3, 2.5, 0.8); vtkTransformPolyDataFilter *transformer = vtkTransformPolyDataFilter::New(); transformer->SetInput(sphere->GetOutput()); transformer->SetTransform(trans); // Generate a shortest path between two vertices // and show the geodesic distance to the start vertex with color coding vtkPolyDataSingleSourceShortestPath *path = vtkPolyDataSingleSourceShortestPath::New(); path->SetInput(transformer->GetOutput()); path->SetStartVertex(7); path->SetEndVertex(297); path->Update(); transformer->GetOutput()->GetPointData()->SetScalars((vtkDataArray*)path->Getd()); // Use a tube filter to enhance the appearance of the found path vtkTubeFilter *tube = vtkTubeFilter::New(); tube->SetInput(path->GetOutput()); tube->SetNumberOfSides(8); tube->SetRadius(0.5); vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New(); sphereMapper->SetInput(transformer->GetOutput()); sphereMapper->SetScalarRange(transformer->GetOutput()->GetPointData()->GetScalars()->GetRange()); vtkActor *sphereActor = vtkActor::New(); sphereActor->SetMapper(sphereMapper); vtkPolyDataMapper *pathMapper = vtkPolyDataMapper::New(); pathMapper->SetInput(tube->GetOutput()); vtkActor *pathActor = vtkActor::New(); pathActor->SetMapper(pathMapper); ren->AddActor(sphereActor); ren->AddActor(pathActor); renWindow->Render(); iren->Start(); ren->Delete(); renWindow->Delete(); iren->Delete(); sphere->Delete(); sphereMapper->Delete(); sphereActor->Delete(); pathMapper->Delete(); pathActor->Delete(); tube->Delete(); transformer->Delete(); trans->Delete(); path->Delete(); return 0; }