# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1215259968 -7200
# Node ID 769a76ee7c48f0a6183eabafda1dd5e2ff3844c6
# Parent 1e6af6f0843c373a0579fc699ac4a83bb4f5948a
Improvements related to graphToEps()
diff -r 1e6af6f0843c -r 769a76ee7c48 demo/graph_to_eps_demo.cc
|
a
|
b
|
|
| 18 | 18 | |
| 19 | 19 | /// \ingroup demos |
| 20 | 20 | /// \file |
| 21 | | /// \brief Demo of the graph grawing function \ref graphToEps() |
| | 21 | /// \brief Demo of the graph drawing function \ref graphToEps() |
| 22 | 22 | /// |
| 23 | 23 | /// This demo program shows examples how to use the function \ref |
| 24 | 24 | /// graphToEps(). It takes no input but simply creates six |
| 25 | 25 | /// <tt>.eps</tt> files demonstrating the capability of \ref |
| 26 | | /// graphToEps(), and showing how to draw directed/graphs, |
| | 26 | /// graphToEps(), and showing how to draw directed graphs, |
| 27 | 27 | /// how to handle parallel egdes, how to change the properties (like |
| 28 | 28 | /// color, shape, size, title etc.) of nodes and arcs individually |
| 29 | 29 | /// using appropriate \ref maps-page "graph maps". |
| 30 | 30 | /// |
| 31 | 31 | /// \include graph_to_eps_demo.cc |
| 32 | 32 | |
| 33 | | #include <lemon/math.h> |
| 34 | | |
| 35 | | #include<lemon/graph_to_eps.h> |
| 36 | 33 | #include<lemon/list_graph.h> |
| 37 | 34 | #include<lemon/graph_utils.h> |
| | 35 | #include<lemon/graph_to_eps.h> |
| | 36 | #include<lemon/math.h> |
| 38 | 37 | |
| 39 | 38 | using namespace std; |
| 40 | 39 | using namespace lemon; |
| … |
… |
|
| 44 | 43 | Palette palette; |
| 45 | 44 | Palette paletteW(true); |
| 46 | 45 | |
| | 46 | // Create a small digraph |
| 47 | 47 | ListDigraph g; |
| 48 | 48 | typedef ListDigraph::Node Node; |
| 49 | 49 | typedef ListDigraph::NodeIt NodeIt; |
| … |
… |
|
| 60 | 60 | ListDigraph::NodeMap<double> sizes(g); |
| 61 | 61 | ListDigraph::NodeMap<int> colors(g); |
| 62 | 62 | ListDigraph::NodeMap<int> shapes(g); |
| 63 | | ListDigraph::ArcMap<int> ecolors(g); |
| | 63 | ListDigraph::ArcMap<int> acolors(g); |
| 64 | 64 | ListDigraph::ArcMap<int> widths(g); |
| 65 | 65 | |
| 66 | 66 | coords[n1]=Point(50,50); sizes[n1]=1; colors[n1]=1; shapes[n1]=0; |
| … |
… |
|
| 71 | 71 | |
| 72 | 72 | Arc e; |
| 73 | 73 | |
| 74 | | e=g.addArc(n1,n2); ecolors[e]=0; widths[e]=1; |
| 75 | | e=g.addArc(n2,n3); ecolors[e]=0; widths[e]=1; |
| 76 | | e=g.addArc(n3,n5); ecolors[e]=0; widths[e]=3; |
| 77 | | e=g.addArc(n5,n4); ecolors[e]=0; widths[e]=1; |
| 78 | | e=g.addArc(n4,n1); ecolors[e]=0; widths[e]=1; |
| 79 | | e=g.addArc(n2,n4); ecolors[e]=1; widths[e]=2; |
| 80 | | e=g.addArc(n3,n4); ecolors[e]=2; widths[e]=1; |
| | 74 | e=g.addArc(n1,n2); acolors[e]=0; widths[e]=1; |
| | 75 | e=g.addArc(n2,n3); acolors[e]=0; widths[e]=1; |
| | 76 | e=g.addArc(n3,n5); acolors[e]=0; widths[e]=3; |
| | 77 | e=g.addArc(n5,n4); acolors[e]=0; widths[e]=1; |
| | 78 | e=g.addArc(n4,n1); acolors[e]=0; widths[e]=1; |
| | 79 | e=g.addArc(n2,n4); acolors[e]=1; widths[e]=2; |
| | 80 | e=g.addArc(n3,n4); acolors[e]=2; widths[e]=1; |
| 81 | 81 | |
| 82 | 82 | IdMap<ListDigraph,Node> id(g); |
| 83 | 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). |
| | 84 | // Create five .eps files showing the digraph with different options |
| | 85 | cout << "Create 'graph_to_eps_demo_out_1_pure.eps'" << endl; |
| | 86 | graphToEps(g,"graph_to_eps_demo_out_1_pure.eps"). |
| 87 | 87 | coords(coords). |
| 88 | 88 | title("Sample .eps figure"). |
| 89 | | copyright("(C) 2003-2007 LEMON Project"). |
| | 89 | copyright("(C) 2003-2008 LEMON Project"). |
| 90 | 90 | run(); |
| 91 | 91 | |
| 92 | | cout << "Create 'graph_to_eps_demo_out.eps'" << endl; |
| 93 | | graphToEps(g,"graph_to_eps_demo_out.eps"). |
| 94 | | //scale(10). |
| | 92 | cout << "Create 'graph_to_eps_demo_out_2.eps'" << endl; |
| | 93 | graphToEps(g,"graph_to_eps_demo_out_2.eps"). |
| 95 | 94 | coords(coords). |
| 96 | 95 | title("Sample .eps figure"). |
| 97 | | copyright("(C) 2003-2007 LEMON Project"). |
| | 96 | copyright("(C) 2003-2008 LEMON Project"). |
| 98 | 97 | absoluteNodeSizes().absoluteArcWidths(). |
| 99 | 98 | nodeScale(2).nodeSizes(sizes). |
| 100 | 99 | nodeShapes(shapes). |
| 101 | 100 | nodeColors(composeMap(palette,colors)). |
| 102 | | arcColors(composeMap(palette,ecolors)). |
| | 101 | arcColors(composeMap(palette,acolors)). |
| 103 | 102 | arcWidthScale(.4).arcWidths(widths). |
| 104 | 103 | nodeTexts(id).nodeTextSize(3). |
| 105 | 104 | run(); |
| 106 | 105 | |
| 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). |
| | 106 | cout << "Create 'graph_to_eps_demo_out_3_arr.eps'" << endl; |
| | 107 | graphToEps(g,"graph_to_eps_demo_out_3_arr.eps"). |
| 111 | 108 | title("Sample .eps figure (with arrowheads)"). |
| 112 | | copyright("(C) 2003-2007 LEMON Project"). |
| | 109 | copyright("(C) 2003-2008 LEMON Project"). |
| 113 | 110 | absoluteNodeSizes().absoluteArcWidths(). |
| 114 | 111 | nodeColors(composeMap(palette,colors)). |
| 115 | 112 | coords(coords). |
| 116 | 113 | nodeScale(2).nodeSizes(sizes). |
| 117 | 114 | nodeShapes(shapes). |
| 118 | | arcColors(composeMap(palette,ecolors)). |
| | 115 | arcColors(composeMap(palette,acolors)). |
| 119 | 116 | arcWidthScale(.4).arcWidths(widths). |
| 120 | 117 | nodeTexts(id).nodeTextSize(3). |
| 121 | | drawArrows().arrowWidth(1).arrowLength(1). |
| | 118 | drawArrows().arrowWidth(2).arrowLength(2). |
| 122 | 119 | run(); |
| 123 | 120 | |
| 124 | | e=g.addArc(n1,n4); ecolors[e]=2; widths[e]=1; |
| 125 | | e=g.addArc(n4,n1); ecolors[e]=1; widths[e]=2; |
| | 121 | e=g.addArc(n1,n4); acolors[e]=2; widths[e]=1; |
| | 122 | e=g.addArc(n4,n1); acolors[e]=1; widths[e]=2; |
| 126 | 123 | |
| 127 | | e=g.addArc(n1,n2); ecolors[e]=1; widths[e]=1; |
| 128 | | e=g.addArc(n1,n2); ecolors[e]=2; widths[e]=1; |
| 129 | | e=g.addArc(n1,n2); ecolors[e]=3; widths[e]=1; |
| 130 | | e=g.addArc(n1,n2); ecolors[e]=4; widths[e]=1; |
| 131 | | e=g.addArc(n1,n2); ecolors[e]=5; widths[e]=1; |
| 132 | | e=g.addArc(n1,n2); ecolors[e]=6; widths[e]=1; |
| 133 | | e=g.addArc(n1,n2); ecolors[e]=7; widths[e]=1; |
| | 124 | e=g.addArc(n1,n2); acolors[e]=1; widths[e]=1; |
| | 125 | e=g.addArc(n1,n2); acolors[e]=2; widths[e]=1; |
| | 126 | e=g.addArc(n1,n2); acolors[e]=3; widths[e]=1; |
| | 127 | e=g.addArc(n1,n2); acolors[e]=4; widths[e]=1; |
| | 128 | e=g.addArc(n1,n2); acolors[e]=5; widths[e]=1; |
| | 129 | e=g.addArc(n1,n2); acolors[e]=6; widths[e]=1; |
| | 130 | e=g.addArc(n1,n2); acolors[e]=7; widths[e]=1; |
| 134 | 131 | |
| 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 arcs)"). |
| 139 | | copyright("(C) 2003-2007 LEMON Project"). |
| 140 | | absoluteNodeSizes().absoluteArcWidths(). |
| 141 | | nodeShapes(shapes). |
| 142 | | coords(coords). |
| 143 | | nodeScale(2).nodeSizes(sizes). |
| 144 | | nodeColors(composeMap(palette,colors)). |
| 145 | | arcColors(composeMap(palette,ecolors)). |
| 146 | | arcWidthScale(.4).arcWidths(widths). |
| 147 | | nodeTexts(id).nodeTextSize(3). |
| 148 | | enableParallel().parArcDist(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). |
| | 132 | cout << "Create 'graph_to_eps_demo_out_4_par_arr.eps'" << endl; |
| | 133 | graphToEps(g,"graph_to_eps_demo_out_4_par_arr.eps"). |
| 154 | 134 | title("Sample .eps figure (parallel arcs and arrowheads)"). |
| 155 | | copyright("(C) 2003-2007 LEMON Project"). |
| | 135 | copyright("(C) 2003-2008 LEMON Project"). |
| 156 | 136 | absoluteNodeSizes().absoluteArcWidths(). |
| 157 | 137 | nodeScale(2).nodeSizes(sizes). |
| 158 | 138 | coords(coords). |
| 159 | 139 | nodeShapes(shapes). |
| 160 | 140 | nodeColors(composeMap(palette,colors)). |
| 161 | | arcColors(composeMap(palette,ecolors)). |
| | 141 | arcColors(composeMap(palette,acolors)). |
| 162 | 142 | arcWidthScale(.3).arcWidths(widths). |
| 163 | 143 | nodeTexts(id).nodeTextSize(3). |
| 164 | 144 | enableParallel().parArcDist(1). |
| 165 | 145 | drawArrows().arrowWidth(1).arrowLength(1). |
| 166 | 146 | run(); |
| 167 | 147 | |
| 168 | | cout << "Create 'graph_to_eps_demo_out_a4.eps'" << endl; |
| 169 | | graphToEps(g,"graph_to_eps_demo_out_a4.eps").scaleToA4(). |
| | 148 | cout << "Create 'graph_to_eps_demo_out_5_par_arr_a4.eps'" << endl; |
| | 149 | graphToEps(g,"graph_to_eps_demo_out_5_par_arr_a4.eps"). |
| 170 | 150 | title("Sample .eps figure (fits to A4)"). |
| 171 | | copyright("(C) 2003-2007 LEMON Project"). |
| | 151 | copyright("(C) 2003-2008 LEMON Project"). |
| | 152 | scaleToA4(). |
| 172 | 153 | absoluteNodeSizes().absoluteArcWidths(). |
| 173 | 154 | nodeScale(2).nodeSizes(sizes). |
| 174 | 155 | coords(coords). |
| 175 | 156 | nodeShapes(shapes). |
| 176 | 157 | nodeColors(composeMap(palette,colors)). |
| 177 | | arcColors(composeMap(palette,ecolors)). |
| | 158 | arcColors(composeMap(palette,acolors)). |
| 178 | 159 | arcWidthScale(.3).arcWidths(widths). |
| 179 | 160 | nodeTexts(id).nodeTextSize(3). |
| 180 | 161 | enableParallel().parArcDist(1). |
| 181 | 162 | drawArrows().arrowWidth(1).arrowLength(1). |
| 182 | 163 | run(); |
| 183 | 164 | |
| | 165 | // Create an .eps file showing the colors of a default Palette |
| 184 | 166 | ListDigraph h; |
| 185 | 167 | ListDigraph::NodeMap<int> hcolors(h); |
| 186 | 168 | ListDigraph::NodeMap<Point> hcoords(h); |
| … |
… |
|
| 188 | 170 | int cols=int(sqrt(double(palette.size()))); |
| 189 | 171 | for(int i=0;i<int(paletteW.size());i++) { |
| 190 | 172 | Node n=h.addNode(); |
| 191 | | hcoords[n]=Point(i%cols,i/cols); |
| | 173 | hcoords[n]=Point(1+i%cols,1+i/cols); |
| 192 | 174 | hcolors[n]=i; |
| 193 | 175 | } |
| 194 | 176 | |
| 195 | | cout << "Create 'graph_to_eps_demo_out_colors.eps'" << endl; |
| 196 | | graphToEps(h,"graph_to_eps_demo_out_colors.eps"). |
| 197 | | //scale(60). |
| | 177 | cout << "Create 'graph_to_eps_demo_out_6_colors.eps'" << endl; |
| | 178 | graphToEps(h,"graph_to_eps_demo_out_6_colors.eps"). |
| | 179 | scale(60). |
| 198 | 180 | title("Sample .eps figure (Palette demo)"). |
| 199 | | copyright("(C) 2003-2007 LEMON Project"). |
| | 181 | copyright("(C) 2003-2008 LEMON Project"). |
| 200 | 182 | coords(hcoords). |
| 201 | 183 | absoluteNodeSizes().absoluteArcWidths(). |
| 202 | 184 | nodeScale(.45). |
| 203 | 185 | distantColorNodeTexts(). |
| 204 | | // distantBWNodeTexts(). |
| 205 | 186 | nodeTexts(hcolors).nodeTextSize(.6). |
| 206 | 187 | nodeColors(composeMap(paletteW,hcolors)). |
| 207 | 188 | run(); |
| | 189 | |
| | 190 | return 0; |
| 208 | 191 | } |
diff -r 1e6af6f0843c -r 769a76ee7c48 lemon/color.h
|
a
|
b
|
|
| 108 | 108 | public: |
| 109 | 109 | ///Constructor |
| 110 | 110 | |
| 111 | | ///Constructor |
| 112 | | ///\param have_white indicates whether white is amongst the |
| | 111 | ///Constructor. |
| | 112 | ///\param have_white Indicates whether white is among the |
| 113 | 113 | ///provided initial colors (\c true) or not (\c false). If it is true, |
| 114 | 114 | ///white will be assigned to \c 0. |
| 115 | | ///\param num the number of the allocated colors. If it is \c -1, |
| | 115 | ///\param num The number of the allocated colors. If it is \c -1, |
| 116 | 116 | ///the default color configuration is set up (26 color plus optionaly the |
| 117 | 117 | ///white). If \c num is less then 26/27 then the default color |
| 118 | 118 | ///list is cut. Otherwise the color list is filled repeatedly with |
| … |
… |
|
| 153 | 153 | colors.push_back(Color(0,.5,1)); |
| 154 | 154 | colors.push_back(Color(.5,0,1)); |
| 155 | 155 | } while(int(colors.size())<num); |
| 156 | | // colors.push_back(Color(1,1,1)); |
| 157 | 156 | if(num>=0) colors.resize(num); |
| 158 | 157 | } |
| 159 | 158 | ///\e |
| … |
… |
|
| 171 | 170 | { |
| 172 | 171 | colors[i%colors.size()]=c; |
| 173 | 172 | } |
| 174 | | ///Add a new color to the end of the color list. |
| | 173 | ///Adds a new color to the end of the color list. |
| 175 | 174 | void add(const Color &c) |
| 176 | 175 | { |
| 177 | 176 | colors.push_back(c); |
| 178 | 177 | } |
| 179 | 178 | |
| 180 | | ///Sets the number of the exiting colors. |
| | 179 | ///Sets the number of the existing colors. |
| 181 | 180 | void resize(int s) { colors.resize(s);} |
| 182 | 181 | ///Returns the number of the existing colors. |
| 183 | 182 | int size() const { return int(colors.size());} |
diff -r 1e6af6f0843c -r 769a76ee7c48 lemon/graph_to_eps.h
|
a
|
b
|
|
| 63 | 63 | |
| 64 | 64 | ///Default traits class of \ref GraphToEps |
| 65 | 65 | |
| 66 | | ///Default traits class of \ref GraphToEps |
| | 66 | ///Default traits class of \ref GraphToEps. |
| 67 | 67 | /// |
| 68 | 68 | ///\c G is the type of the underlying graph. |
| 69 | 69 | template<class G> |
| … |
… |
|
| 140 | 140 | ///Constructor |
| 141 | 141 | |
| 142 | 142 | ///Constructor |
| 143 | | ///\param _g is a reference to the graph to be printed |
| 144 | | ///\param _os is a reference to the output stream. |
| 145 | | ///\param _os is a reference to the output stream. |
| | 143 | ///\param _g Reference to the graph to be printed. |
| | 144 | ///\param _os Reference to the output stream. |
| | 145 | ///\param _os Reference to the output stream. By default it is <tt>std::cout</tt>. |
| 146 | 146 | ///\param _pros If it is \c true, then the \c ostream referenced by \c _os |
| 147 | 147 | ///will be explicitly deallocated by the destructor. |
| 148 | | ///By default it is <tt>std::cout</tt> |
| 149 | 148 | DefaultGraphToEpsTraits(const G &_g,std::ostream& _os=std::cout, |
| 150 | 149 | bool _pros=false) : |
| 151 | 150 | g(_g), os(_os), |
| … |
… |
|
| 173 | 172 | |
| 174 | 173 | ///Auxiliary class to implement the named parameters of \ref graphToEps() |
| 175 | 174 | |
| 176 | | ///Auxiliary class to implement the named parameters of \ref graphToEps() |
| | 175 | ///Auxiliary class to implement the named parameters of \ref graphToEps(). |
| | 176 | /// |
| | 177 | ///For detailed examples see the \ref graph_to_eps_demo.cc demo file. |
| 177 | 178 | template<class T> class GraphToEps : public T |
| 178 | 179 | { |
| 179 | 180 | // Can't believe it is required by the C++ standard |
| … |
… |
|
| 258 | 259 | public: |
| 259 | 260 | ///Node shapes |
| 260 | 261 | |
| 261 | | ///Node shapes |
| | 262 | ///Node shapes. |
| 262 | 263 | /// |
| 263 | 264 | enum NodeShapes { |
| 264 | 265 | /// = 0 |
| … |
… |
|
| 335 | 336 | ///Sets the map of the node coordinates |
| 336 | 337 | |
| 337 | 338 | ///Sets the map of the node coordinates. |
| 338 | | ///\param x must be a node map with dim2::Point<double> or |
| | 339 | ///\param x must be a node map with \ref dim2::Point "dim2::Point<double>" or |
| 339 | 340 | ///\ref dim2::Point "dim2::Point<int>" values. |
| 340 | 341 | template<class X> GraphToEps<CoordsTraits<X> > coords(const X &x) { |
| 341 | 342 | dontPrint=true; |
| … |
… |
|
| 347 | 348 | }; |
| 348 | 349 | ///Sets the map of the node sizes |
| 349 | 350 | |
| 350 | | ///Sets the map of the node sizes |
| | 351 | ///Sets the map of the node sizes. |
| 351 | 352 | ///\param x must be a node map with \c double (or convertible) values. |
| 352 | 353 | template<class X> GraphToEps<NodeSizesTraits<X> > nodeSizes(const X &x) |
| 353 | 354 | { |
| … |
… |
|
| 376 | 377 | }; |
| 377 | 378 | ///Sets the text printed on the nodes |
| 378 | 379 | |
| 379 | | ///Sets the text printed on the nodes |
| | 380 | ///Sets the text printed on the nodes. |
| 380 | 381 | ///\param x must be a node map with type that can be pushed to a standard |
| 381 | | ///ostream. |
| | 382 | ///\c ostream. |
| 382 | 383 | template<class X> GraphToEps<NodeTextsTraits<X> > nodeTexts(const X &x) |
| 383 | 384 | { |
| 384 | 385 | dontPrint=true; |
| … |
… |
|
| 393 | 394 | |
| 394 | 395 | ///With this command it is possible to insert a verbatim PostScript |
| 395 | 396 | ///block to the nodes. |
| 396 | | ///The PS current point will be moved to the centre of the node before |
| | 397 | ///The PS current point will be moved to the center of the node before |
| 397 | 398 | ///the PostScript block inserted. |
| 398 | 399 | /// |
| 399 | 400 | ///Before and after the block a newline character is inserted so you |
| 400 | 401 | ///don't have to bother with the separators. |
| 401 | 402 | /// |
| 402 | 403 | ///\param x must be a node map with type that can be pushed to a standard |
| 403 | | ///ostream. |
| | 404 | ///\c ostream. |
| 404 | 405 | /// |
| 405 | 406 | ///\sa nodePsTextsPreamble() |
| 406 | 407 | template<class X> GraphToEps<NodePsTextsTraits<X> > nodePsTexts(const X &x) |
| … |
… |
|
| 415 | 416 | }; |
| 416 | 417 | ///Sets the map of the arc widths |
| 417 | 418 | |
| 418 | | ///Sets the map of the arc widths |
| | 419 | ///Sets the map of the arc widths. |
| 419 | 420 | ///\param x must be an arc map with \c double (or convertible) values. |
| 420 | 421 | template<class X> GraphToEps<ArcWidthsTraits<X> > arcWidths(const X &x) |
| 421 | 422 | { |
| … |
… |
|
| 429 | 430 | }; |
| 430 | 431 | ///Sets the map of the node colors |
| 431 | 432 | |
| 432 | | ///Sets the map of the node colors |
| | 433 | ///Sets the map of the node colors. |
| 433 | 434 | ///\param x must be a node map with \ref Color values. |
| 434 | 435 | /// |
| 435 | 436 | ///\sa Palette |
| … |
… |
|
| 445 | 446 | }; |
| 446 | 447 | ///Sets the map of the node text colors |
| 447 | 448 | |
| 448 | | ///Sets the map of the node text colors |
| | 449 | ///Sets the map of the node text colors. |
| 449 | 450 | ///\param x must be a node map with \ref Color values. |
| 450 | 451 | /// |
| 451 | 452 | ///\sa Palette |
| … |
… |
|
| 463 | 464 | }; |
| 464 | 465 | ///Sets the map of the arc colors |
| 465 | 466 | |
| 466 | | ///Sets the map of the arc colors |
| | 467 | ///Sets the map of the arc colors. |
| 467 | 468 | ///\param x must be an arc map with \ref Color values. |
| 468 | 469 | /// |
| 469 | 470 | ///\sa Palette |
| … |
… |
|
| 487 | 488 | /// \sa nodeSizes() |
| 488 | 489 | /// \sa autoNodeScale() |
| 489 | 490 | GraphToEps<T> &nodeScale(double d=.01) {_nodeScale=d;return *this;} |
| 490 | | ///Turns on/off the automatic node width scaling. |
| | 491 | ///Turns on/off the automatic node size scaling. |
| 491 | 492 | |
| 492 | | ///Turns on/off the automatic node width scaling. |
| | 493 | ///Turns on/off the automatic node size scaling. |
| 493 | 494 | /// |
| 494 | 495 | ///\sa nodeScale() |
| 495 | 496 | /// |
| … |
… |
|
| 497 | 498 | _autoNodeScale=b;return *this; |
| 498 | 499 | } |
| 499 | 500 | |
| 500 | | ///Turns on/off the absolutematic node width scaling. |
| | 501 | ///Turns on/off the absolutematic node size scaling. |
| 501 | 502 | |
| 502 | | ///Turns on/off the absolutematic node width scaling. |
| | 503 | ///Turns on/off the absolutematic node size scaling. |
| 503 | 504 | /// |
| 504 | 505 | ///\sa nodeScale() |
| 505 | 506 | /// |
| … |
… |
|
| 508 | 509 | } |
| 509 | 510 | |
| 510 | 511 | ///Negates the Y coordinates. |
| 511 | | |
| 512 | | ///Negates the Y coordinates. |
| 513 | | /// |
| 514 | 512 | GraphToEps<T> &negateY(bool b=true) { |
| 515 | 513 | _negY=b;return *this; |
| 516 | 514 | } |
| … |
… |
|
| 557 | 555 | _absoluteArcWidths=b;return *this; |
| 558 | 556 | } |
| 559 | 557 | ///Sets a global scale factor for the whole picture |
| 560 | | |
| 561 | | ///Sets a global scale factor for the whole picture |
| 562 | | /// |
| 563 | | |
| 564 | 558 | GraphToEps<T> &scale(double d) {_scale=d;return *this;} |
| 565 | 559 | ///Sets the width of the border around the picture |
| 566 | | |
| 567 | | ///Sets the width of the border around the picture |
| 568 | | /// |
| 569 | 560 | GraphToEps<T> &border(double b=10) {_xBorder=_yBorder=b;return *this;} |
| 570 | 561 | ///Sets the width of the border around the picture |
| 571 | | |
| 572 | | ///Sets the width of the border around the picture |
| 573 | | /// |
| 574 | 562 | GraphToEps<T> &border(double x, double y) { |
| 575 | 563 | _xBorder=x;_yBorder=y;return *this; |
| 576 | 564 | } |
| 577 | 565 | ///Sets whether to draw arrows |
| 578 | | |
| 579 | | ///Sets whether to draw arrows |
| 580 | | /// |
| 581 | 566 | GraphToEps<T> &drawArrows(bool b=true) {_drawArrows=b;return *this;} |
| 582 | 567 | ///Sets the length of the arrowheads |
| 583 | | |
| 584 | | ///Sets the length of the arrowheads |
| 585 | | /// |
| 586 | 568 | GraphToEps<T> &arrowLength(double d=1.0) {_arrowLength*=d;return *this;} |
| 587 | 569 | ///Sets the width of the arrowheads |
| 588 | | |
| 589 | | ///Sets the width of the arrowheads |
| 590 | | /// |
| 591 | 570 | GraphToEps<T> &arrowWidth(double d=.3) {_arrowWidth*=d;return *this;} |
| 592 | 571 | |
| 593 | 572 | ///Scales the drawing to fit to A4 page |
| 594 | | |
| 595 | | ///Scales the drawing to fit to A4 page |
| 596 | | /// |
| 597 | 573 | GraphToEps<T> &scaleToA4() {_scaleToA4=true;return *this;} |
| 598 | 574 | |
| 599 | 575 | ///Enables parallel arcs |
| 600 | | |
| 601 | | ///Enables parallel arcs |
| 602 | 576 | GraphToEps<T> &enableParallel(bool b=true) {_enableParallel=b;return *this;} |
| 603 | 577 | |
| 604 | | ///Sets the distance |
| 605 | | |
| 606 | | ///Sets the distance |
| 607 | | /// |
| | 578 | ///Sets the distance between parallel arcs |
| 608 | 579 | GraphToEps<T> &parArcDist(double d) {_parArcDist*=d;return *this;} |
| 609 | 580 | |
| 610 | 581 | ///Hides the arcs |
| 611 | | |
| 612 | | ///Hides the arcs |
| 613 | | /// |
| 614 | 582 | GraphToEps<T> &hideArcs(bool b=true) {_showArcs=!b;return *this;} |
| 615 | 583 | ///Hides the nodes |
| 616 | | |
| 617 | | ///Hides the nodes |
| 618 | | /// |
| 619 | 584 | GraphToEps<T> &hideNodes(bool b=true) {_showNodes=!b;return *this;} |
| 620 | 585 | |
| 621 | 586 | ///Sets the size of the node texts |
| 622 | | |
| 623 | | ///Sets the size of the node texts |
| 624 | | /// |
| 625 | 587 | GraphToEps<T> &nodeTextSize(double d) {_nodeTextSize=d;return *this;} |
| 626 | 588 | |
| 627 | 589 | ///Sets the color of the node texts to be different from the node color |
| 628 | 590 | |
| 629 | 591 | ///Sets the color of the node texts to be as different from the node color |
| 630 | | ///as it is possible |
| 631 | | /// |
| | 592 | ///as it is possible. |
| 632 | 593 | GraphToEps<T> &distantColorNodeTexts() |
| 633 | 594 | {_nodeTextColorType=DIST_COL;return *this;} |
| 634 | 595 | ///Sets the color of the node texts to be black or white and always visible. |
| 635 | 596 | |
| 636 | 597 | ///Sets the color of the node texts to be black or white according to |
| 637 | | ///which is more |
| 638 | | ///different from the node color |
| 639 | | /// |
| | 598 | ///which is more different from the node color. |
| 640 | 599 | GraphToEps<T> &distantBWNodeTexts() |
| 641 | 600 | {_nodeTextColorType=DIST_BW;return *this;} |
| 642 | 601 | |
| … |
… |
|
| 648 | 607 | GraphToEps<T> & nodePsTextsPreamble(const char *str) { |
| 649 | 608 | _nodePsTextsPreamble=str ;return *this; |
| 650 | 609 | } |
| 651 | | ///Sets whether the the graph is undirected |
| | 610 | ///Sets whether the graph is undirected |
| 652 | 611 | |
| 653 | | ///Sets whether the the graph is undirected. |
| | 612 | ///Sets whether the graph is undirected. |
| 654 | 613 | /// |
| 655 | 614 | ///This setting is the default for undirected graphs. |
| 656 | 615 | /// |
| 657 | 616 | ///\sa directed() |
| 658 | 617 | GraphToEps<T> &undirected(bool b=true) {_undirected=b;return *this;} |
| 659 | 618 | |
| 660 | | ///Sets whether the the graph is directed |
| | 619 | ///Sets whether the graph is directed |
| 661 | 620 | |
| 662 | | ///Sets whether the the graph is directed. |
| | 621 | ///Sets whether the graph is directed. |
| 663 | 622 | ///Use it to show the edges as a pair of directed ones. |
| 664 | 623 | /// |
| 665 | 624 | ///This setting is the default for digraphs. |
| … |
… |
|
| 716 | 675 | os << "%!PS-Adobe-2.0 EPSF-2.0\n"; |
| 717 | 676 | if(_title.size()>0) os << "%%Title: " << _title << '\n'; |
| 718 | 677 | if(_copyright.size()>0) os << "%%Copyright: " << _copyright << '\n'; |
| 719 | | // << "%%Copyright: XXXX\n" |
| 720 | 678 | os << "%%Creator: LEMON, graphToEps()\n"; |
| 721 | 679 | |
| 722 | 680 | { |
| … |
… |
|
| 748 | 706 | double max_w=0; |
| 749 | 707 | for(ArcIt e(g);e!=INVALID;++e) |
| 750 | 708 | max_w=std::max(double(_arcWidths[e]),max_w); |
| 751 | | ///\todo better 'epsilon' would be nice here. |
| | 709 | //\todo better 'epsilon' would be nice here. |
| 752 | 710 | if(max_w>EPSILON) { |
| 753 | 711 | _arcWidthScale/=max_w; |
| 754 | 712 | } |
| … |
… |
|
| 758 | 716 | double max_s=0; |
| 759 | 717 | for(NodeIt n(g);n!=INVALID;++n) |
| 760 | 718 | max_s=std::max(double(_nodeSizes[n]),max_s); |
| 761 | | ///\todo better 'epsilon' would be nice here. |
| | 719 | //\todo better 'epsilon' would be nice here. |
| 762 | 720 | if(max_s>EPSILON) { |
| 763 | 721 | _nodeScale/=max_s; |
| 764 | 722 | } |
| … |
… |
|
| 1114 | 1072 | ///@{ |
| 1115 | 1073 | |
| 1116 | 1074 | ///An alias for arcWidths() |
| 1117 | | |
| 1118 | | ///An alias for arcWidths() |
| 1119 | | /// |
| 1120 | 1075 | template<class X> GraphToEps<ArcWidthsTraits<X> > edgeWidths(const X &x) |
| 1121 | 1076 | { |
| 1122 | 1077 | return arcWidths(x); |
| 1123 | 1078 | } |
| 1124 | 1079 | |
| 1125 | 1080 | ///An alias for arcColors() |
| 1126 | | |
| 1127 | | ///An alias for arcColors() |
| 1128 | | /// |
| 1129 | 1081 | template<class X> GraphToEps<ArcColorsTraits<X> > |
| 1130 | 1082 | edgeColors(const X &x) |
| 1131 | 1083 | { |
| … |
… |
|
| 1133 | 1085 | } |
| 1134 | 1086 | |
| 1135 | 1087 | ///An alias for arcWidthScale() |
| 1136 | | |
| 1137 | | ///An alias for arcWidthScale() |
| 1138 | | /// |
| 1139 | 1088 | GraphToEps<T> &edgeWidthScale(double d) {return arcWidthScale(d);} |
| 1140 | 1089 | |
| 1141 | 1090 | ///An alias for autoArcWidthScale() |
| 1142 | | |
| 1143 | | ///An alias for autoArcWidthScale() |
| 1144 | | /// |
| 1145 | 1091 | GraphToEps<T> &autoEdgeWidthScale(bool b=true) |
| 1146 | 1092 | { |
| 1147 | 1093 | return autoArcWidthScale(b); |
| 1148 | 1094 | } |
| 1149 | 1095 | |
| 1150 | 1096 | ///An alias for absoluteArcWidths() |
| 1151 | | |
| 1152 | | ///An alias for absoluteArcWidths() |
| 1153 | | /// |
| 1154 | 1097 | GraphToEps<T> &absoluteEdgeWidths(bool b=true) |
| 1155 | 1098 | { |
| 1156 | 1099 | return absoluteArcWidths(b); |
| 1157 | 1100 | } |
| 1158 | 1101 | |
| 1159 | 1102 | ///An alias for parArcDist() |
| 1160 | | |
| 1161 | | ///An alias for parArcDist() |
| 1162 | | /// |
| 1163 | 1103 | GraphToEps<T> &parEdgeDist(double d) {return parArcDist(d);} |
| 1164 | 1104 | |
| 1165 | 1105 | ///An alias for hideArcs() |
| 1166 | | |
| 1167 | | ///An alias for hideArcs() |
| 1168 | | /// |
| 1169 | 1106 | GraphToEps<T> &hideEdges(bool b=true) {return hideArcs(b);} |
| 1170 | 1107 | |
| 1171 | 1108 | ///@} |
| … |
… |
|
| 1185 | 1122 | |
| 1186 | 1123 | ///\ingroup eps_io |
| 1187 | 1124 | ///Generates an EPS file from a graph. |
| 1188 | | ///\param g is a reference to the graph to be printed |
| 1189 | | ///\param os is a reference to the output stream. |
| 1190 | | ///By default it is <tt>std::cout</tt> |
| | 1125 | ///\param g Reference to the graph to be printed. |
| | 1126 | ///\param os Reference to the output stream. |
| | 1127 | ///By default it is <tt>std::cout</tt>. |
| 1191 | 1128 | /// |
| 1192 | 1129 | ///This function also has a lot of |
| 1193 | 1130 | ///\ref named-templ-func-param "named parameters", |
| … |
… |
|
| 1198 | 1135 | /// .nodeScale(2).nodeSizes(sizes) |
| 1199 | 1136 | /// .arcWidthScale(.4).run(); |
| 1200 | 1137 | ///\endcode |
| | 1138 | /// |
| | 1139 | ///For more detailed examples see the \ref graph_to_eps_demo.cc demo file. |
| | 1140 | /// |
| 1201 | 1141 | ///\warning Don't forget to put the \ref GraphToEps::run() "run()" |
| 1202 | 1142 | ///to the end of the parameter list. |
| 1203 | 1143 | ///\sa GraphToEps |