COIN-OR::LEMON - Graph Library

source: lemon-0.x/demo/graph_to_eps_demo.cc @ 1852:ffa7c6e96330

Last change on this file since 1852:ffa7c6e96330 was 1802:fdfa3aa18607, checked in by Balazs Dezso, 18 years ago

Demo for topology

File size: 6.1 KB
Line 
1/* -*- C++ -*-
2 * demo/graph_to_eps.cc - Part of LEMON, a generic C++ optimization library
3 *
4 * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
5 * (Egervary Research Group on Combinatorial Optimization, EGRES).
6 *
7 * Permission to use, modify and distribute this software is granted
8 * provided that this copyright notice appears in all copies. For
9 * precise terms see the accompanying LICENSE file.
10 *
11 * This software is provided "AS IS" with no warranty of any kind,
12 * express or implied, and with no claim as to its suitability for any
13 * purpose.
14 *
15 */
16
17/// \ingroup demos
18/// \file
19/// \brief Demo of the graph grawing function \ref graphToEps()
20///
21/// This demo program shows examples how to  use the function \ref
22/// graphToEps(). It takes no input but simply creates  six
23/// <tt>.eps</tt> files demonstrating the capability of \ref
24/// graphToEps(), and showing how to draw directed/undirected graphs,
25/// how to handle parallel egdes, how to change the properties (like
26/// color, shape, size, title etc.) of nodes and edges individually
27/// using appropriate \ref maps-page "graph maps".
28///
29/// \include graph_to_eps_demo.cc
30
31#include <cmath>
32
33#include<lemon/graph_to_eps.h>
34#include<lemon/list_graph.h>
35#include<lemon/graph_utils.h>
36
37using namespace std;
38using namespace lemon;
39
40int main()
41{
42  ColorSet colorSet;
43
44  ListGraph g;
45  typedef ListGraph::Node Node;
46  typedef ListGraph::NodeIt NodeIt;
47  typedef ListGraph::Edge Edge;
48  typedef xy<int> Xy;
49 
50  Node n1=g.addNode();
51  Node n2=g.addNode();
52  Node n3=g.addNode();
53  Node n4=g.addNode();
54  Node n5=g.addNode();
55
56  ListGraph::NodeMap<Xy> coords(g);
57  ListGraph::NodeMap<double> sizes(g);
58  ListGraph::NodeMap<int> colors(g);
59  ListGraph::NodeMap<int> shapes(g);
60  ListGraph::EdgeMap<int> ecolors(g);
61  ListGraph::EdgeMap<int> widths(g);
62 
63  coords[n1]=Xy(50,50);  sizes[n1]=1; colors[n1]=1; shapes[n1]=0;
64  coords[n2]=Xy(50,70);  sizes[n2]=2; colors[n2]=2; shapes[n2]=2;
65  coords[n3]=Xy(70,70);  sizes[n3]=1; colors[n3]=3; shapes[n3]=0;
66  coords[n4]=Xy(70,50);  sizes[n4]=2; colors[n4]=4; shapes[n4]=1;
67  coords[n5]=Xy(85,60);  sizes[n5]=3; colors[n5]=5; shapes[n5]=2;
68 
69  Edge e;
70
71  e=g.addEdge(n1,n2); ecolors[e]=0; widths[e]=1;
72  e=g.addEdge(n2,n3); ecolors[e]=0; widths[e]=1;
73  e=g.addEdge(n3,n5); ecolors[e]=0; widths[e]=3;
74  e=g.addEdge(n5,n4); ecolors[e]=0; widths[e]=1;
75  e=g.addEdge(n4,n1); ecolors[e]=0; widths[e]=1;
76  e=g.addEdge(n2,n4); ecolors[e]=1; widths[e]=2;
77  e=g.addEdge(n3,n4); ecolors[e]=2; widths[e]=1;
78 
79  IdMap<ListGraph,Node> id(g);
80
81  cout << "Create 'graph_to_eps_demo_out.eps'" << endl;
82  graphToEps(g,"graph_to_eps_demo_out.eps").scale(10).coords(coords).
83    title("Sample .eps figure").
84    copyright("(C) 2005 LEMON Project").
85    nodeScale(2).nodeSizes(sizes).
86    nodeShapes(shapes).
87    nodeColors(composeMap(colorSet,colors)).
88    edgeColors(composeMap(colorSet,ecolors)).
89    edgeWidthScale(.4).edgeWidths(widths).
90    nodeTexts(id).nodeTextSize(3).
91    run();
92
93
94  cout << "Create 'graph_to_eps_demo_out_arr.eps'" << endl;
95  graphToEps(g,"graph_to_eps_demo_out_arr.eps").scale(10).
96    title("Sample .eps figure (with arrowheads)").
97    copyright("(C) 2005 LEMON Project").
98    nodeColors(composeMap(colorSet,colors)).
99    coords(coords).
100    nodeScale(2).nodeSizes(sizes).
101    nodeShapes(shapes).
102    edgeColors(composeMap(colorSet,ecolors)).
103    edgeWidthScale(.4).edgeWidths(widths).
104    nodeTexts(id).nodeTextSize(3).
105    drawArrows().arrowWidth(1).arrowLength(1).
106    run();
107
108  e=g.addEdge(n1,n4); ecolors[e]=2; widths[e]=1;
109  e=g.addEdge(n4,n1); ecolors[e]=1; widths[e]=2;
110
111  e=g.addEdge(n1,n2); ecolors[e]=1; widths[e]=1;
112  e=g.addEdge(n1,n2); ecolors[e]=2; widths[e]=1;
113  e=g.addEdge(n1,n2); ecolors[e]=3; widths[e]=1;
114  e=g.addEdge(n1,n2); ecolors[e]=4; widths[e]=1;
115  e=g.addEdge(n1,n2); ecolors[e]=5; widths[e]=1;
116  e=g.addEdge(n1,n2); ecolors[e]=6; widths[e]=1;
117  e=g.addEdge(n1,n2); ecolors[e]=7; widths[e]=1;
118
119  cout << "Create 'graph_to_eps_demo_out_par.eps'" << endl;
120  graphToEps(g,"graph_to_eps_demo_out_par.eps").scale(10).
121    title("Sample .eps figure (parallel edges)").
122    copyright("(C) 2005 LEMON Project").
123    nodeShapes(shapes).
124    coords(coords).
125    nodeScale(2).nodeSizes(sizes).
126    nodeColors(composeMap(colorSet,colors)).
127    edgeColors(composeMap(colorSet,ecolors)).
128    edgeWidthScale(.4).edgeWidths(widths).
129    nodeTexts(id).nodeTextSize(3).
130    enableParallel().parEdgeDist(1.5).
131    run();
132 
133  cout << "Create 'graph_to_eps_demo_out_par_arr.eps'" << endl;
134  graphToEps(g,"graph_to_eps_demo_out_par_arr.eps").scale(10).
135    title("Sample .eps figure (parallel edges and arrowheads)").
136    copyright("(C) 2005 LEMON Project").
137    nodeScale(2).nodeSizes(sizes).
138    coords(coords).
139    nodeShapes(shapes).
140    nodeColors(composeMap(colorSet,colors)).
141    edgeColors(composeMap(colorSet,ecolors)).
142    edgeWidthScale(.3).edgeWidths(widths).
143    nodeTexts(id).nodeTextSize(3).
144    enableParallel().parEdgeDist(1).
145    drawArrows().arrowWidth(1).arrowLength(1).
146    run();
147
148  cout << "Create 'graph_to_eps_demo_out_a4.eps'" << endl;
149  graphToEps(g,"graph_to_eps_demo_out_a4.eps").scaleToA4().
150    title("Sample .eps figure (fits to A4)").
151    copyright("(C) 2005 LEMON Project").
152    nodeScale(2).nodeSizes(sizes).
153    coords(coords).
154    nodeShapes(shapes).
155    nodeColors(composeMap(colorSet,colors)).
156    edgeColors(composeMap(colorSet,ecolors)).
157    edgeWidthScale(.3).edgeWidths(widths).
158    nodeTexts(id).nodeTextSize(3).
159    enableParallel().parEdgeDist(1).
160    drawArrows().arrowWidth(1).arrowLength(1).
161    run();
162
163  ListGraph h;
164  ListGraph::NodeMap<int> hcolors(h);
165  ListGraph::NodeMap<Xy> hcoords(h);
166 
167  int cols=int(sqrt(double(colorSet.size())));
168  for(int i=0;i<int(colorSet.size());i++) {
169    Node n=h.addNode();
170    hcoords[n]=Xy(i%cols,i/cols);
171    hcolors[n]=i;
172  }
173 
174  cout << "Create 'graph_to_eps_demo_out_colors.eps'" << endl;
175  graphToEps(h,"graph_to_eps_demo_out_colors.eps").scale(60).
176    title("Sample .eps figure (ColorSet demo)").
177    copyright("(C) 2005 LEMON Project").
178    coords(hcoords).
179    nodeScale(.45).
180    distantColorNodeTexts().
181    //    distantBWNodeTexts().
182    nodeTexts(hcolors).nodeTextSize(.6).
183    nodeColors(composeMap(colorSet,hcolors)).
184    run();
185
186
187}
Note: See TracBrowser for help on using the repository browser.