src/demo/graph_to_eps_demo.cc
author alpar
Mon, 21 Feb 2005 10:08:12 +0000
changeset 1162 2f51fccbc261
parent 1103 f196dc4f1b31
child 1164 80bb73097736
permissions -rw-r--r--
New features in v0.3
     1 /* -*- C++ -*-
     2  * src/lemon/demo/graph_to_eps.cc - 
     3  * Part of LEMON, a generic C++ optimization library
     4  *
     5  * Copyright (C) 2004 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     6  * (Egervary Combinatorial Optimization Research Group, EGRES).
     7  *
     8  * Permission to use, modify and distribute this software is granted
     9  * provided that this copyright notice appears in all copies. For
    10  * precise terms see the accompanying LICENSE file.
    11  *
    12  * This software is provided "AS IS" with no warranty of any kind,
    13  * express or implied, and with no claim as to its suitability for any
    14  * purpose.
    15  *
    16  */
    17 
    18 #include<lemon/graph_to_eps.h>
    19 #include<lemon/maps.h>
    20 #include<lemon/list_graph.h>
    21 
    22 
    23 using namespace std;
    24 using namespace lemon;
    25 
    26 class ColorSet : public MapBase<int,Color>
    27 {
    28 public:
    29   Color operator[](int i) const
    30   {
    31     switch(i%8){
    32     case 0: return Color(0,0,0);
    33     case 1: return Color(1,0,0);
    34     case 2: return Color(0,1,0);
    35     case 3: return Color(0,0,1);
    36     case 4: return Color(1,1,0);
    37     case 5: return Color(1,0,1);
    38     case 6: return Color(0,1,1);
    39     case 7: return Color(1,1,1);
    40     }
    41     return Color(0,0,0);
    42   }
    43 } colorSet;
    44 
    45 class IdMap :public MapBase<ListGraph::Node,int>
    46 {
    47   const ListGraph &g;
    48 public:
    49   IdMap(const ListGraph &_g) :g(_g) {}
    50   Value operator[](Key n) const { return g.id(n); }
    51 };
    52 
    53 int main()
    54 {
    55   ListGraph g;
    56   typedef ListGraph::Node Node;
    57   typedef ListGraph::NodeIt NodeIt;
    58   typedef ListGraph::Edge Edge;
    59   typedef xy<int> Xy;
    60   
    61   Node n1=g.addNode();
    62   Node n2=g.addNode();
    63   Node n3=g.addNode();
    64   Node n4=g.addNode();
    65   Node n5=g.addNode();
    66 
    67   ListGraph::NodeMap<Xy> coords(g);
    68   ListGraph::NodeMap<double> sizes(g);
    69   ListGraph::NodeMap<int> colors(g);
    70   ListGraph::NodeMap<int> shapes(g);
    71   ListGraph::EdgeMap<int> ecolors(g);
    72   ListGraph::EdgeMap<int> widths(g);
    73   
    74   coords[n1]=Xy(50,50);  sizes[n1]=1; colors[n1]=1; shapes[n1]=0;
    75   coords[n2]=Xy(50,70);  sizes[n2]=2; colors[n2]=2; shapes[n2]=2;
    76   coords[n3]=Xy(70,70);  sizes[n3]=1; colors[n3]=3; shapes[n3]=0;
    77   coords[n4]=Xy(70,50);  sizes[n4]=2; colors[n4]=4; shapes[n4]=1;
    78   coords[n5]=Xy(85,60);  sizes[n5]=3; colors[n5]=5; shapes[n5]=2;
    79   
    80   Edge e;
    81 
    82   e=g.addEdge(n1,n2); ecolors[e]=0; widths[e]=1;
    83   e=g.addEdge(n2,n3); ecolors[e]=0; widths[e]=1;
    84   e=g.addEdge(n3,n5); ecolors[e]=0; widths[e]=3;
    85   e=g.addEdge(n5,n4); ecolors[e]=0; widths[e]=1;
    86   e=g.addEdge(n4,n1); ecolors[e]=0; widths[e]=1;
    87   e=g.addEdge(n2,n4); ecolors[e]=1; widths[e]=2;
    88   e=g.addEdge(n3,n4); ecolors[e]=2; widths[e]=1;
    89   
    90   IdMap id(g);
    91 
    92   graphToEps(g,"graph_to_eps_demo_out.eps").scale(10).coords(coords).
    93     title("Sample .eps figure").
    94     copyright("(C) 2004 LEMON Project").
    95     nodeScale(2).nodeSizes(sizes).
    96     nodeShapes(shapes).
    97     nodeColors(composeMap(colorSet,colors)).
    98     edgeColors(composeMap(colorSet,ecolors)).
    99     edgeWidthScale(.4).edgeWidths(widths).
   100     nodeTexts(id).nodeTextSize(3).
   101     run();
   102 
   103   graphToEps(g,"graph_to_eps_demo_out_arr.eps").scale(10).
   104     title("Sample .eps figure (with arrowheads)").
   105     copyright("(C) 2004 LEMON Project").
   106     nodeColors(composeMap(colorSet,colors)).
   107     coords(coords).
   108     nodeScale(2).nodeSizes(sizes).
   109     nodeShapes(shapes).
   110     edgeColors(composeMap(colorSet,ecolors)).
   111     edgeWidthScale(.4).edgeWidths(widths).
   112     nodeTexts(id).nodeTextSize(3).
   113     drawArrows().arrowWidth(1).arrowLength(1).
   114     run();
   115 
   116   e=g.addEdge(n1,n4); ecolors[e]=2; widths[e]=1;
   117   e=g.addEdge(n4,n1); ecolors[e]=1; widths[e]=2;
   118 
   119   e=g.addEdge(n1,n2); ecolors[e]=1; widths[e]=1;
   120   e=g.addEdge(n1,n2); ecolors[e]=2; widths[e]=1;
   121   e=g.addEdge(n1,n2); ecolors[e]=3; widths[e]=1;
   122   e=g.addEdge(n1,n2); ecolors[e]=4; widths[e]=1;
   123   e=g.addEdge(n1,n2); ecolors[e]=5; widths[e]=1;
   124   e=g.addEdge(n1,n2); ecolors[e]=6; widths[e]=1;
   125   e=g.addEdge(n1,n2); ecolors[e]=7; widths[e]=1;
   126 
   127   graphToEps(g,"graph_to_eps_demo_out_par.eps").scale(10).
   128     title("Sample .eps figure (parallel edges)").
   129     copyright("(C) 2004 LEMON Project").
   130     nodeShapes(shapes).
   131     coords(coords).
   132     nodeScale(2).nodeSizes(sizes).
   133     nodeColors(composeMap(colorSet,colors)).
   134     edgeColors(composeMap(colorSet,ecolors)).
   135     edgeWidthScale(.4).edgeWidths(widths).
   136     nodeTexts(id).nodeTextSize(3).
   137     enableParallel().parEdgeDist(1.5).
   138     run();
   139   
   140   graphToEps(g,"graph_to_eps_demo_out_par_arr.eps").scale(10).
   141     title("Sample .eps figure (parallel edges and arrowheads)").
   142     copyright("(C) 2004 LEMON Project").
   143     nodeScale(2).nodeSizes(sizes).
   144     coords(coords).
   145     nodeShapes(shapes).
   146     nodeColors(composeMap(colorSet,colors)).
   147     edgeColors(composeMap(colorSet,ecolors)).
   148     edgeWidthScale(.3).edgeWidths(widths).
   149     nodeTexts(id).nodeTextSize(3).
   150     enableParallel().parEdgeDist(1).
   151     drawArrows().arrowWidth(1).arrowLength(1).
   152     run();
   153 
   154   graphToEps(g,"graph_to_eps_demo_out_a4.eps").scaleToA4().
   155     title("Sample .eps figure (fits to A4)").
   156     copyright("(C) 2004 LEMON Project").
   157     nodeScale(2).nodeSizes(sizes).
   158     coords(coords).
   159     nodeShapes(shapes).
   160     nodeColors(composeMap(colorSet,colors)).
   161     edgeColors(composeMap(colorSet,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 }