ruby-graphviz_c 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gemrc +0 -0
- data/.gitignore +9 -0
- data/.travis.yml +7 -0
- data/AUTHORS.rdoc +33 -0
- data/CHANGELOG.rdoc +287 -0
- data/COPYING.rdoc +133 -0
- data/Gemfile +4 -0
- data/README.rdoc +206 -0
- data/Rakefile +71 -0
- data/bin/dot2ruby +91 -0
- data/bin/gem2gv +165 -0
- data/bin/git2gv +167 -0
- data/bin/ruby2gv +234 -0
- data/bin/xml2gv +96 -0
- data/examples/dot/JSP.dot +52 -0
- data/examples/dot/balanced.dot +36 -0
- data/examples/dot/cluster.dot +30 -0
- data/examples/dot/dotgraph.dot +28 -0
- data/examples/dot/fsm.dot +20 -0
- data/examples/dot/genetic.dot +118 -0
- data/examples/dot/hello.dot +1 -0
- data/examples/dot/hello_test.rb +33 -0
- data/examples/dot/lion_share.dot +103 -0
- data/examples/dot/prof.dot +150 -0
- data/examples/dot/psg.dot +28 -0
- data/examples/dot/rank.dot +6 -0
- data/examples/dot/sdh.dot +284 -0
- data/examples/dot/siblings.dot +492 -0
- data/examples/dot/so-sample001.gv +30 -0
- data/examples/dot/so-sample002.gv +33 -0
- data/examples/dot/so-sample003.gv +45 -0
- data/examples/dot/test.dot +17 -0
- data/examples/dot/test_parse.rb +13 -0
- data/examples/dot/this_crach_with_dot_2.20.dot +24 -0
- data/examples/dot/unix.dot +104 -0
- data/examples/graphml/attributes.ext.graphml +12 -0
- data/examples/graphml/attributes.graphml +40 -0
- data/examples/graphml/cluster.graphml +75 -0
- data/examples/graphml/failed_graph.graphml +461 -0
- data/examples/graphml/hyper.graphml +29 -0
- data/examples/graphml/nested.graphml +54 -0
- data/examples/graphml/port.graphml +32 -0
- data/examples/graphml/simple.graphml +30 -0
- data/examples/hello.png +0 -0
- data/examples/rgv/rgv.ps +125 -0
- data/examples/rgv/test_rgv.rb +12 -0
- data/examples/sample01.rb +32 -0
- data/examples/sample02.rb +42 -0
- data/examples/sample03.rb +31 -0
- data/examples/sample04.rb +22 -0
- data/examples/sample05.rb +32 -0
- data/examples/sample06.rb +46 -0
- data/examples/sample07.rb +23 -0
- data/examples/sample08.rb +34 -0
- data/examples/sample09.rb +50 -0
- data/examples/sample10.rb +50 -0
- data/examples/sample11.rb +42 -0
- data/examples/sample12.rb +55 -0
- data/examples/sample13.rb +48 -0
- data/examples/sample14.rb +44 -0
- data/examples/sample15.rb +25 -0
- data/examples/sample16.rb +8 -0
- data/examples/sample17.rb +92 -0
- data/examples/sample18.rb +24 -0
- data/examples/sample19.rb +59 -0
- data/examples/sample20.rb +47 -0
- data/examples/sample21.rb +12 -0
- data/examples/sample22.rb +10 -0
- data/examples/sample23.rb +11 -0
- data/examples/sample24.rb +11 -0
- data/examples/sample25.rb +11 -0
- data/examples/sample26.rb +8 -0
- data/examples/sample27.rb +8 -0
- data/examples/sample28.rb +12 -0
- data/examples/sample29.rb +8 -0
- data/examples/sample30.rb +12 -0
- data/examples/sample31.rb +10 -0
- data/examples/sample32.rb +14 -0
- data/examples/sample33.rb +43 -0
- data/examples/sample34.rb +29 -0
- data/examples/sample35.rb +43 -0
- data/examples/sample36.rb +35 -0
- data/examples/sample37.rb +87 -0
- data/examples/sample38.rb +12 -0
- data/examples/sample39.rb +11 -0
- data/examples/sample40.rb +17 -0
- data/examples/sample41.rb +8 -0
- data/examples/sample42.rb +35 -0
- data/examples/sample43.rb +26 -0
- data/examples/sample44.rb +97 -0
- data/examples/sample45.rb +24 -0
- data/examples/sample46.rb +43 -0
- data/examples/sample47.rb +7 -0
- data/examples/sample48.rb +62 -0
- data/examples/sample49.rb +10 -0
- data/examples/sample50.rb +215 -0
- data/examples/sample51.rb +37 -0
- data/examples/sample52.rb +62 -0
- data/examples/sample53.rb +26 -0
- data/examples/sample54.rb +26 -0
- data/examples/sample55.rb +9 -0
- data/examples/sample56.rb +10 -0
- data/examples/sample57.rb +8 -0
- data/examples/sample58.rb +33 -0
- data/examples/sample59.rb +14 -0
- data/examples/sample60.rb +12 -0
- data/examples/sample61.rb +12 -0
- data/examples/sample62.rb +24 -0
- data/examples/sample63.rb +32 -0
- data/examples/sample64.rb +31 -0
- data/examples/sample65.rb +9 -0
- data/examples/sample66.rb +4 -0
- data/examples/sample67.rb +10 -0
- data/examples/sample68.rb +27 -0
- data/examples/sample69.rb +23 -0
- data/examples/sample70.rb +9 -0
- data/examples/sample99.rb +70 -0
- data/examples/sdlshapes/README +2 -0
- data/examples/sdlshapes/sdl.ps +655 -0
- data/examples/sdlshapes/sdlshapes.dot +78 -0
- data/examples/test.xml +26 -0
- data/examples/theory/pert.rb +47 -0
- data/examples/theory/tests.rb +87 -0
- data/lib/ext/gvpr/dot2ruby.g +185 -0
- data/lib/graphviz/attrs.rb +73 -0
- data/lib/graphviz/constants.rb +294 -0
- data/lib/graphviz/core_ext.rb +64 -0
- data/lib/graphviz/dot2ruby.rb +59 -0
- data/lib/graphviz/dot_script.rb +109 -0
- data/lib/graphviz/dsl.rb +67 -0
- data/lib/graphviz/edge.rb +197 -0
- data/lib/graphviz/elements.rb +39 -0
- data/lib/graphviz/ext.rb +17 -0
- data/lib/graphviz/family_tree/couple.rb +63 -0
- data/lib/graphviz/family_tree/generation.rb +39 -0
- data/lib/graphviz/family_tree/person.rb +120 -0
- data/lib/graphviz/family_tree/sibling.rb +13 -0
- data/lib/graphviz/family_tree.rb +118 -0
- data/lib/graphviz/graphml.rb +268 -0
- data/lib/graphviz/math/matrix.rb +221 -0
- data/lib/graphviz/node.rb +160 -0
- data/lib/graphviz/nothugly/nothugly.xsl +321 -0
- data/lib/graphviz/nothugly.rb +63 -0
- data/lib/graphviz/theory.rb +321 -0
- data/lib/graphviz/types/arrow_type.rb +32 -0
- data/lib/graphviz/types/color.rb +58 -0
- data/lib/graphviz/types/color_list.rb +24 -0
- data/lib/graphviz/types/esc_string.rb +20 -0
- data/lib/graphviz/types/gv_bool.rb +49 -0
- data/lib/graphviz/types/gv_double.rb +32 -0
- data/lib/graphviz/types/html_string.rb +18 -0
- data/lib/graphviz/types/lbl_string.rb +22 -0
- data/lib/graphviz/types/rect.rb +35 -0
- data/lib/graphviz/types/spline_type.rb +77 -0
- data/lib/graphviz/types.rb +22 -0
- data/lib/graphviz/utils/colors.rb +1018 -0
- data/lib/graphviz/utils.rb +70 -0
- data/lib/graphviz/xml.rb +119 -0
- data/lib/graphviz.rb +967 -0
- data/lib/ruby-graphviz.rb +1 -0
- data/man/dot2ruby.1 +66 -0
- data/man/dot2ruby.1.ronn +55 -0
- data/man/gem2gv.1 +60 -0
- data/man/gem2gv.1.ronn +47 -0
- data/man/git2gv.1 +48 -0
- data/man/git2gv.1.ronn +40 -0
- data/man/ruby2gv.1 +60 -0
- data/man/ruby2gv.1.ronn +47 -0
- data/man/xml2gv.1 +48 -0
- data/man/xml2gv.1.ronn +39 -0
- data/ruby-graphviz.gemspec +47 -0
- data/setup.rb +1585 -0
- data/test/helper.rb +13 -0
- data/test/support.rb +95 -0
- data/test/test_dot_script.rb +47 -0
- data/test/test_examples.rb +151 -0
- data/test/test_graph.rb +115 -0
- data/test/test_search.rb +29 -0
- data/test/test_subgraph.rb +27 -0
- data/test/test_theory.rb +98 -0
- data/test/test_types.rb +65 -0
- data/test/test_utils_colors.rb +52 -0
- metadata +301 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
# http://www.graphviz.org/Gallery/undirected/process.html
|
2
|
+
#
|
3
|
+
# graph G {
|
4
|
+
# run -- intr;
|
5
|
+
# intr -- runbl;
|
6
|
+
# runbl -- run;
|
7
|
+
# run -- kernel;
|
8
|
+
# kernel -- zombie;
|
9
|
+
# kernel -- sleep;
|
10
|
+
# kernel -- runmem;
|
11
|
+
# sleep -- swap;
|
12
|
+
# swap -- runswap;
|
13
|
+
# runswap -- new;
|
14
|
+
# runswap -- runmem;
|
15
|
+
# new -- runmem;
|
16
|
+
# sleep -- runmem;
|
17
|
+
# }
|
18
|
+
|
19
|
+
$:.unshift( "../../lib" );
|
20
|
+
require "graphviz"
|
21
|
+
|
22
|
+
GraphViz::new( :G, :type => :graph ) { |g|
|
23
|
+
g._new[:label] = "new"
|
24
|
+
g.run << g.intr
|
25
|
+
g.intr << g.runbl
|
26
|
+
g.runbl << g.run
|
27
|
+
g.run << g.kernel
|
28
|
+
g.kernel << g.zombie
|
29
|
+
g.kernel << g.sleep
|
30
|
+
g.kernel << g.runmem
|
31
|
+
g.sleep << g.swap
|
32
|
+
g.swap << g.runswap
|
33
|
+
g.runswap << g._new
|
34
|
+
g.runswap << g.runmem
|
35
|
+
g._new << g.runmem
|
36
|
+
g.sleep << g.runmem
|
37
|
+
}.output( :png => "#{$0}.png", :use => :fdp )
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# http://www.graphviz.org/Gallery/directed/traffic_lights.gv.txt
|
2
|
+
#
|
3
|
+
# digraph TrafficLights {
|
4
|
+
# node [shape=box]; gy2; yr2; rg2; gy1; yr1; rg1;
|
5
|
+
# node [shape=circle,fixedsize=true,width=0.9]; green2; yellow2; red2; safe2; safe1; green1; yellow1; red1;
|
6
|
+
# gy2->yellow2;
|
7
|
+
# rg2->green2;
|
8
|
+
# yr2->safe1;
|
9
|
+
# yr2->red2;
|
10
|
+
# safe2->rg2;
|
11
|
+
# green2->gy2;
|
12
|
+
# yellow2->yr2;
|
13
|
+
# red2->rg2;
|
14
|
+
# gy1->yellow1;
|
15
|
+
# rg1->green1;
|
16
|
+
# yr1->safe2;
|
17
|
+
# yr1->red1;
|
18
|
+
# safe1->rg1;
|
19
|
+
# green1->gy1;
|
20
|
+
# yellow1->yr1;
|
21
|
+
# red1->rg1;
|
22
|
+
#
|
23
|
+
# overlap=false
|
24
|
+
# label="PetriNet Model TrafficLights\nExtracted from ConceptBase and layed out by Graphviz"
|
25
|
+
# fontsize=12;
|
26
|
+
# }
|
27
|
+
|
28
|
+
$:.unshift( "../../lib" );
|
29
|
+
require "graphviz"
|
30
|
+
|
31
|
+
GraphViz::new( "TrafficLights", :type => :digraph ) { |g|
|
32
|
+
g.gy2[:shape] = :box; g.yr2[:shape] = :box; g.rg2[:shape] = :box; g.gy1[:shape] = :box; g.yr1[:shape] = :box; g.rg1[:shape] = :box;
|
33
|
+
g.green2.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
|
34
|
+
g.yellow2.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
|
35
|
+
g.red2.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
|
36
|
+
g.safe2.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
|
37
|
+
g.safe1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
|
38
|
+
g.green1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
|
39
|
+
g.yellow1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
|
40
|
+
g.red1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
|
41
|
+
|
42
|
+
g.gy2 << g.yellow2
|
43
|
+
g.rg2 << g.green2
|
44
|
+
g.yr2 << g.safe1
|
45
|
+
g.yr2 << g.red2
|
46
|
+
g.safe2 << g.rg2
|
47
|
+
g.green2 << g.gy2
|
48
|
+
g.yellow2 << g.yr2
|
49
|
+
g.red2 << g.rg2
|
50
|
+
g.gy1 << g.yellow1
|
51
|
+
g.rg1 << g.green1
|
52
|
+
g.yr1 << g.safe2
|
53
|
+
g.yr1 << g.red1
|
54
|
+
g.safe1 << g.rg1
|
55
|
+
g.green1 << g.gy1
|
56
|
+
g.yellow1 << g.yr1
|
57
|
+
g.red1 << g.rg1
|
58
|
+
|
59
|
+
g[:overlap] = :false
|
60
|
+
g[:label] = 'PetriNet Model TrafficLights\nExtracted from ConceptBase and layed out by Graphviz'
|
61
|
+
g[:fontsize] = 12;
|
62
|
+
}.output( :errors => 1, :png => "#{$0}.png" )
|
@@ -0,0 +1,26 @@
|
|
1
|
+
$:.unshift( "../lib" )
|
2
|
+
require 'graphviz/family_tree'
|
3
|
+
|
4
|
+
tree = GraphViz::FamilyTree.new do
|
5
|
+
generation do
|
6
|
+
benoist.is_a_man( "Benoist" )
|
7
|
+
nathalie.is_a_woman( "Nathalie" )
|
8
|
+
|
9
|
+
benoist.is_maried_with nathalie
|
10
|
+
end
|
11
|
+
|
12
|
+
generation do
|
13
|
+
charlotte.is_a_woman( "Charlotte" )
|
14
|
+
amelie.is_a_woman( "Amelie" )
|
15
|
+
clement.is_a_man( "Clement" )
|
16
|
+
gregoire.is_a_man( "Gregoire" )
|
17
|
+
|
18
|
+
muriel.is_a_woman( "Muriel" )
|
19
|
+
|
20
|
+
gregoire.is_maried_with muriel
|
21
|
+
end
|
22
|
+
|
23
|
+
couple( benoist, nathalie ).kids( charlotte, amelie, clement, gregoire )
|
24
|
+
end
|
25
|
+
|
26
|
+
tree.graph.save( :png => "#{$0}.png" )
|
@@ -0,0 +1,26 @@
|
|
1
|
+
$:.unshift( "../lib" )
|
2
|
+
require 'graphviz'
|
3
|
+
|
4
|
+
class Array
|
5
|
+
def rotate
|
6
|
+
## Solution #1 by greg
|
7
|
+
# self.push(r = self.shift)
|
8
|
+
# return r
|
9
|
+
|
10
|
+
## Solution #2 by madx
|
11
|
+
# shift.tap {|e| push e }
|
12
|
+
|
13
|
+
## Solution #3 by greg
|
14
|
+
push(shift)[-1]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
type = ["box", "point"]
|
19
|
+
|
20
|
+
GraphViz.graph( :G, :use => :neato ) { |g|
|
21
|
+
(1..5).each do |x|
|
22
|
+
(1..5).each do |y|
|
23
|
+
g.add_nodes( "n#{x}x#{y}", :pos => "#{x},#{y}!", :shape => type.rotate )
|
24
|
+
end
|
25
|
+
end
|
26
|
+
}.output( :png => "#{$0}.png" )
|
@@ -0,0 +1,9 @@
|
|
1
|
+
$:.unshift( "../lib" )
|
2
|
+
require 'graphviz'
|
3
|
+
|
4
|
+
puts GraphViz.graph( :G ) { |g|
|
5
|
+
g[:label] = "<<b>This</b> is <i>a</i> <b>test</b>>"
|
6
|
+
n1 = g.add_nodes( "N1", :label => '<<b>node 1</b>>')
|
7
|
+
n2 = g.add_nodes( "N2", :label => '<<b>node 2</b>>')
|
8
|
+
g.add_edges( n1, n2, :label => '<<u>edge</u>>')
|
9
|
+
}.output( :png => "#{$0}.png", :none => String )
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# http://www.graphviz.org/Gallery/directed/hello.html
|
2
|
+
#
|
3
|
+
# digraph G {Hello->World}
|
4
|
+
|
5
|
+
$:.unshift( "../lib" );
|
6
|
+
require "graphviz"
|
7
|
+
|
8
|
+
GraphViz::new( :G, :type => :digraph ) { |g|
|
9
|
+
g.world( :label => "<World" ) << g.hello( :label => "Hello>" )
|
10
|
+
}.output( :svg => "#{$0}.svg" )
|
@@ -0,0 +1,8 @@
|
|
1
|
+
$:.unshift( "../lib" )
|
2
|
+
|
3
|
+
require 'graphviz/graphml'
|
4
|
+
|
5
|
+
graphml = File.join( File.dirname( File.expand_path( __FILE__ ) ), "graphml", "port.graphml" )
|
6
|
+
g = GraphViz::GraphML.new( graphml )
|
7
|
+
g.graph.output( :png => "#{$0}.png" )
|
8
|
+
puts g.graph.output( :none => String )
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# By Jonas Elfström - http://github.com/jonelf
|
4
|
+
$:.unshift( "../lib" )
|
5
|
+
require 'graphviz'
|
6
|
+
|
7
|
+
@min_level=1
|
8
|
+
@max_level=12
|
9
|
+
@max_depth=10
|
10
|
+
start_level=6
|
11
|
+
|
12
|
+
@g = GraphViz.new(:G, :type => "strict digraph")
|
13
|
+
# or @g = GraphViz.new(:G, :type => "digraph", :strict => true)
|
14
|
+
# or @g = GraphViz.digraph(:G, :strict => true)
|
15
|
+
# or @g = GraphViz.strict_digraph(:G)
|
16
|
+
|
17
|
+
def add_nodes(level, depth, parent)
|
18
|
+
if depth<@max_depth
|
19
|
+
current=[level, depth].join(",")
|
20
|
+
|
21
|
+
sub=level<=>@min_level
|
22
|
+
add=@max_level<=>level
|
23
|
+
add_nodes(level-sub, depth+1, current)
|
24
|
+
add_nodes(level+add, depth+1, current)
|
25
|
+
|
26
|
+
@g.add_nodes(current).label=level.to_s
|
27
|
+
@g.add_edges(parent, current) unless parent=="00"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
add_nodes(start_level, 0, "00")
|
32
|
+
|
33
|
+
@g.output( :png => "#{$0}.png" )
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift( "../lib" );
|
4
|
+
require "graphviz"
|
5
|
+
|
6
|
+
hello_world = GraphViz::new( "" )
|
7
|
+
|
8
|
+
hello = hello_world.add_nodes("Hello")
|
9
|
+
world = hello_world.add_nodes("World")
|
10
|
+
hello_world.add_edges(hello, world)
|
11
|
+
|
12
|
+
# final_graph = GraphViz.parse_string( hello_world.output( :dot => String ) )
|
13
|
+
# final_graph.each_node do |_, node|
|
14
|
+
# puts "Node #{node.id} : position = #{node[:pos]}"
|
15
|
+
# end
|
16
|
+
|
17
|
+
hello_world = hello_world.complete
|
18
|
+
hello_world.each_node do |_, node|
|
19
|
+
puts "Node #{node.id} : position = " ; p node[:pos].point
|
20
|
+
end
|
21
|
+
|
22
|
+
puts "---------"
|
23
|
+
|
24
|
+
puts hello_world.output( :canon => String )
|
@@ -0,0 +1,32 @@
|
|
1
|
+
$:.unshift( "../lib" )
|
2
|
+
require 'graphviz/dsl'
|
3
|
+
|
4
|
+
digraph :G do
|
5
|
+
cluster_0 do
|
6
|
+
graph[:style => :filled, :color => :lightgrey]
|
7
|
+
node[:style => :filled, :color => :white]
|
8
|
+
a0 << a1 << a2 << a3
|
9
|
+
graph[:label => "process #1"]
|
10
|
+
end
|
11
|
+
|
12
|
+
cluster_1 do
|
13
|
+
node[:style => :filled]
|
14
|
+
b0 << b1 << b2 << b3
|
15
|
+
graph[:label => "process #2", :color => :blue]
|
16
|
+
end
|
17
|
+
|
18
|
+
start << a0
|
19
|
+
start << b0
|
20
|
+
a1 << b3
|
21
|
+
b2 << a3
|
22
|
+
a3 << a0
|
23
|
+
a3 << _end
|
24
|
+
b3 << _end
|
25
|
+
|
26
|
+
start[:shape] = :Mdiamond
|
27
|
+
_end[:label] = "end"
|
28
|
+
_end[:shape] = :Mdiamond
|
29
|
+
|
30
|
+
output(:png => "#{$0}.png")
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
$:.unshift( "../lib" )
|
2
|
+
require 'graphviz/dsl'
|
3
|
+
|
4
|
+
digraph :G do
|
5
|
+
|
6
|
+
node[:color => :lightblue, :style => :filled, :shape => :egg]
|
7
|
+
edge[:color => :gray, :arrowhead => :vee]
|
8
|
+
|
9
|
+
e "C/C++", "Java"
|
10
|
+
|
11
|
+
java do
|
12
|
+
n("Java") << n("Groovy")
|
13
|
+
n("Java") << n("Clojure")
|
14
|
+
n("Java") << n("JRuby")
|
15
|
+
graph[:label => "Java", :color => :blue]
|
16
|
+
end
|
17
|
+
|
18
|
+
e "C/C++", "Perl"
|
19
|
+
e "Perl", "PHP"
|
20
|
+
e "Perl", "Ruby"
|
21
|
+
e "Ruby", "Rubinius"
|
22
|
+
e "Ruby", "MacRuby"
|
23
|
+
e "Ruby", "JRuby"
|
24
|
+
|
25
|
+
%w{ Ruby JRuby MacRuby Rubinius }.each do |ruby|
|
26
|
+
n(ruby)[:color => :tomato]
|
27
|
+
end
|
28
|
+
|
29
|
+
output :png => "#{$0}.png"
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
$:.unshift("../lib")
|
2
|
+
|
3
|
+
require 'graphviz'
|
4
|
+
graph = GraphViz.graph(:G)
|
5
|
+
graph.add_nodes(["A", "B", "C", "D", "E", "F", "G"])
|
6
|
+
graph.add_edges("A", ["B", "C", "E"])
|
7
|
+
graph.add_edges("B", ["D", "F"])
|
8
|
+
graph.add_edges("C", "G")
|
9
|
+
graph.add_edges("F", "E")
|
10
|
+
graph.output(:png => "#{$0}.png")
|
@@ -0,0 +1,27 @@
|
|
1
|
+
$:.unshift("../lib")
|
2
|
+
|
3
|
+
require 'graphviz'
|
4
|
+
require 'graphviz/theory'
|
5
|
+
g = GraphViz.graph(:G)
|
6
|
+
g.add_nodes(["A", "B", "C", "D", "E", "F", "G"])
|
7
|
+
g.add_edges("A", ["B", "C", "E"])
|
8
|
+
g.add_edges("B", ["D", "F"])
|
9
|
+
g.add_edges("C", "G")
|
10
|
+
g.add_edges("F", "E")
|
11
|
+
g.output(:png => "#{$0}000.png")
|
12
|
+
|
13
|
+
t = GraphViz::Theory.new(g)
|
14
|
+
i = 1
|
15
|
+
t.dfs("A") { |node|
|
16
|
+
name = sprintf("%s%03d.png", $0, i)
|
17
|
+
node[:color => :lightblue, :style => :filled]
|
18
|
+
g.output(:png => name)
|
19
|
+
i = i + 1
|
20
|
+
}
|
21
|
+
|
22
|
+
t.bfs("A") { |node|
|
23
|
+
name = sprintf("%s%03d.png", $0, i)
|
24
|
+
node[:color => :red, :style => :filled]
|
25
|
+
g.output(:png => name)
|
26
|
+
i = i + 1
|
27
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift( "../lib" );
|
4
|
+
require "graphviz"
|
5
|
+
|
6
|
+
g = GraphViz::new( "G", :type => "graph" )
|
7
|
+
g[:compound] = true
|
8
|
+
g[:rankdir] = "LR"
|
9
|
+
|
10
|
+
c0 = g.add_graph( "cluster0", "label" => "cluster #1" )
|
11
|
+
a0 = c0.add_nodes( "a0" )
|
12
|
+
|
13
|
+
c1 = g.add_graph( "cluster1", "label" => "cluster #2" )
|
14
|
+
b0 = c1.add_nodes( "b0" )
|
15
|
+
|
16
|
+
e1 = g.add_edges(a0,b0)
|
17
|
+
e1[:lhead] = c1.id
|
18
|
+
e1[:ltail] = c0.id
|
19
|
+
|
20
|
+
e2 = g.add_edges(a0,b0)
|
21
|
+
e2[:lhead] = c1.id
|
22
|
+
|
23
|
+
g.output( :png => "#{$0}.png" )
|