diff options
author | koray kavukcuoglu <koray@kavukcuoglu.org> | 2015-06-18 17:47:25 +0300 |
---|---|---|
committer | koray kavukcuoglu <koray@kavukcuoglu.org> | 2015-06-18 17:47:25 +0300 |
commit | 695dab95971d4a70d8400d49d6af6ca787621ba5 (patch) | |
tree | 02b40959f11711c54c0d83274dce274c65b836f2 | |
parent | b218960a0742f5aa14f72ddbfca5b4ed8aab47b8 (diff) |
Revert "use graphviz lib interface instead of dumping dot file"
-rw-r--r-- | graphviz.lua | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/graphviz.lua b/graphviz.lua index 4d7ed69..b549696 100644 --- a/graphviz.lua +++ b/graphviz.lua @@ -88,7 +88,7 @@ where `n` is the number of nodes in the graph. Coordinates are in the interval [0, 1]. ]] -function graph.graphvizLayout(g, algorithm, fname) +function graph.graphvizLayout(g, algorithm) if not graphvizOk or not cgraphOk then error("graphviz library could not be loaded.") end @@ -98,9 +98,7 @@ function graph.graphvizLayout(g, algorithm, fname) local algorithm = algorithm or "dot" assert(0 == graphviz.gvLayout(context, graphvizGraph, algorithm), "graphviz layout failed") - -- the algorithm that is passed is a loyout algorithm not a rendering - -- format, which is typically like png, svg or dot - assert(0 == graphviz.gvRender(context, graphvizGraph, 'dot', nil), + assert(0 == graphviz.gvRender(context, graphvizGraph, algorithm, nil), "graphviz render failed") -- Extract bounding box. @@ -119,19 +117,6 @@ function graph.graphvizLayout(g, algorithm, fname) positions[id][2] = y end - -- if a file name is given, then render to that file - if fname then - local context = graphviz.gvContext() - local graphvizGraph = cgraph.agmemread(g:todot()) - assert(0 == graphviz.gvLayout(context, graphvizGraph, algorithm), - "graphviz layout failed") - assert(0 == graphviz.gvRender(context, graphvizGraph, 'svg', io.open(fname .. '.svg','w')), - "graphviz render failed") - graphviz.gvFreeLayout(context, graphvizGraph) - cgraph.agclose(graphvizGraph) - graphviz.gvFreeContext(context) - end - -- Clean up. graphviz.gvFreeLayout(context, graphvizGraph) cgraph.agclose(graphvizGraph) @@ -141,15 +126,20 @@ end function graph.dot(g,title,fname) - local qt_display = fname == nil - fname = fname or os.tmpname() - local fnsvg = fname .. '.svg' - graph.graphvizLayout(g, 'dot', fname) - if qt_display then + local gv = g:todot(title) + local fngv = (fname or os.tmpname()) .. '.dot' + local fgv = io.open(fngv,'w') + fgv:write(gv) + fgv:close() + local fnsvg = (fname or os.tmpname()) .. '.svg' + os.execute('dot -Tsvg -o ' .. fnsvg .. ' ' .. fngv) + if not fname then require 'qtsvg' - local qs = qt.QSvgWidget(fname .. '.svg') + local qs = qt.QSvgWidget(fnsvg) qs:show() + os.remove(fngv) os.remove(fnsvg) + -- print(fngv,fnpng) return qs end end |