lib/rgl/dot.rb in rgl-0.2.2 vs lib/rgl/dot.rb in rgl-0.2.3

- old
+ new

@@ -1,63 +1,71 @@ +# dot.rb # -# $Id: dot.rb,v 1.4 2002/11/13 21:53:27 monora Exp $ +# $Id: dot.rb,v 1.5 2005/02/04 22:41:46 monora Exp $ # -# Minimal Dot support based on Dave Thomas dot module (included in -# rdoc). rdot.rb is a modified version which also contains support for -# undirected graphs. +# Minimal Dot support, based on Dave Thomas's dot module (included in rdoc). +# rdot.rb is a modified version which also contains support for undirected +# graphs. require 'rgl/rdot' module RGL + module Graph - # Return a DOT::DOTDigraph for directed graphs or a DOT::DOTSubgraph for an - # undirected Graph. _params_ can contain any graph property specified in - # rdot.rb. - def to_dot_graph( params = {} ) - params['name'] ||= self.class.name.gsub(/:/,'_') - fontsize = params['fontsize'] ? params['fontsize'] : '8' - graph = (directed? ? DOT::DOTDigraph : DOT::DOTSubgraph).new(params) - edge_class = directed? ? DOT::DOTDirectedEdge : DOT::DOTEdge - each_vertex do |v| - name = v.to_s - graph << DOT::DOTNode.new('name' => '"' + name + '"', - 'fontsize' => fontsize, - 'label' => name) - end - each_edge do |u,v| - graph << edge_class.new('from' => '"'+ u.to_s + '"', - 'to' => '"'+ v.to_s + '"', - 'fontsize' => fontsize) - end - graph - end - # Output the DOT-graph to stream _s_. - def print_dotted_on (params = {}, s=$stdout) - s << to_dot_graph(params).to_s << "\n" - end + # Return a DOT::DOTDigraph for directed graphs or a DOT::DOTSubgraph for an + # undirected Graph. _params_ can contain any graph property specified in + # rdot.rb. - # Call +dotty+ for the graph which is written to the file 'graph.dot' in the - # current directory. - def dotty( params = {} ) - dotfile = "graph.dot" - File.open(dotfile, "w") {|f| - print_dotted_on(params, f) - } - system("dotty", dotfile) - end + def to_dot_graph (params = {}) + params['name'] ||= self.class.name.gsub(/:/,'_') + fontsize = params['fontsize'] ? params['fontsize'] : '8' + graph = (directed? ? DOT::DOTDigraph : DOT::DOTSubgraph).new(params) + edge_class = directed? ? DOT::DOTDirectedEdge : DOT::DOTEdge + each_vertex do |v| + name = v.to_s + graph << DOT::DOTNode.new('name' => '"' + name + '"', + 'fontsize' => fontsize, + 'label' => name) + end + each_edge do |u,v| + graph << edge_class.new('from' => '"'+ u.to_s + '"', + 'to' => '"'+ v.to_s + '"', + 'fontsize' => fontsize) + end + graph + end - # Use +do+ to create a graphical representation of the graph. Returns the - # filename of the graphics file. - def write_to_graphic_file(fmt='png', dotfile="graph") + # Output the DOT-graph to stream _s_. + + def print_dotted_on (params = {}, s = $stdout) + s << to_dot_graph(params).to_s << "\n" + end + + # Call +dotty+ for the graph which is written to the file 'graph.dot' + # in the # current directory. + + def dotty (params = {}) + dotfile = "graph.dot" + File.open(dotfile, "w") {|f| + print_dotted_on(params, f) + } + system("dotty", dotfile) + end + + # Use +do+ to create a graphical representation of the graph. Returns the + # filename of the graphics file. + + def write_to_graphic_file (fmt='png', dotfile="graph") src = dotfile + ".dot" dot = dotfile + "." + fmt File.open(src, 'w') do |f| f << self.to_dot_graph.to_s << "\n" end system( "dot -T#{fmt} #{src} -o #{dot}" ) dot end - end -end + + end # module Graph +end # module RGL