src/demo/graph_to_eps_demo.cc
author alpar
Tue, 18 Jan 2005 12:02:27 +0000
changeset 1086 caa13d291528
parent 1073 bedab8bd915f
child 1088 358526a620f8
permissions -rw-r--r--
In graphToEps(), nodes may have different shapes (circles or squares).
     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]=0;
    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]=0;
    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     nodeScale(2).nodeSizes(sizes).
    94     nodeShapes(shapes).
    95     nodeColors(composeMap(colorSet,colors)).
    96     edgeColors(composeMap(colorSet,ecolors)).
    97     edgeWidthScale(.4).edgeWidths(widths).
    98     nodeTexts(id).nodeTextSize(3);
    99 
   100   graphToEps(g,"graph_to_eps_demo_out_arr.eps").scale(10).coords(coords).
   101     nodeScale(2).nodeSizes(sizes).
   102     nodeShapes(shapes).
   103     nodeColors(composeMap(colorSet,colors)).
   104     edgeColors(composeMap(colorSet,ecolors)).
   105     edgeWidthScale(.4).edgeWidths(widths).
   106     nodeTexts(id).nodeTextSize(3).
   107     drawArrows().arrowWidth(1).arrowLength(1);
   108 
   109   e=g.addEdge(n1,n4); ecolors[e]=2; widths[e]=1;
   110   e=g.addEdge(n4,n1); ecolors[e]=1; widths[e]=2;
   111 
   112   e=g.addEdge(n1,n2); ecolors[e]=1; widths[e]=1;
   113   e=g.addEdge(n1,n2); ecolors[e]=2; widths[e]=1;
   114   e=g.addEdge(n1,n2); ecolors[e]=3; widths[e]=1;
   115   e=g.addEdge(n1,n2); ecolors[e]=4; widths[e]=1;
   116   e=g.addEdge(n1,n2); ecolors[e]=5; widths[e]=1;
   117   e=g.addEdge(n1,n2); ecolors[e]=6; widths[e]=1;
   118   e=g.addEdge(n1,n2); ecolors[e]=7; widths[e]=1;
   119 
   120   graphToEps(g,"graph_to_eps_demo_out_par.eps").scale(10).coords(coords).
   121     nodeScale(2).nodeSizes(sizes).
   122     nodeShapes(shapes).
   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 
   129   graphToEps(g,"graph_to_eps_demo_out_par_arr.eps").scale(10).coords(coords).
   130     nodeScale(2).nodeSizes(sizes).
   131     nodeShapes(shapes).
   132     nodeColors(composeMap(colorSet,colors)).
   133     edgeColors(composeMap(colorSet,ecolors)).
   134     edgeWidthScale(.3).edgeWidths(widths).
   135     nodeTexts(id).nodeTextSize(3).
   136     enableParallel().parEdgeDist(1).
   137     //    hideNodes().
   138     drawArrows().arrowWidth(1).arrowLength(1);
   139 }