src/demo/graph_to_eps_demo.cc
author alpar
Tue, 11 Jan 2005 09:15:25 +0000
changeset 1073 bedab8bd915f
child 1086 caa13d291528
permissions -rw-r--r--
graph_to_eps mission accomplished.
- lemon/graph_to_eps.h header created
- lemon/bezier.h: Tools to compute with bezier curves (unclean and undocumented
interface, used internally by graph_to_eps.h)
- demo/graph_to_eps_demo.cc: a simple demo for lemon/graph_to_eps.h
     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::EdgeMap<int> ecolors(g);
    71   ListGraph::EdgeMap<int> widths(g);
    72   
    73   coords[n1]=Xy(50,50);  sizes[n1]=1; colors[n1]=1;
    74   coords[n2]=Xy(50,70);  sizes[n2]=2; colors[n2]=2;
    75   coords[n3]=Xy(70,70);  sizes[n3]=1; colors[n3]=3;
    76   coords[n4]=Xy(70,50);  sizes[n4]=2; colors[n4]=4;
    77   coords[n5]=Xy(85,60);  sizes[n5]=3; colors[n5]=5;
    78   
    79   Edge e;
    80 
    81   e=g.addEdge(n1,n2); ecolors[e]=0; widths[e]=1;
    82   e=g.addEdge(n2,n3); ecolors[e]=0; widths[e]=1;
    83   e=g.addEdge(n3,n5); ecolors[e]=0; widths[e]=3;
    84   e=g.addEdge(n5,n4); ecolors[e]=0; widths[e]=1;
    85   e=g.addEdge(n4,n1); ecolors[e]=0; widths[e]=1;
    86   e=g.addEdge(n2,n4); ecolors[e]=1; widths[e]=2;
    87   e=g.addEdge(n3,n4); ecolors[e]=2; widths[e]=1;
    88   
    89   IdMap id(g);
    90 
    91   graphToEps(g,"graph_to_eps_demo_out.eps").scale(10).coords(coords).
    92     nodeScale(2).nodeSizes(sizes).
    93     nodeColors(composeMap(colorSet,colors)).
    94     edgeColors(composeMap(colorSet,ecolors)).
    95     edgeWidthScale(.4).edgeWidths(widths).
    96     nodeTexts(id).nodeTextSize(3);
    97 
    98   graphToEps(g,"graph_to_eps_demo_out_arr.eps").scale(10).coords(coords).
    99     nodeScale(2).nodeSizes(sizes).
   100     nodeColors(composeMap(colorSet,colors)).
   101     edgeColors(composeMap(colorSet,ecolors)).
   102     edgeWidthScale(.4).edgeWidths(widths).
   103     nodeTexts(id).nodeTextSize(3).
   104     drawArrows().arrowWidth(1).arrowLength(1);
   105 
   106   e=g.addEdge(n1,n4); ecolors[e]=2; widths[e]=1;
   107   e=g.addEdge(n4,n1); ecolors[e]=1; widths[e]=2;
   108 
   109   e=g.addEdge(n1,n2); ecolors[e]=1; widths[e]=1;
   110   e=g.addEdge(n1,n2); ecolors[e]=2; widths[e]=1;
   111   e=g.addEdge(n1,n2); ecolors[e]=3; widths[e]=1;
   112   e=g.addEdge(n1,n2); ecolors[e]=4; widths[e]=1;
   113   e=g.addEdge(n1,n2); ecolors[e]=5; widths[e]=1;
   114   e=g.addEdge(n1,n2); ecolors[e]=6; widths[e]=1;
   115   e=g.addEdge(n1,n2); ecolors[e]=7; widths[e]=1;
   116 
   117   graphToEps(g,"graph_to_eps_demo_out_par.eps").scale(10).coords(coords).
   118     nodeScale(2).nodeSizes(sizes).
   119     nodeColors(composeMap(colorSet,colors)).
   120     edgeColors(composeMap(colorSet,ecolors)).
   121     edgeWidthScale(.4).edgeWidths(widths).
   122     nodeTexts(id).nodeTextSize(3).
   123     enableParallel().parEdgeDist(1.5);
   124 
   125   graphToEps(g,"graph_to_eps_demo_out_par_arr.eps").scale(10).coords(coords).
   126     nodeScale(2).nodeSizes(sizes).
   127     nodeColors(composeMap(colorSet,colors)).
   128     edgeColors(composeMap(colorSet,ecolors)).
   129     edgeWidthScale(.3).edgeWidths(widths).
   130     nodeTexts(id).nodeTextSize(3).
   131     enableParallel().parEdgeDist(1).
   132     drawArrows().arrowWidth(1).arrowLength(1);
   133 }