Module: Plexus::Dot
- Included in:
- GraphBuilder
- Defined in:
- lib/plexus/dot.rb
Instance Method Summary collapse
-
#dotty(params = {}, dotfile = 'graph.dot') ⇒ Object
Call
dotty
for the graph which is written to the file ‘graph.dot’ in the # current directory. -
#to_dot(params = {}) ⇒ Object
Output the dot format as a string.
-
#to_dot_graph(params = {}) ⇒ DOT::DOTDigraph, DOT::DOTSubgraph
Creates a DOT::DOTDigraph for directed graphs or a DOT::DOTSubgraph for undirected graphs.
-
#write_to_graphic_file(fmt = 'png', dotfile = 'graph') ⇒ Object
(also: #as_dot_graphic)
Use
dot
to create a graphical representation of the graph.
Instance Method Details
#dotty(params = {}, dotfile = 'graph.dot') ⇒ Object
Call dotty
for the graph which is written to the file ‘graph.dot’ in the # current directory.
71 72 73 74 |
# File 'lib/plexus/dot.rb', line 71 def dotty(params = {}, dotfile = 'graph.dot') File.open(dotfile, 'w') {|f| f << to_dot(params) } system('dotty', dotfile) end |
#to_dot(params = {}) ⇒ Object
Output the dot format as a string
65 66 67 |
# File 'lib/plexus/dot.rb', line 65 def to_dot(params = {}) to_dot_graph(params).to_s end |
#to_dot_graph(params = {}) ⇒ DOT::DOTDigraph, DOT::DOTSubgraph
Creates a DOT::DOTDigraph for directed graphs or a DOT::DOTSubgraph for undirected graphs.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/plexus/dot.rb', line 15 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_klass = directed? ? DOT::DOTDirectedArc : DOT::DOTArc vertices.each do |v| name = v.to_s || v.__id__.to_s name = name.dup.gsub(/"/, "'") params = { 'name' => '"'+ name +'"', 'fontsize' => fontsize, 'label' => name} v_label = vertex_label(v) params.merge!(v_label) if v_label and v_label.kind_of? Hash graph << DOT::DOTNode.new(params) end edges.each do |e| if e.source.to_s.nil? source_label = e.source.__id__.to_s else source_label = e.source.to_s.dup end if e.target.to_s.nil? target_label = e.target.__id__.to_s else target_label = e.target.to_s.dup end source_label.gsub!(/"/, "'") target_label.gsub!(/"/, "'") params = { 'from' => '"'+ source_label + '"', 'to' => '"'+ target_label + '"', 'fontsize' => fontsize } e_label = edge_label(e) params.merge!(e_label) if e_label and e_label.kind_of? Hash graph << edge_klass.new(params) end graph end |
#write_to_graphic_file(fmt = 'png', dotfile = 'graph') ⇒ Object Also known as: as_dot_graphic
Use dot
to create a graphical representation of the graph. Returns the filename of the graphics file.
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/plexus/dot.rb', line 78 def write_to_graphic_file(fmt = 'png', dotfile = 'graph') src = dotfile + '.dot' dot = dotfile + '.' + fmt # DOT::DOTSubgraph creates subgraphs, but that's broken. buffer = self.to_dot buffer.gsub!(/^subgraph/, "graph") File.open(src, 'w') {|f| f << buffer << "\n"} system( "dot -T#{fmt} #{src} -o #{dot}" ) dot end |