Source code for visgraph.renderers.svgrend

import visgraph.renderers as vg_render

example = '''
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<rect x="20" y="20" rx="20" ry="20" width="250" height="100"
style="fill:red;stroke:black;stroke-width:5;opacity:0.5"/>
</svg>
'''

class SvgGraphRenderer(vg_render.GraphRenderer):
[docs] def __init__(self, graph, svgfile): vg_render.GraphRenderer.__init__(self, graph) self.svgfile = svgfile self._node_xml = [] self._edge_xml = [] def renderNode(self, nid, ninfo, xpos, ypos):
[docs] rectstr = '<rect x="%d" y="%d" width="10" height="10" style="fill:red;stroke:black;stroke-width:5;opacity:0.5"/>' % (xpos,ypos) self._node_xml.append(rectstr) def renderEdge(self, eid, einfo, points):
[docs] pointstr = ' '.join([ '%d,%d' % (x,y) for x,y in points ]) edgestr = '<polyline points="%s" style="fill:white;stroke:red;stroke-width:2"/>' % pointstr self._edge_xml.append(edgestr) def setNodeSizes(self, graph):
[docs] # Do the node sizing... for nid,ninfo in graph.getNodes(): ninfo['size'] = (10,10) def beginRender(self, xsize, ysize):
[docs] vg_render.GraphRenderer.beginRender(self, xsize, ysize) def endRender(self):
[docs] # Actually write out the file. f = file(self.svgfile,'wb') f.write('<?xml version="1.0" standalone="no"?>\n') #f.write('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >\n') xsize = self._vg_canvas_width ysize = self._vg_canvas_height f.write('<svg width="%d" height="%d" version="1.1" xmlns="http://www.w3.org/2000/svg">\n' % (xsize,ysize)) for x in self._node_xml: f.write(x + '\n') for x in self._edge_xml: f.write(x + '\n') f.write('</svg>\n') f.close() if __name__ == '__main__':
import visgraph.graphcore as vg_graphcore import visgraph.layouts.dynadag as vg_dynadag import visgraph.renderers.svgrend as vg_svgrend g = vg_graphcore.HierarchicalGraph() g.addNode('A', rootnode=True) g.addNode('B') g.addNode('C') g.addNode('D') g.addNode('E') g.addNode('F') g.addNode('G') g.addEdge('A','B') g.addEdge('A','C') g.addEdge('B','D') g.addEdge('B','E') g.addEdge('C','F') g.addEdge('C','G') layout = vg_dynadag.DynadagLayout(g) rend = vg_svgrend.SvgGraphRenderer(g, 'test.svg') layout.renderGraph(rend)