demo/graph_to_eps_demo.cc
author alpar
Thu, 01 Mar 2007 16:03:36 +0000
changeset 2379 248152674a9e
parent 2178 0d7c0f96a5ee
child 2391 14a343be7a5a
permissions -rw-r--r--
Prescaling can be turned off
     1 /* -*- C++ -*-
     2  *
     3  * This file is a part of LEMON, a generic C++ optimization library
     4  *
     5  * Copyright (C) 2003-2006
     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/undirected graphs,
    27 /// how to handle parallel egdes, how to change the properties (like
    28 /// color, shape, size, title etc.) of nodes and edges individually
    29 /// using appropriate \ref maps-page "graph maps".
    30 ///
    31 /// \include graph_to_eps_demo.cc
    32 
    33 #include <cmath>
    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   ListGraph g;
    48   typedef ListGraph::Node Node;
    49   typedef ListGraph::NodeIt NodeIt;
    50   typedef ListGraph::Edge Edge;
    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   ListGraph::NodeMap<Point> coords(g);
    60   ListGraph::NodeMap<double> sizes(g);
    61   ListGraph::NodeMap<int> colors(g);
    62   ListGraph::NodeMap<int> shapes(g);
    63   ListGraph::EdgeMap<int> ecolors(g);
    64   ListGraph::EdgeMap<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   Edge e;
    73 
    74   e=g.addEdge(n1,n2); ecolors[e]=0; widths[e]=1;
    75   e=g.addEdge(n2,n3); ecolors[e]=0; widths[e]=1;
    76   e=g.addEdge(n3,n5); ecolors[e]=0; widths[e]=3;
    77   e=g.addEdge(n5,n4); ecolors[e]=0; widths[e]=1;
    78   e=g.addEdge(n4,n1); ecolors[e]=0; widths[e]=1;
    79   e=g.addEdge(n2,n4); ecolors[e]=1; widths[e]=2;
    80   e=g.addEdge(n3,n4); ecolors[e]=2; widths[e]=1;
    81   
    82   IdMap<ListGraph,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) 2006 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) 2006 LEMON Project").
    98     absoluteNodeSizes().absoluteEdgeWidths().
    99     nodeScale(2).nodeSizes(sizes).
   100     nodeShapes(shapes).
   101     nodeColors(composeMap(palette,colors)).
   102     edgeColors(composeMap(palette,ecolors)).
   103     edgeWidthScale(.4).edgeWidths(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) 2006 LEMON Project").
   113     absoluteNodeSizes().absoluteEdgeWidths().
   114     nodeColors(composeMap(palette,colors)).
   115     coords(coords).
   116     nodeScale(2).nodeSizes(sizes).
   117     nodeShapes(shapes).
   118     edgeColors(composeMap(palette,ecolors)).
   119     edgeWidthScale(.4).edgeWidths(widths).
   120     nodeTexts(id).nodeTextSize(3).
   121     drawArrows().arrowWidth(1).arrowLength(1).
   122     run();
   123 
   124   e=g.addEdge(n1,n4); ecolors[e]=2; widths[e]=1;
   125   e=g.addEdge(n4,n1); ecolors[e]=1; widths[e]=2;
   126 
   127   e=g.addEdge(n1,n2); ecolors[e]=1; widths[e]=1;
   128   e=g.addEdge(n1,n2); ecolors[e]=2; widths[e]=1;
   129   e=g.addEdge(n1,n2); ecolors[e]=3; widths[e]=1;
   130   e=g.addEdge(n1,n2); ecolors[e]=4; widths[e]=1;
   131   e=g.addEdge(n1,n2); ecolors[e]=5; widths[e]=1;
   132   e=g.addEdge(n1,n2); ecolors[e]=6; widths[e]=1;
   133   e=g.addEdge(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 edges)").
   139     copyright("(C) 2006 LEMON Project").
   140     absoluteNodeSizes().absoluteEdgeWidths().
   141     nodeShapes(shapes).
   142     coords(coords).
   143     nodeScale(2).nodeSizes(sizes).
   144     nodeColors(composeMap(palette,colors)).
   145     edgeColors(composeMap(palette,ecolors)).
   146     edgeWidthScale(.4).edgeWidths(widths).
   147     nodeTexts(id).nodeTextSize(3).
   148     enableParallel().parEdgeDist(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 edges and arrowheads)").
   155     copyright("(C) 2006 LEMON Project").
   156     absoluteNodeSizes().absoluteEdgeWidths().
   157     nodeScale(2).nodeSizes(sizes).
   158     coords(coords).
   159     nodeShapes(shapes).
   160     nodeColors(composeMap(palette,colors)).
   161     edgeColors(composeMap(palette,ecolors)).
   162     edgeWidthScale(.3).edgeWidths(widths).
   163     nodeTexts(id).nodeTextSize(3).
   164     enableParallel().parEdgeDist(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) 2006 LEMON Project").
   172     absoluteNodeSizes().absoluteEdgeWidths().
   173     nodeScale(2).nodeSizes(sizes).
   174     coords(coords).
   175     nodeShapes(shapes).
   176     nodeColors(composeMap(palette,colors)).
   177     edgeColors(composeMap(palette,ecolors)).
   178     edgeWidthScale(.3).edgeWidths(widths).
   179     nodeTexts(id).nodeTextSize(3).
   180     enableParallel().parEdgeDist(1).
   181     drawArrows().arrowWidth(1).arrowLength(1).
   182     run();
   183 
   184   ListGraph h;
   185   ListGraph::NodeMap<int> hcolors(h);
   186   ListGraph::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) 2006 LEMON Project").
   200     coords(hcoords).
   201     absoluteNodeSizes().absoluteEdgeWidths().
   202     nodeScale(45).
   203     distantColorNodeTexts().
   204     //    distantBWNodeTexts().
   205     nodeTexts(hcolors).nodeTextSize(.6).
   206     nodeColors(composeMap(paletteW,hcolors)).
   207     run();
   208 }