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