4 #################################
5 ### GRAPH VISUALISATION ###
6 #################################
9 my($nodes,$edges,$filename) = @_;
11 open VIZ, "> $filename.dot";
12 print VIZ "graph essai { \n";
13 print VIZ " graph [overlap=scale]\n";
14 #print VIZ " graph [overlap=false spline=true]\n";
15 print VIZ " node [shape=box, style=filled]\n";
16 print VIZ " node [width=.3, height=.3, style=filled, color=skyblue]\n";
19 foreach $u (sort (keys %$nodes)){
20 print VIZ " \"$u\" [label=\"$u\"";
21 # if((defined($$nodes{$u}{max_interf}))&&($$nodes{$u}{max_interf}==1)) {print VIZ ",color=green";}
22 if(defined($$nodes{$u}{host}) && ($$nodes{$u}{host}==1)) {print VIZ ",color=red";}
26 foreach $e (sort (keys %$edges)){
27 my($src)=$$edges{$e}{src};
28 my($dst)=$$edges{$e}{dst};
29 # my($len)=log(10000/$$edges{$e}{bw});
30 print VIZ " \"$src\" -- \"$dst\" [";
31 # print VIZ "len=$len";
32 # print VIZ "label=$e";
33 if($#{$$edges{$e}{using_path}}>=0) {
34 print VIZ "color=red";
36 print VIZ "color=gray";
44 system("neato -Tps $filename.dot > $filename.ps");
45 # system("gv $filename.ps");
46 system("pstoedit -f fig $filename.ps $filename.fig 2>/dev/null");
47 # system("xfig -startg 0 $filename.fig ");
51 my($nodes,$edges,$filename) = @_;
53 open VIZ, "> $filename.dot";
54 print VIZ "digraph essai { \n";
55 print VIZ " graph [overlap=scale]\n";
56 #print VIZ " graph [overlap=false spline=true]\n";
57 print VIZ " node [shape=box, style=filled]\n";
58 print VIZ " node [width=.3, height=.3, style=filled, color=skyblue]\n";
61 foreach $u (sort (keys %$nodes)){
62 print VIZ " $u [label=$u";
63 if((defined($$nodes{$u}{host}))&&($$nodes{$u}{host}==1)) {print VIZ ",color=red";}
67 foreach $e (sort (keys %$edges)){
68 my($src)=$$edges{$e}{src};
69 my($dst)=$$edges{$e}{dst};
70 # my($len)=log(10000/$$edges{$e}{bw});
71 print VIZ " $src -> $dst\n";
72 # print VIZ "len=$len";
73 # print VIZ "label=$e";
79 system("dot -Tps $filename.dot > $filename.ps");
80 # system("gv $filename.ps");
81 system("pstoedit -f fig $filename.ps $filename.fig 2>/dev/null");
82 system("xfig -startg 0 $filename.fig ");
86 my($nodes,$edges,$filename) = @_;
88 open VIZ, "> $filename.fig";
90 print VIZ "#FIG 3.2\n";
91 print VIZ "Landscape\n";
103 foreach $u (sort (keys %$nodes)){
104 my($x) = $scale * $$nodes{$u}{X};
105 my($y) = $scale * $$nodes{$u}{Y};
106 print VIZ "4 1 0 50 -1 0 12 0.0000 0 135 270 $x $y $u\\001\n";
109 foreach $e (sort (keys %$edges)){
110 my($src)=$$edges{$e}{src};
111 my($dst)=$$edges{$e}{dst};
112 my($x1) = $scale * $$nodes{$src}{X};
113 my($y1) = $scale * $$nodes{$src}{Y};
114 my($x2) = $scale * $$nodes{$dst}{X};
115 my($y2) = $scale * $$nodes{$dst}{Y};
116 print VIZ "2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2\n";
117 print VIZ "\t $x1 $y1 $x2 $y2\n";
121 system("xfig -startg 0 $filename.fig ");
125 my($nodes,$edges,$count_interferences,$value_interferences,$figbase,$filename) = @_;
127 system("cp $figbase.fig $filename.fig");
128 open FIG, ">> $filename.fig";
130 foreach $e (@{$$count_interferences{$value_interferences}}){
134 print STDERR "($src - $dst)\n";
135 $src = `grep ' $src\\\\001' $filename.fig`;
136 $dst = `grep ' $dst\\\\001' $filename.fig`;
137 @tab = split(/\s+/,$src);
140 @tab = split(/\s+/,$dst);
143 print FIG "2 1 0 3 14 7 999 -1 -1 0.000 0 0 -1 0 0 2\n";
144 print FIG "\t $x1 $y1 $x2 $y2\n";
145 # print VIZ " $src -- $dst [color=green];\n";
148 # system("xfig -startg 0 $filename.fig ");
149 system("fig2dev -L png $filename.fig $filename.png");
150 unlink("$filename.fig");
154 sub graph_get_layout{
155 my($nodes,$edges,$filename) = @_;
157 graph2viz($nodes,$edges,$filename);
160 foreach $u (sort (keys %$nodes)){
161 my($val_u) = `grep ' $u\\\\001' $filename.fig`;
162 my(@tab) = split(/\s+/,$val_u);
170 sub graph2viz_withlayout{
171 my($nodes,$edges,$filename) = @_;
173 open FIG, ">> $filename.fig";
175 foreach $u (sort (keys %$nodes)){
176 my($x1) = int ($$nodes{$u}{X});
177 my($y1) = int ($$nodes{$u}{Y});
178 print FIG "1 3 0 1 0 31 50 -1 20 0.000 1 0.0000 $x1 $y1 75 75 $x1 $y1 ".($x1+75)." $y1\n";
180 foreach $e (sort (keys %$edges)){
181 my($src)=$$edges{$e}{src};
182 my($dst)=$$edges{$e}{dst};
183 my($x1) = int ($$nodes{$src}{X});
184 my($y1) = int ($$nodes{$src}{Y});
185 my($x2) = int ($$nodes{$dst}{X});
186 my($y2) = int ($$nodes{$dst}{Y});
187 print FIG "2 1 0 3 14 7 60 -1 -1 0.000 0 0 -1 0 0 2\n";
188 print FIG "\t $x1 $y1 $x2 $y2\n";
191 # system("xfig -startg 0 $filename.fig ");
192 # system("fig2dev -L png $filename.fig $filename.png");
198 if(!defined($M)) {return;}
201 my(@node_list) = sort (keys %$M);
202 my($n) = scalar(@node_list);
204 foreach $u (0..$n-1){
209 foreach $u (@node_list){
210 if(defined($$M{$u})) {
211 foreach $v (@node_list){
212 if(defined($$M{$u}{$v})){
213 print "$$M{$u}{$v} ";
221 foreach $u (0..$n-1){
229 my($filename) = "foo";
230 open VIZ, "> $filename.dot";
232 print VIZ "# Brite topology translated by Alvin\n";
233 print VIZ "graph essai { \n";
234 print VIZ " graph [overlap=scale]\n";
236 #print VIZ " graph [overlap=false spline=true]\n";
237 print VIZ " node [shape=box, style=filled]\n";
238 print VIZ " node [width=.3, height=.3, style=filled, color=skyblue]\n";
239 my(@node_list) = sort (keys %$M);
240 my($n) = scalar(@node_list);
243 foreach $u (@node_list){
244 print VIZ " $u [label=$u, color = red];\n";
247 foreach $u (@node_list){
248 foreach $v (@node_list){
250 print VIZ " $u -- $v ;\n";
257 system("neato -Tps $filename.dot > $filename.ps");
258 system("gv $filename.ps");
269 } elsif (ref($M) eq "SCALAR") {
272 } elsif (ref($M) eq "HASH") {
274 foreach $key (sort (keys %{$M})) {
275 if($key eq "number_hops") {next;}
276 if($key eq "shortest_route") {next;}
277 if($key eq "using_path") {next;}
278 print "\"$key\" => ";
279 print_object($$M{$key});
283 } elsif (ref($M) eq "ARRAY") {
285 foreach $key (0..$#$M) {
286 print_object($$M[$key]);
295 # my($indent,$M) = @_;
300 # } elsif (ref($M) eq "SCALAR") {
303 # } elsif (ref($M) eq "HASH") {
305 # foreach $key (sort (keys %{$M})) {
306 # print "$indent $key => { ";
307 # print_object($indent." ", $$M{$key});
308 # print "$indent }\n"
310 # } elsif (ref($M) eq "ARRAY") {
312 # foreach $key (0..$#$M) {
313 # print "$indent $key : [";
314 # print_object($indent." ", $$M[$key]);
315 # print "$indent ]\n"