/*========================================================================= Program: Visualization Toolkit Module: TestSimple3DCirclesStrategy.cxx Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ #include "vtkActor.h" #include "vtkEdgeLayout.h" #include "vtkGraphLayout.h" #include "vtkGraphToPolyData.h" #include "vtkMutableDirectedGraph.h" #include "vtkPassThroughEdgeStrategy.h" #include "vtkPolyDataMapper.h" #include "vtkProperty.h" #include "vtkRandomGraphSource.h" #include "vtkRegressionTestImage.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkSimple3DCirclesStrategy.h" #include "vtkSmartPointer.h" #include "vtkVertexGlyphFilter.h" int TestSimple3DCirclesStrategy(int argc, char* argv[]) { // graph vtkSmartPointer graph = vtkSmartPointer::New(); // mapper vtkSmartPointer edgeMapper = vtkSmartPointer::New(); vtkSmartPointer vertMapper = vtkSmartPointer::New(); vtkSmartPointer edgeStrategy = vtkSmartPointer::New(); vtkSmartPointer strategy = vtkSmartPointer::New(); vtkSmartPointer layout = vtkSmartPointer::New(); vtkSmartPointer edgeLayout = vtkSmartPointer::New(); vtkSmartPointer graphToPoly = vtkSmartPointer::New(); vtkSmartPointer vertGlyph = vtkSmartPointer::New(); vtkSmartPointer edgeActor = vtkSmartPointer::New(); vtkSmartPointer vertActor = vtkSmartPointer::New(); vtkSmartPointer ren = vtkSmartPointer::New(); vtkSmartPointer renwin = vtkSmartPointer::New(); vtkSmartPointer iren = vtkSmartPointer::New(); iren->SetRenderWindow(renwin); renwin->SetMultiSamples(0); // Vertices: // layer 0: 0,1,2 // layer 1: 3,4,5,6 // layer 2: 7,8,9 // standalone: 10,11 for (int i = 0; i < 12; ++i) graph->AddVertex(); // Edges: // layer 0 -> 1 graph->AddEdge(0, 4); graph->AddEdge(0, 6); graph->AddEdge(1, 5); graph->AddEdge(1, 6); graph->AddEdge(2, 3); graph->AddEdge(2, 4); graph->AddEdge(2, 5); // layer 1 -> 2 graph->AddEdge(3, 8); graph->AddEdge(3, 7); graph->AddEdge(4, 9); graph->AddEdge(4, 8); graph->AddEdge(5, 7); // layer 0 -> 2 graph->AddEdge(0, 9); strategy->SetMethod(vtkSimple3DCirclesStrategy::FixedDistanceMethod); strategy->AutoHeightOn(); strategy->SetDirection(0.0, -1.0, 0.0); strategy->SetMinimumDegree(45.0); layout->SetInputData(graph); layout->SetLayoutStrategy(strategy); // Uncomment the following for a more interesting result! #if 0 vtkSmartPointer src = vtkSmartPointer::New(); src->SetNumberOfVertices(1000); src->SetNumberOfEdges(0); src->SetDirected(true); src->SetStartWithTree(true); layout->SetInputConnection( src->GetOutputPort() ); #endif edgeLayout->SetInputConnection(layout->GetOutputPort()); edgeLayout->SetLayoutStrategy(edgeStrategy); edgeLayout->Update(); graphToPoly->EdgeGlyphOutputOn(); graphToPoly->SetInputConnection(edgeLayout->GetOutputPort()); vertGlyph->SetInputConnection(edgeLayout->GetOutputPort()); edgeMapper->ScalarVisibilityOff(); edgeMapper->SetInputConnection(graphToPoly->GetOutputPort()); edgeActor->GetProperty()->SetColor(0.75, 0.75, 0.75); edgeActor->GetProperty()->SetOpacity(1.0); edgeActor->GetProperty()->SetLineWidth(2); edgeActor->PickableOff(); edgeActor->SetMapper(edgeMapper); ren->AddActor(edgeActor); vertMapper->ScalarVisibilityOff(); vertMapper->SetInputConnection(vertGlyph->GetOutputPort()); vertActor->GetProperty()->SetColor(0.5, 0.5, 0.5); vertActor->GetProperty()->SetOpacity(1.0); vertActor->GetProperty()->SetPointSize(7); vertActor->PickableOff(); vertActor->SetMapper(vertMapper); ren->AddActor(vertActor); renwin->SetSize(800, 600); renwin->AddRenderer(ren); renwin->Render(); int retVal = vtkRegressionTestImage(renwin); if (retVal == vtkRegressionTester::DO_INTERACTOR) { iren->Start(); } return !retVal; }