demo/graph_to_eps_demo.cc
author alpar
Tue, 30 Aug 2005 13:48:40 +0000
changeset 1664 72f1f24b73c9
parent 1630 f67737f5727a
child 1802 fdfa3aa18607
permissions -rw-r--r--
Bugfix: DFS crashed if the source did not have an outgoing edge.
     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 
    36 using namespace std;
    37 using namespace lemon;
    38 
    39 int main()
    40 {
    41   ColorSet colorSet;
    42 
    43   ListGraph g;
    44   typedef ListGraph::Node Node;
    45   typedef ListGraph::NodeIt NodeIt;
    46   typedef ListGraph::Edge Edge;
    47   typedef xy<int> Xy;
    48   
    49   Node n1=g.addNode();
    50   Node n2=g.addNode();
    51   Node n3=g.addNode();
    52   Node n4=g.addNode();
    53   Node n5=g.addNode();
    54 
    55   ListGraph::NodeMap<Xy> coords(g);
    56   ListGraph::NodeMap<double> sizes(g);
    57   ListGraph::NodeMap<int> colors(g);
    58   ListGraph::NodeMap<int> shapes(g);
    59   ListGraph::EdgeMap<int> ecolors(g);
    60   ListGraph::EdgeMap<int> widths(g);
    61   
    62   coords[n1]=Xy(50,50);  sizes[n1]=1; colors[n1]=1; shapes[n1]=0;
    63   coords[n2]=Xy(50,70);  sizes[n2]=2; colors[n2]=2; shapes[n2]=2;
    64   coords[n3]=Xy(70,70);  sizes[n3]=1; colors[n3]=3; shapes[n3]=0;
    65   coords[n4]=Xy(70,50);  sizes[n4]=2; colors[n4]=4; shapes[n4]=1;
    66   coords[n5]=Xy(85,60);  sizes[n5]=3; colors[n5]=5; shapes[n5]=2;
    67   
    68   Edge e;
    69 
    70   e=g.addEdge(n1,n2); ecolors[e]=0; widths[e]=1;
    71   e=g.addEdge(n2,n3); ecolors[e]=0; widths[e]=1;
    72   e=g.addEdge(n3,n5); ecolors[e]=0; widths[e]=3;
    73   e=g.addEdge(n5,n4); ecolors[e]=0; widths[e]=1;
    74   e=g.addEdge(n4,n1); ecolors[e]=0; widths[e]=1;
    75   e=g.addEdge(n2,n4); ecolors[e]=1; widths[e]=2;
    76   e=g.addEdge(n3,n4); ecolors[e]=2; widths[e]=1;
    77   
    78   IdMap<ListGraph,Node> id(g);
    79 
    80   cout << "Create 'graph_to_eps_demo_out.eps'" << endl;
    81   graphToEps(g,"graph_to_eps_demo_out.eps").scale(10).coords(coords).
    82     title("Sample .eps figure").
    83     copyright("(C) 2005 LEMON Project").
    84     nodeScale(2).nodeSizes(sizes).
    85     nodeShapes(shapes).
    86     nodeColors(composeMap(colorSet,colors)).
    87     edgeColors(composeMap(colorSet,ecolors)).
    88     edgeWidthScale(.4).edgeWidths(widths).
    89     nodeTexts(id).nodeTextSize(3).
    90     run();
    91 
    92 
    93   cout << "Create 'graph_to_eps_demo_out_arr.eps'" << endl;
    94   graphToEps(g,"graph_to_eps_demo_out_arr.eps").scale(10).
    95     title("Sample .eps figure (with arrowheads)").
    96     copyright("(C) 2005 LEMON Project").
    97     nodeColors(composeMap(colorSet,colors)).
    98     coords(coords).
    99     nodeScale(2).nodeSizes(sizes).
   100     nodeShapes(shapes).
   101     edgeColors(composeMap(colorSet,ecolors)).
   102     edgeWidthScale(.4).edgeWidths(widths).
   103     nodeTexts(id).nodeTextSize(3).
   104     drawArrows().arrowWidth(1).arrowLength(1).
   105     run();
   106 
   107   e=g.addEdge(n1,n4); ecolors[e]=2; widths[e]=1;
   108   e=g.addEdge(n4,n1); ecolors[e]=1; widths[e]=2;
   109 
   110   e=g.addEdge(n1,n2); ecolors[e]=1; widths[e]=1;
   111   e=g.addEdge(n1,n2); ecolors[e]=2; widths[e]=1;
   112   e=g.addEdge(n1,n2); ecolors[e]=3; widths[e]=1;
   113   e=g.addEdge(n1,n2); ecolors[e]=4; widths[e]=1;
   114   e=g.addEdge(n1,n2); ecolors[e]=5; widths[e]=1;
   115   e=g.addEdge(n1,n2); ecolors[e]=6; widths[e]=1;
   116   e=g.addEdge(n1,n2); ecolors[e]=7; widths[e]=1;
   117 
   118   cout << "Create 'graph_to_eps_demo_out_par.eps'" << endl;
   119   graphToEps(g,"graph_to_eps_demo_out_par.eps").scale(10).
   120     title("Sample .eps figure (parallel edges)").
   121     copyright("(C) 2005 LEMON Project").
   122     nodeShapes(shapes).
   123     coords(coords).
   124     nodeScale(2).nodeSizes(sizes).
   125     nodeColors(composeMap(colorSet,colors)).
   126     edgeColors(composeMap(colorSet,ecolors)).
   127     edgeWidthScale(.4).edgeWidths(widths).
   128     nodeTexts(id).nodeTextSize(3).
   129     enableParallel().parEdgeDist(1.5).
   130     run();
   131   
   132   cout << "Create 'graph_to_eps_demo_out_par_arr.eps'" << endl;
   133   graphToEps(g,"graph_to_eps_demo_out_par_arr.eps").scale(10).
   134     title("Sample .eps figure (parallel edges and arrowheads)").
   135     copyright("(C) 2005 LEMON Project").
   136     nodeScale(2).nodeSizes(sizes).
   137     coords(coords).
   138     nodeShapes(shapes).
   139     nodeColors(composeMap(colorSet,colors)).
   140     edgeColors(composeMap(colorSet,ecolors)).
   141     edgeWidthScale(.3).edgeWidths(widths).
   142     nodeTexts(id).nodeTextSize(3).
   143     enableParallel().parEdgeDist(1).
   144     drawArrows().arrowWidth(1).arrowLength(1).
   145     run();
   146 
   147   cout << "Create 'graph_to_eps_demo_out_a4.eps'" << endl;
   148   graphToEps(g,"graph_to_eps_demo_out_a4.eps").scaleToA4().
   149     title("Sample .eps figure (fits to A4)").
   150     copyright("(C) 2005 LEMON Project").
   151     nodeScale(2).nodeSizes(sizes).
   152     coords(coords).
   153     nodeShapes(shapes).
   154     nodeColors(composeMap(colorSet,colors)).
   155     edgeColors(composeMap(colorSet,ecolors)).
   156     edgeWidthScale(.3).edgeWidths(widths).
   157     nodeTexts(id).nodeTextSize(3).
   158     enableParallel().parEdgeDist(1).
   159     drawArrows().arrowWidth(1).arrowLength(1).
   160     run();
   161 
   162   ListGraph h;
   163   ListGraph::NodeMap<int> hcolors(h);
   164   ListGraph::NodeMap<Xy> hcoords(h);
   165   
   166   int cols=int(sqrt(double(colorSet.size())));
   167   for(int i=0;i<int(colorSet.size());i++) {
   168     Node n=h.addNode();
   169     hcoords[n]=Xy(i%cols,i/cols);
   170     hcolors[n]=i;
   171   }
   172   
   173   cout << "Create 'graph_to_eps_demo_out_colors.eps'" << endl;
   174   graphToEps(h,"graph_to_eps_demo_out_colors.eps").scale(60).
   175     title("Sample .eps figure (ColorSet demo)").
   176     copyright("(C) 2005 LEMON Project").
   177     coords(hcoords).
   178     nodeScale(.45).
   179     distantColorNodeTexts().
   180     //    distantBWNodeTexts().
   181     nodeTexts(hcolors).nodeTextSize(.6).
   182     nodeColors(composeMap(colorSet,hcolors)).
   183     run();
   184 
   185 
   186 }