0
3
0
... | ... |
@@ -18,23 +18,22 @@ |
18 | 18 |
|
19 | 19 |
/// \ingroup demos |
20 | 20 |
/// \file |
21 |
/// \brief Demo of the graph |
|
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 |
|
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,6 +43,7 @@ |
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,7 +60,7 @@ |
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> |
|
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; |
... | ... |
@@ -69,118 +69,116 @@ |
69 | 69 |
coords[n4]=Point(70,50); sizes[n4]=2; colors[n4]=4; shapes[n4]=1; |
70 | 70 |
coords[n5]=Point(85,60); sizes[n5]=3; colors[n5]=5; shapes[n5]=2; |
71 | 71 |
|
72 |
Arc |
|
72 |
Arc a; |
|
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 |
|
|
74 |
a=g.addArc(n1,n2); acolors[a]=0; widths[a]=1; |
|
75 |
a=g.addArc(n2,n3); acolors[a]=0; widths[a]=1; |
|
76 |
a=g.addArc(n3,n5); acolors[a]=0; widths[a]=3; |
|
77 |
a=g.addArc(n5,n4); acolors[a]=0; widths[a]=1; |
|
78 |
a=g.addArc(n4,n1); acolors[a]=0; widths[a]=1; |
|
79 |
a=g.addArc(n2,n4); acolors[a]=1; widths[a]=2; |
|
80 |
a=g.addArc(n3,n4); acolors[a]=2; widths[a]=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 |
|
|
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- |
|
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 |
|
|
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- |
|
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, |
|
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- |
|
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, |
|
115 |
arcColors(composeMap(palette,acolors)). |
|
119 | 116 |
arcWidthScale(.4).arcWidths(widths). |
120 | 117 |
nodeTexts(id).nodeTextSize(3). |
121 |
drawArrows().arrowWidth( |
|
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 |
a=g.addArc(n1,n4); acolors[a]=2; widths[a]=1; |
|
122 |
a=g.addArc(n4,n1); acolors[a]=1; widths[a]=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 |
|
|
124 |
a=g.addArc(n1,n2); acolors[a]=1; widths[a]=1; |
|
125 |
a=g.addArc(n1,n2); acolors[a]=2; widths[a]=1; |
|
126 |
a=g.addArc(n1,n2); acolors[a]=3; widths[a]=1; |
|
127 |
a=g.addArc(n1,n2); acolors[a]=4; widths[a]=1; |
|
128 |
a=g.addArc(n1,n2); acolors[a]=5; widths[a]=1; |
|
129 |
a=g.addArc(n1,n2); acolors[a]=6; widths[a]=1; |
|
130 |
a=g.addArc(n1,n2); acolors[a]=7; widths[a]=1; |
|
134 | 131 |
|
135 | 132 |
cout << "Create 'graph_to_eps_demo_out_par.eps'" << endl; |
136 | 133 |
graphToEps(g,"graph_to_eps_demo_out_par.eps"). |
137 | 134 |
//scale(10). |
138 | 135 |
title("Sample .eps figure (parallel arcs)"). |
139 |
copyright("(C) 2003- |
|
136 |
copyright("(C) 2003-2008 LEMON Project"). |
|
140 | 137 |
absoluteNodeSizes().absoluteArcWidths(). |
141 | 138 |
nodeShapes(shapes). |
142 | 139 |
coords(coords). |
143 | 140 |
nodeScale(2).nodeSizes(sizes). |
144 | 141 |
nodeColors(composeMap(palette,colors)). |
145 |
arcColors(composeMap(palette, |
|
142 |
arcColors(composeMap(palette,acolors)). |
|
146 | 143 |
arcWidthScale(.4).arcWidths(widths). |
147 | 144 |
nodeTexts(id).nodeTextSize(3). |
148 | 145 |
enableParallel().parArcDist(1.5). |
149 | 146 |
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). |
|
147 |
|
|
148 |
cout << "Create 'graph_to_eps_demo_out_4_par_arr.eps'" << endl; |
|
149 |
graphToEps(g,"graph_to_eps_demo_out_4_par_arr.eps"). |
|
154 | 150 |
title("Sample .eps figure (parallel arcs and arrowheads)"). |
155 |
copyright("(C) 2003- |
|
151 |
copyright("(C) 2003-2008 LEMON Project"). |
|
156 | 152 |
absoluteNodeSizes().absoluteArcWidths(). |
157 | 153 |
nodeScale(2).nodeSizes(sizes). |
158 | 154 |
coords(coords). |
159 | 155 |
nodeShapes(shapes). |
160 | 156 |
nodeColors(composeMap(palette,colors)). |
161 |
arcColors(composeMap(palette, |
|
157 |
arcColors(composeMap(palette,acolors)). |
|
162 | 158 |
arcWidthScale(.3).arcWidths(widths). |
163 | 159 |
nodeTexts(id).nodeTextSize(3). |
164 | 160 |
enableParallel().parArcDist(1). |
165 | 161 |
drawArrows().arrowWidth(1).arrowLength(1). |
166 | 162 |
run(); |
167 | 163 |
|
168 |
cout << "Create 'graph_to_eps_demo_out_a4.eps'" << endl; |
|
169 |
graphToEps(g,"graph_to_eps_demo_out_a4.eps").scaleToA4(). |
|
164 |
cout << "Create 'graph_to_eps_demo_out_5_par_arr_a4.eps'" << endl; |
|
165 |
graphToEps(g,"graph_to_eps_demo_out_5_par_arr_a4.eps"). |
|
170 | 166 |
title("Sample .eps figure (fits to A4)"). |
171 |
copyright("(C) 2003- |
|
167 |
copyright("(C) 2003-2008 LEMON Project"). |
|
168 |
scaleToA4(). |
|
172 | 169 |
absoluteNodeSizes().absoluteArcWidths(). |
173 | 170 |
nodeScale(2).nodeSizes(sizes). |
174 | 171 |
coords(coords). |
175 | 172 |
nodeShapes(shapes). |
176 | 173 |
nodeColors(composeMap(palette,colors)). |
177 |
arcColors(composeMap(palette, |
|
174 |
arcColors(composeMap(palette,acolors)). |
|
178 | 175 |
arcWidthScale(.3).arcWidths(widths). |
179 | 176 |
nodeTexts(id).nodeTextSize(3). |
180 | 177 |
enableParallel().parArcDist(1). |
181 | 178 |
drawArrows().arrowWidth(1).arrowLength(1). |
182 | 179 |
run(); |
183 | 180 |
|
181 |
// Create an .eps file showing the colors of a default Palette |
|
184 | 182 |
ListDigraph h; |
185 | 183 |
ListDigraph::NodeMap<int> hcolors(h); |
186 | 184 |
ListDigraph::NodeMap<Point> hcoords(h); |
... | ... |
@@ -188,21 +186,22 @@ |
188 | 186 |
int cols=int(sqrt(double(palette.size()))); |
189 | 187 |
for(int i=0;i<int(paletteW.size());i++) { |
190 | 188 |
Node n=h.addNode(); |
191 |
hcoords[n]=Point(i%cols,i/cols); |
|
189 |
hcoords[n]=Point(1+i%cols,1+i/cols); |
|
192 | 190 |
hcolors[n]=i; |
193 | 191 |
} |
194 | 192 |
|
195 |
cout << "Create 'graph_to_eps_demo_out_colors.eps'" << endl; |
|
196 |
graphToEps(h,"graph_to_eps_demo_out_colors.eps"). |
|
197 |
|
|
193 |
cout << "Create 'graph_to_eps_demo_out_6_colors.eps'" << endl; |
|
194 |
graphToEps(h,"graph_to_eps_demo_out_6_colors.eps"). |
|
195 |
scale(60). |
|
198 | 196 |
title("Sample .eps figure (Palette demo)"). |
199 |
copyright("(C) 2003- |
|
197 |
copyright("(C) 2003-2008 LEMON Project"). |
|
200 | 198 |
coords(hcoords). |
201 | 199 |
absoluteNodeSizes().absoluteArcWidths(). |
202 | 200 |
nodeScale(.45). |
203 | 201 |
distantColorNodeTexts(). |
204 |
// distantBWNodeTexts(). |
|
205 | 202 |
nodeTexts(hcolors).nodeTextSize(.6). |
206 | 203 |
nodeColors(composeMap(paletteW,hcolors)). |
207 | 204 |
run(); |
205 |
|
|
206 |
return 0; |
|
208 | 207 |
} |
... | ... |
@@ -108,11 +108,11 @@ |
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 |
|
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,7 +153,6 @@ |
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,13 +170,13 @@ |
171 | 170 |
{ |
172 | 171 |
colors[i%colors.size()]=c; |
173 | 172 |
} |
174 |
/// |
|
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 |
|
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());} |
... | ... |
@@ -63,7 +63,7 @@ |
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,12 +140,11 @@ |
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 |
|
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,7 +172,9 @@ |
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,7 +259,7 @@ |
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,7 +336,7 @@ |
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,7 +348,7 @@ |
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,9 +377,9 @@ |
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,14 +394,14 @@ |
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 |
|
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,7 +416,7 @@ |
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,7 +430,7 @@ |
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,7 +446,7 @@ |
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,7 +464,7 @@ |
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,9 +488,9 @@ |
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 |
|
491 |
///Turns on/off the automatic node size scaling. |
|
491 | 492 |
|
492 |
///Turns on/off the automatic node |
|
493 |
///Turns on/off the automatic node size scaling. |
|
493 | 494 |
/// |
494 | 495 |
///\sa nodeScale() |
495 | 496 |
/// |
... | ... |
@@ -497,9 +498,9 @@ |
497 | 498 |
_autoNodeScale=b;return *this; |
498 | 499 |
} |
499 | 500 |
|
500 |
///Turns on/off the absolutematic node |
|
501 |
///Turns on/off the absolutematic node size scaling. |
|
501 | 502 |
|
502 |
///Turns on/off the absolutematic node |
|
503 |
///Turns on/off the absolutematic node size scaling. |
|
503 | 504 |
/// |
504 | 505 |
///\sa nodeScale() |
505 | 506 |
/// |
... | ... |
@@ -508,9 +509,6 @@ |
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,86 +555,47 @@ |
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,18 +607,18 @@ |
648 | 607 |
GraphToEps<T> & nodePsTextsPreamble(const char *str) { |
649 | 608 |
_nodePsTextsPreamble=str ;return *this; |
650 | 609 |
} |
651 |
///Sets whether the |
|
610 |
///Sets whether the graph is undirected |
|
652 | 611 |
|
653 |
///Sets whether the |
|
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 |
|
619 |
///Sets whether the graph is directed |
|
661 | 620 |
|
662 |
///Sets whether the |
|
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,7 +675,6 @@ |
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,7 +706,7 @@ |
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 |
|
|
709 |
//\todo better 'epsilon' would be nice here. |
|
752 | 710 |
if(max_w>EPSILON) { |
753 | 711 |
_arcWidthScale/=max_w; |
754 | 712 |
} |
... | ... |
@@ -758,7 +716,7 @@ |
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 |
|
|
719 |
//\todo better 'epsilon' would be nice here. |
|
762 | 720 |
if(max_s>EPSILON) { |
763 | 721 |
_nodeScale/=max_s; |
764 | 722 |
} |
... | ... |
@@ -1114,18 +1072,12 @@ |
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,39 +1085,24 @@ |
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,9 +1122,9 @@ |
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 |
/// |
|
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,6 +1135,9 @@ |
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 |
0 comments (0 inline)