COIN-OR::LEMON - Graph Library

source: lemon/demo/graph_to_eps_demo.cc @ 152:b37cc0bb12db

Last change on this file since 152:b37cc0bb12db was 132:50ff949140fa, checked in by Alpar Juttner <alpar@…>, 16 years ago

Scale the node sizes and arc widths in a more sensible way

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-2008
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/graphs,
27/// how to handle parallel egdes, how to change the properties (like
28/// color, shape, size, title etc.) of nodes and arcs individually
29/// using appropriate \ref maps-page "graph maps".
30///
31/// \include graph_to_eps_demo.cc
32
33#include <lemon/math.h>
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  ListDigraph g;
48  typedef ListDigraph::Node Node;
49  typedef ListDigraph::NodeIt NodeIt;
50  typedef ListDigraph::Arc Arc;
51  typedef dim2::Point<int> Point;
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  ListDigraph::NodeMap<Point> coords(g);
60  ListDigraph::NodeMap<double> sizes(g);
61  ListDigraph::NodeMap<int> colors(g);
62  ListDigraph::NodeMap<int> shapes(g);
63  ListDigraph::ArcMap<int> ecolors(g);
64  ListDigraph::ArcMap<int> widths(g);
65 
66  coords[n1]=Point(50,50);  sizes[n1]=1; colors[n1]=1; shapes[n1]=0;
67  coords[n2]=Point(50,70);  sizes[n2]=2; colors[n2]=2; shapes[n2]=2;
68  coords[n3]=Point(70,70);  sizes[n3]=1; colors[n3]=3; shapes[n3]=0;
69  coords[n4]=Point(70,50);  sizes[n4]=2; colors[n4]=4; shapes[n4]=1;
70  coords[n5]=Point(85,60);  sizes[n5]=3; colors[n5]=5; shapes[n5]=2;
71 
72  Arc e;
73
74  e=g.addArc(n1,n2); ecolors[e]=0; widths[e]=1;
75  e=g.addArc(n2,n3); ecolors[e]=0; widths[e]=1;
76  e=g.addArc(n3,n5); ecolors[e]=0; widths[e]=3;
77  e=g.addArc(n5,n4); ecolors[e]=0; widths[e]=1;
78  e=g.addArc(n4,n1); ecolors[e]=0; widths[e]=1;
79  e=g.addArc(n2,n4); ecolors[e]=1; widths[e]=2;
80  e=g.addArc(n3,n4); ecolors[e]=2; widths[e]=1;
81 
82  IdMap<ListDigraph,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) 2003-2007 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) 2003-2007 LEMON Project").
98    absoluteNodeSizes().absoluteArcWidths().
99    nodeScale(2).nodeSizes(sizes).
100    nodeShapes(shapes).
101    nodeColors(composeMap(palette,colors)).
102    arcColors(composeMap(palette,ecolors)).
103    arcWidthScale(.4).arcWidths(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) 2003-2007 LEMON Project").
113    absoluteNodeSizes().absoluteArcWidths().
114    nodeColors(composeMap(palette,colors)).
115    coords(coords).
116    nodeScale(2).nodeSizes(sizes).
117    nodeShapes(shapes).
118    arcColors(composeMap(palette,ecolors)).
119    arcWidthScale(.4).arcWidths(widths).
120    nodeTexts(id).nodeTextSize(3).
121    drawArrows().arrowWidth(1).arrowLength(1).
122    run();
123
124  e=g.addArc(n1,n4); ecolors[e]=2; widths[e]=1;
125  e=g.addArc(n4,n1); ecolors[e]=1; widths[e]=2;
126
127  e=g.addArc(n1,n2); ecolors[e]=1; widths[e]=1;
128  e=g.addArc(n1,n2); ecolors[e]=2; widths[e]=1;
129  e=g.addArc(n1,n2); ecolors[e]=3; widths[e]=1;
130  e=g.addArc(n1,n2); ecolors[e]=4; widths[e]=1;
131  e=g.addArc(n1,n2); ecolors[e]=5; widths[e]=1;
132  e=g.addArc(n1,n2); ecolors[e]=6; widths[e]=1;
133  e=g.addArc(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 arcs)").
139    copyright("(C) 2003-2007 LEMON Project").
140    absoluteNodeSizes().absoluteArcWidths().
141    nodeShapes(shapes).
142    coords(coords).
143    nodeScale(2).nodeSizes(sizes).
144    nodeColors(composeMap(palette,colors)).
145    arcColors(composeMap(palette,ecolors)).
146    arcWidthScale(.4).arcWidths(widths).
147    nodeTexts(id).nodeTextSize(3).
148    enableParallel().parArcDist(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 arcs and arrowheads)").
155    copyright("(C) 2003-2007 LEMON Project").
156    absoluteNodeSizes().absoluteArcWidths().
157    nodeScale(2).nodeSizes(sizes).
158    coords(coords).
159    nodeShapes(shapes).
160    nodeColors(composeMap(palette,colors)).
161    arcColors(composeMap(palette,ecolors)).
162    arcWidthScale(.3).arcWidths(widths).
163    nodeTexts(id).nodeTextSize(3).
164    enableParallel().parArcDist(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) 2003-2007 LEMON Project").
172    absoluteNodeSizes().absoluteArcWidths().
173    nodeScale(2).nodeSizes(sizes).
174    coords(coords).
175    nodeShapes(shapes).
176    nodeColors(composeMap(palette,colors)).
177    arcColors(composeMap(palette,ecolors)).
178    arcWidthScale(.3).arcWidths(widths).
179    nodeTexts(id).nodeTextSize(3).
180    enableParallel().parArcDist(1).
181    drawArrows().arrowWidth(1).arrowLength(1).
182    run();
183
184  ListDigraph h;
185  ListDigraph::NodeMap<int> hcolors(h);
186  ListDigraph::NodeMap<Point> 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]=Point(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) 2003-2007 LEMON Project").
200    coords(hcoords).
201    absoluteNodeSizes().absoluteArcWidths().
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.