Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/torch/graph.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkoray kavukcuoglu <koray@kavukcuoglu.org>2015-06-18 12:46:46 +0300
committerkoray kavukcuoglu <koray@kavukcuoglu.org>2015-06-18 12:46:46 +0300
commit2cb4e4f940a852150fd61b097ae4c2ab86ae9ffc (patch)
treee84c66f868e93124795afde0820f4211108c6ef7
parentfbf41c34f41ce4487fa732b8d5ec19d37fefcac1 (diff)
use graphviz lib interface instead of dumping dot file
-rw-r--r--graphviz.lua36
1 files changed, 23 insertions, 13 deletions
diff --git a/graphviz.lua b/graphviz.lua
index b549696..4d7ed69 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)
+function graph.graphvizLayout(g, algorithm, fname)
if not graphvizOk or not cgraphOk then
error("graphviz library could not be loaded.")
end
@@ -98,7 +98,9 @@ function graph.graphvizLayout(g, algorithm)
local algorithm = algorithm or "dot"
assert(0 == graphviz.gvLayout(context, graphvizGraph, algorithm),
"graphviz layout failed")
- assert(0 == graphviz.gvRender(context, graphvizGraph, algorithm, nil),
+ -- 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),
"graphviz render failed")
-- Extract bounding box.
@@ -117,6 +119,19 @@ function graph.graphvizLayout(g, algorithm)
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)
@@ -126,20 +141,15 @@ end
function graph.dot(g,title,fname)
- 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
+ local qt_display = fname == nil
+ fname = fname or os.tmpname()
+ local fnsvg = fname .. '.svg'
+ graph.graphvizLayout(g, 'dot', fname)
+ if qt_display then
require 'qtsvg'
- local qs = qt.QSvgWidget(fnsvg)
+ local qs = qt.QSvgWidget(fname .. '.svg')
qs:show()
- os.remove(fngv)
os.remove(fnsvg)
- -- print(fngv,fnpng)
return qs
end
end