398: def to_dot_graph (params = {})
399: params['name'] ||= self.class.name.gsub(/:/,'_')
400: fontsize = params['fontsize'] ? params['fontsize'] : '8'
401: graph = (directed? ? DOT::DOTDigraph : DOT::DOTSubgraph).new(params)
402: edge_klass = directed? ? DOT::DOTDirectedEdge : DOT::DOTEdge
403: vertices.each do |v|
404: name = v.to_s
405: params = {'name' => '"'+name+'"',
406: 'fontsize' => fontsize,
407: 'label' => name}
408: v_label = v.to_s
409: params.merge!(v_label) if v_label and v_label.kind_of? Hash
410: graph << DOT::DOTNode.new(params)
411: end
412: edges.each do |e|
413: params = {'from' => '"'+ e.source.to_s + '"',
414: 'to' => '"'+ e.target.to_s + '"',
415: 'fontsize' => fontsize }
416: e_label = e.to_s
417: params.merge!(e_label) if e_label and e_label.kind_of? Hash
418: graph << edge_klass.new(params)
419: end
420: graph
421: end