COIN-OR::LEMON - Graph Library

source: lemon-0.x/demo/graph_to_eps_demo.cc @ 2189:de2b77e3868c

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