demo/graph_to_eps_demo.cc
changeset 128 7cd965d2257f
child 129 e99385bca9fe
equal deleted inserted replaced
-1:000000000000 0:cc7beeb5cf28
       
     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(-1,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 }