demo/graph_to_eps_demo.cc
author Akos Ladanyi <ladanyi@tmit.bme.hu>
Sun, 13 Apr 2008 20:15:45 +0200
changeset 142 8b703d177341
parent 129 e99385bca9fe
child 206 4e22275a2b52
permissions -rw-r--r--
Improved LEMON_FUNCTION_NAME macro.
It should work fine with GCC and the MS C++ compilers. Otherwise it reverts to
using the __func__ variable which is C99, but I couldn't find a better
alternative.
     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 
    39 using namespace std;
    40 using namespace lemon;
    41 
    42 int 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 }