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